14 个版本
0.6.0-rc3 | 2024 年 8 月 15 日 |
---|---|
0.5.0 | 2023 年 4 月 21 日 |
0.4.0 | 2022 年 1 月 30 日 |
0.3.0 | 2021 年 6 月 4 日 |
0.1.3 | 2020 年 12 月 17 日 |
#203 in Rust 模式
412,860 每月下载量
用于 117 个 包(44 个直接使用)
15KB
151 行
#[sealed]
该包提供了一种方便且简单的方法来实现密封特性模式,如 Rust API 指南中所述 [1].
[dependencies]
sealed = "0.5"
示例
在以下代码中,结构体 A
和 B
实现了密封特性 T
,未密封的结构体 C
在编译时将报错。
示例可在 examples/
中找到,您也可以在 demo/
中查看演示。
use sealed::sealed;
#[sealed]
trait T {}
pub struct A;
#[sealed]
impl T for A {}
pub struct B;
#[sealed]
impl T for B {}
pub struct C;
impl T for C {} // compile error
参数
以下是可以用于 #[sealed]
属性的参数列表
-
#[sealed(erase)]
: 启用特性边界擦除。当在函数内部使用#[sealed]
宏时很有用。有关示例,请参阅bound-erasure-fn
示例。 -
#[sealed(pub(crate))]
或#[sealed(pub(in some::path))]
:允许调整生成的密封模块(默认为私有)的可见性。当特性和其实现定义在不同的模块中时,这很有用。例如,请参阅nesting
示例。注意,仅使用pub
是不允许的,因为它打破了密封的整个概念。
贡献
请参阅 CONTRIBUTING.md。
许可证
根据您的选择,在 Apache License, Version 2.0 或 MIT license 下获得许可。除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,都应按照上述方式双重许可,而无需任何额外的条款或条件。
依赖关系
~290–750KB
~18K SLoC