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 模式

Download history 794/week @ 2024-04-14 778/week @ 2024-04-21 1000/week @ 2024-04-28 511/week @ 2024-05-05 721/week @ 2024-05-12 732/week @ 2024-05-19 1232/week @ 2024-05-26 1209/week @ 2024-06-02 1276/week @ 2024-06-09 1279/week @ 2024-06-16 2257/week @ 2024-06-23 1009/week @ 2024-06-30 1228/week @ 2024-07-07 1112/week @ 2024-07-14 2146/week @ 2024-07-21 1347/week @ 2024-07-28

5,833 每月下载量

MIT 许可证

22KB
333

Crates.io

transitive

通过 derive 宏实现 Rust 的传递性转换。

原理

假设你已经有了类型 ABC,并且已经实现了以下转换

  • A->B
  • B->C

有时可能希望有一个 A -> C 实现,它可以很容易地表示为 A -> B -> C

这正是这个 crate 做的事情。通过 Transitive derive 宏,它将为转换到/从派生类型和目标类型实现相应的 FromTryFrom,前提是给定一个转换路径。

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