Enums

With the enum keyword you can define a enum:

#![allow(unused)]
fn main() {
mod option {
    enum Option<T> {
        Some {
            value: T,
        },
        None,
    }

    impl<T> Option<T> {
        pub fn is_some(&self) -> bool {
            match self {
                Option#Some { value } => {
                    return true;
                },
                Option#None => {
                    return false;
                }
            }
        }

        pub fn is_none(&self) -> bool {
            return !self.is_some();
        }
    }
}
}
mod Enum {
    enum A {
        X {
            a: i32,
        },
        Y {
            b: i32,
        }
    }

    fn main() -> i32 {
        let x: A = A#X {
            a: 2,
        };

        let mut result: i32 = 0;

        match x {
            A#X { a } => {
                result = a;
            },
            A#Y { b } => {
                result = b;
            }
        }

        return result;
    }
}