extensible 0.0.1

A plugin to prevent exhaustive matches from being used on enums marked as 'extensible'
docs.rs failed to build extensible-0.0.1
Please check the build logs and, if you believe this is docs.rs' fault, open an issue.

rust-extensible

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