Skip to content

Manishearth/rust-extensible

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Extensible enums for Rust

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages