9 个版本 (2 个稳定版)
1.0.1 | 2024 年 5 月 2 日 |
---|---|
0.5.0 | 2023 年 7 月 3 日 |
0.4.3 | 2023 年 3 月 9 日 |
0.4.2 | 2023 年 2 月 26 日 |
0.1.1 | 2023 年 2 月 21 日 |
#598 in Rust 模式
5,833 每月下载量
22KB
333 行
transitive
通过 derive 宏实现 Rust 的传递性转换。
原理
假设你已经有了类型 A
、B
和 C
,并且已经实现了以下转换
A->B
B->C
有时可能希望有一个 A -> C
实现,它可以很容易地表示为 A -> B -> C
。
这正是这个 crate 做的事情。通过 Transitive
derive 宏,它将为转换到/从派生类型和目标类型实现相应的 From
或 TryFrom
,前提是给定一个转换路径。
use transitive::Transitive;
#[derive(Transitive)]
#[transitive(into(B, C, D))] // impl From<A> for D by doing A -> B -> C -> D
struct A;
#[derive(Transitive)]
#[transitive(into(C, D))] // impl From<B> for D by doing B -> C -> D
struct B;
struct C;
struct D;
impl From<A> for B {
fn from(val: A) -> Self {
Self
}
};
impl From<B> for C {
fn from(val: B) -> Self {
Self
}
};
impl From<C> for D {
fn from(val: C) -> Self {
Self
}
};
#[test]
fn into() {
D::from(A);
D::from(B);
}
更多示例和解释可以在 文档 中找到。
许可证
根据 MIT 许可证授权(LICENSE-MIT 或 https://opensource.org/licenses/MIT)。
贡献
除非明确声明,否则对存储库的贡献将根据 MIT 许可证授权。可以在 此处 打开遇到的问题/错误。
依赖项
~255–700KB
~17K SLoC