3 个版本 (破坏性更新)
0.3.0 | 2022年2月20日 |
---|---|
0.2.0 | 2021年5月25日 |
0.1.0 | 2021年4月18日 |
1715 在 Rust 模式 中
每月下载量 71,778
用于 79 个 crate (直接使用 19 个)
14KB
120 行
trait-set
:稳定 Rust 上的特质别名
支持稳定 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