#traits #alias #utilities #helper

trait-set

稳定 Rust 对特质别名特性的支持

3 个版本 (破坏性更新)

0.3.0 2022年2月20日
0.2.0 2021年5月25日
0.1.0 2021年4月18日

1715Rust 模式

Download history 15716/week @ 2024-03-14 14828/week @ 2024-03-21 13612/week @ 2024-03-28 12319/week @ 2024-04-04 13442/week @ 2024-04-11 14633/week @ 2024-04-18 12999/week @ 2024-04-25 13676/week @ 2024-05-02 16534/week @ 2024-05-09 15208/week @ 2024-05-16 13704/week @ 2024-05-23 13707/week @ 2024-05-30 16753/week @ 2024-06-06 17628/week @ 2024-06-13 19348/week @ 2024-06-20 15080/week @ 2024-06-27

每月下载量 71,778
用于 79 个 crate (直接使用 19 个)

MIT 许可证

14KB
120

trait-set:稳定 Rust 上的特质别名

状态: CI

项目信息: Docs.rs 最新版本 许可证 Rust 1.50+ 需要

支持稳定 Rust 上的特质别名。

描述

本库提供对 特质别名 的支持:这是一个 Rust 编译器已经支持的特性,但尚未稳定。

这个想法很简单:将一组特质组合成一个单一的名字。最简单的例子将是

use trait_set::trait_set;

trait_set! {
    pub trait ThreadSafe = Send + Sync;
}

这里显示的宏 trait_set 是本库的主要实体:它允许声明多个特质别名,每个别名都表示为

[visibility] trait [AliasName][<generics>] = [Element1] + [Element2] + ... + [ElementN];

示例

use trait_set::trait_set;

trait_set! {
    // Simple combination of two traits.
    /// Doc-comments are also supported btw.
    pub trait ThreadSafe = Send + Sync;

    // Generic alias that gets passed to the associated type.
    pub trait ThreadSafeIterator<T> = ThreadSafe + Iterator<Item = T>;

    // Specialized alias for a generic trait.
    pub trait ThreadSafeBytesIterator = ThreadSafeIterator<u8>;

    // Lifetime bounds.
    pub trait StaticDebug = 'static + std::fmt::Debug;

    // Higher-ranked trait bounds.
    pub trait Serde = Serialize + for<'de> Deserialize<'de>;

    // Lifetime as a generic parameter.
    pub trait SerdeLifetimeTemplate<'de> = Serialize + Deserialize<'de>;
    
    // Trait bounds on generic parameters for an alias.
    pub trait GenericIteratorSendableT<T: Send> = Iterator<Item = T>;
}

动机

Rust 很棒,而且随着时间的推移会变得更好。然而,从提议一个新特性到使其稳定之间的时间间隔太大。

特质别名是一个很好的例子:20% 的功能将满足 80% 的需求。因此,在它们稳定之前,这个库有望让一些人能够编写更易读的代码。

贡献

欢迎提交 PR!

许可证

trait-set 库采用 MIT 许可证。有关详细信息,请参阅 许可证

依赖

~1.5MB
~35K SLoC