14 个版本

0.6.0-rc32024 年 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 模式

Download history 74615/week @ 2024-05-04 78720/week @ 2024-05-11 127873/week @ 2024-05-18 107583/week @ 2024-05-25 127839/week @ 2024-06-01 127110/week @ 2024-06-08 117404/week @ 2024-06-15 128766/week @ 2024-06-22 91725/week @ 2024-06-29 71318/week @ 2024-07-06 60816/week @ 2024-07-13 68124/week @ 2024-07-20 92624/week @ 2024-07-27 96339/week @ 2024-08-03 110846/week @ 2024-08-10 98582/week @ 2024-08-17

412,860 每月下载量
用于 117 包(44 个直接使用)

MIT/Apache

15KB
151

#[sealed]

MSRV 1.61.0

该包提供了一种方便且简单的方法来实现密封特性模式,如 Rust API 指南中所述 [1].

[dependencies]
sealed = "0.5"

示例

在以下代码中,结构体 AB 实现了密封特性 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.0MIT license 下获得许可。
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,都应按照上述方式双重许可,而无需任何额外的条款或条件。

依赖关系

~290–750KB
~18K SLoC