Skip to content
Extensible enums for Rust
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
tests
.gitignore
.travis.yml
Cargo.toml
README.md

README.md

rust-extensible

Build Status

Extensible enums for Rust

This is a plugin form of this RfC.

Basically, if an enum is marked #[extensible], this plugin will prevent its use in a match statement lacking a wildcard. This lets library authors define stable enums whilst keeping the flexibility of extending them later.

#[extensible]
enum Foo {
    Bar,
    Baz(u8),
    Quux
}
pub use Foo::*;

fn main() {
    let x = Bar;
    let mut out = match x {
        Bar => 1u8,
        Baz(y) => y,
        Quux => 0u8, 
        // There is no wildcard here, so it will not compile
    };
    println!("{}", out);

    // This is fine
    out = match x {
        Bar => 1u8,
        Baz(y) => y,
        _ => 0u8, // THis will compile fine
    };
    println!("{}", out);
}
You can’t perform that action at this time.