extensible

A plugin to prevent exhaustive matches from being used on enums marked as 'extensible'


Keywords
plugin, extensible, enum
License
MPL-2.0

Documentation

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