#[sealed]
This crate provides a convenient and simple way to implement the sealed trait pattern, as described in the Rust API Guidelines [1].
toml
[dependencies]
sealed = "0.2.0-rc3"
In the following code structs A
and B
implement the sealed trait T
,
the C
struct, which is not sealed, will error during compilation.
Examples are available in examples/
, you can also see a demo in demo/
.
```rust use sealed::sealed;
trait T {}
pub struct A;
impl T for A {}
pub struct B;
impl T for B {}
pub struct C;
impl T for C {} // compile error
fn main() { return } ```
This is the list of attributes that can be used along #[sealed]
:
- #[sealed]
: the main attribute macro, without attribute parameters.
- #[sealed(erase)]
: this option turns on bound erasure. This is useful when using the #[sealed]
macro inside a function.
For an example, see bound-erasure-fn
.
The #[sealed]
attribute can be attached to either a trait
or an impl
.
It supports:
- Several traits per module
- Generic parameters
- Foreign types
- Blanket impl
s
```rust use sealed::sealed;
pub trait T {}
pub struct A; pub struct B(i32);
impl T for A {}
impl T for B {}
fn main() { return; } ```
```rust use sealed::sealed;
pub(crate) mod _sealt { pub trait Sealed {} } pub trait T: _sealt::Sealed {}
pub struct A; pub struct B(i32);
impl _sealt::Sealed for A {} impl T for A {}
impl _sealt::Sealed for B {} impl T for B {}
fn main() { return; } ```