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
1,356,025 每月下载量
用于 433 个crate (35直接)
290KB
5.5K SLoC
Rust Thrift库
概述
此crate实现了构建可工作Thrift服务器和客户端所需的组件。它分为以下模块
- 错误
- 协议
- 传输
- 服务器
- 自动生成
模块分层如图所示。 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 precross
和make check
成功tutorial/bin/tutorial_client
和tutorial/bin/tutorial_server
通信
依赖项
~295–435KB