11个版本 (6个破坏性)

0.17.0 2022年11月14日
0.16.0 2022年7月1日
0.15.0 2021年9月26日
0.14.2 2021年9月26日
0.0.1 2017年4月10日

#1 in #apache

Download history 273874/week @ 2024-04-23 227023/week @ 2024-04-30 255724/week @ 2024-05-07 293346/week @ 2024-05-14 296685/week @ 2024-05-21 303055/week @ 2024-05-28 329887/week @ 2024-06-04 314420/week @ 2024-06-11 311067/week @ 2024-06-18 356557/week @ 2024-06-25 313287/week @ 2024-07-02 312864/week @ 2024-07-09 320093/week @ 2024-07-16 329031/week @ 2024-07-23 331215/week @ 2024-07-30 321343/week @ 2024-08-06

1,356,025 每月下载量
用于 433 个crate (35直接)

Apache-2.0

290KB
5.5K SLoC

Rust Thrift库

概述

此crate实现了构建可工作Thrift服务器和客户端所需的组件。它分为以下模块

  1. 错误
  2. 协议
  3. 传输
  4. 服务器
  5. 自动生成

模块分层如图所示。 generated 层是Thrift编译器的Rust插件生成的代码。它使用此crate中定义的组件来序列化和反序列化类型并实现RPC。用户通过在顶部编写自己的代码与这些类型和服务交互。

+-----------+
|  app dev  |
+-----------+
| generated | <-> errors/results
+-----------+
|  protocol |
+-----------+
| transport |
+-----------+

使用此crate

thrift = "x.y.z" 添加到您的 Cargo.toml 中,其中 x.y.z 是您使用的Thrift编译器的版本。

API文档

完整 Rustdoc

兼容性

Rust库和自动生成的代码针对Rust版本1.28+。它目前不使用任何Rust 2018功能。

破坏性更改

破坏性更改已最小化。当进行更改时,它们将在下面概述,并提供过渡指南。

Thrift 0.15.0
  • [THRIFT-5360] - 对于 Error 类型不再定义或生成 description() 方法。

    Error.description() 在 1.27 版本中被软弃用,并在 1.41 版本中被正式弃用。库的错误类型也不再实现 Error.description()。此外,由于此更改,生成的 Rust Error 表示法不再实现 Error.description() 方法。相反,它生成一个具有相同信息的 Display 实现方法。

    例如

    exception Xception {
      1: i32 errorCode,
      2: string message
    }
    

    以前生成

    use std::error::Error;
    use std::fmt;
    use std::fmt::{Display, Formatter};
    
    // auto-generated by the Thrift compiler
    #[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
    pub struct Xception {
      pub error_code: Option<i32>,
      pub message: Option<String>,
    }
    
    // auto-generated by the Thrift compiler
    impl Error for Xception {
      fn description(&self) -> &str {
        "remote service threw Xception"
      }
    }
    
    // auto-generated by the Thrift compiler
    impl From<Xception> for thrift::Error {
      fn from(e: Xception) -> Self {
        thrift::Error::User(Box::new(e))
      }
    }
    
    // auto-generated by the Thrift compiler
    impl Display for Xception {
      fn fmt(&self, f: &mut Formatter) -> fmt::Result {
        self.description().format(f)
      }
    }
    

    现在生成

    use std::error::Error;
    use std::fmt;
    use std::fmt::{Display, Formatter};
    
    // auto-generated by the Thrift compiler
    #[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
    pub struct Xception {
      pub error_code: Option<i32>,
      pub message: Option<String>,
    }
    
    // auto-generated by the Thrift compiler
    impl Error for Xception { }
    
    // auto-generated by the Thrift compiler
    impl From<Xception> for thrift::Error {
      fn from(e: Xception) -> Self {
        thrift::Error::User(Box::new(e))
      }
    }
    
    // auto-generated by the Thrift compiler
    impl Display for Xception {
      fn fmt(&self, f: &mut Formatter) -> fmt::Result {
        write!(f, "remote service threw Xception")
      }
    }
    
  • [THRIFT-5314] - 生成具有向前兼容性的枚举实现(即对未知值不报错)

    由于此更改,枚举的 Rust 表示法从标准 Rust 枚举更改为具有关联常量的新类型结构体。

    例如

      // THRIFT
      enum Operation {
        ADD,
        SUBTRACT,
        MULTIPLY,
        DIVIDE,
      }
    

    以前生成

      // OLD AUTO-GENERATED RUST
      pub enum Operation {
         Add,
         Subtract,
         Multiply,
         Divide,
       }
    

    现在生成

      // NEW AUTO-GENERATED RUST
      pub struct Operation(pub i32);
    
      impl Operation {
        pub const ADD: Operation = Operation(0);
        pub const SUBTRACT: Operation = Operation(1);
        pub const MULTIPLY: Operation = Operation(2);
        pub const DIVIDE: Operation = Operation(3);
      }
    
Thrift 0.14.0
  • [THRIFT-5158] - Rust 库和生成器现在仅支持 Rust 2018。需要 rust 1.40.0 或更高版本

    Rust thrift 库通过 cargo fix --edition 更新到 Rust 2018。仓库中的所有测试代码也进行了更新。代码生成器也进行了更新,仅支持 Rust 2018。

Thrift 0.13.0
  • [THRIFT-4536] - 使用来自 std 的 TryFrom,需要 rust 1.34.0 或更高版本

    之前 TryFrom 来自 try_from crate,现在来自 std 库,但此功能仅在 rust 1.34.0 中可用。此外,ordered-float 现在在 thrift 模块下重新导出,以减少可能的依赖不匹配。

Thrift 0.12.0
  • [THRIFT-4529] - Rust 枚举变量现在使用驼峰命名法而不是大写字母,以符合 Rust 命名规范

    之前,枚举变量在自动生成的代码中都是大写字母。例如,以下 thrift 枚举

    // THRIFT
    enum Operation {
      ADD,
      SUBTRACT,
      MULTIPLY,
      DIVIDE,
    }
    

    以前生成

    // OLD AUTO-GENERATED RUST
    pub enum Operation {
       ADD,
       SUBTRACT,
       MULTIPLY,
       DIVIDE,
     }
    

    现在生成

    // NEW AUTO-GENERATED RUST
    pub enum Operation {
       Add,
       Subtract,
       Multiply,
       Divide,
     }
    

    您必须将代码中的所有枚举变量更改为使用驼峰命名。这应该是一个搜索和替换。

贡献

欢迎提交错误报告和 PR!有关更多详细信息,请参阅 Thrift 网站

Thrift Rust 支持需要在几个目录中的代码

  • compiler/cpp/src/thrift/generate/t_rs_generator.cc:绑定代码生成器
  • lib/rs:运行时库
  • lib/rs/test:补充测试
  • tutorial/rs:教程客户端和服务器
  • test/rs:跨语言测试客户端和服务器

所有库代码、测试代码和自动生成的代码均无警告编译并通过 clippy。所有新代码都必须做到同样!在做出更改时,请确保

  • rustc 不输出任何警告
  • 默认设置下的 clippy 不输出任何警告(包括自动生成的代码)
  • cargo test 成功
  • make precrossmake check 成功
  • tutorial/bin/tutorial_clienttutorial/bin/tutorial_server 通信

依赖项

~295–435KB