#[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"

Example

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;

[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

fn main() { return } ```

Attributes

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.

Details

The #[sealed] attribute can be attached to either a trait or an impl. It supports: - Several traits per module - Generic parameters - Foreign types - Blanket impls

Expansion

Input

```rust use sealed::sealed;

[sealed]

pub trait T {}

pub struct A; pub struct B(i32);

[sealed]

impl T for A {}

[sealed]

impl T for B {}

fn main() { return; } ```

Expanded

```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; } ```