firedbg-rust-debugger 1.74.1

FireDBG Debugger Engine for Rust
Documentation
#[derive(Debug, Copy, Clone)]
enum Size {
    Small,
    Medium,
    Big,
}

#[derive(Debug, Copy, Clone)]
#[repr(u8)]
enum Direction {
    North,
    East,
    South,
    West,
}

#[derive(Debug, Copy, Clone)]
#[repr(u16)]
enum Greek {
    Alpha,
    Beta,
    Gamma,
    Delta,
    Epsilon,
}

fn shrink(size: Size) -> Size {
    match size {
        Size::Small => panic!("Can't be smaller"),
        Size::Medium => Size::Small,
        Size::Big => Size::Medium,
    }
}

fn flip(dir: Direction) -> Direction {
    match dir {
        Direction::North => Direction::South,
        Direction::East => Direction::West,
        Direction::South => Direction::North,
        Direction::West => Direction::East,
    }
}

fn advance(greek: Greek) -> Greek {
    match greek {
        Greek::Alpha => Greek::Beta,
        Greek::Beta => Greek::Gamma,
        Greek::Gamma => Greek::Delta,
        Greek::Delta => Greek::Epsilon,
        Greek::Epsilon => panic!("No where"),
    }
}

fn main() {
    let big = Size::Big;
    let medium = shrink(big);
    assert!(matches!(medium, Size::Medium));
    dbg!((big, medium));

    let north = Direction::North;
    let south = flip(north);
    assert!(matches!(south, Direction::South));
    dbg!((north, south));

    let east = Direction::East;
    let west = flip(east);
    assert!(matches!(west, Direction::West));
    dbg!((east, west));

    let alpha = Greek::Alpha;
    let beta = advance(alpha);
    assert!(matches!(beta, Greek::Beta));
    dbg!((alpha, beta));

    let beta = Greek::Beta;
    let gamma = advance(beta);
    assert!(matches!(gamma, Greek::Gamma));
    dbg!((beta, gamma));

    let gamma = Greek::Gamma;
    let delta = advance(gamma);
    assert!(matches!(delta, Greek::Delta));
    dbg!((gamma, delta));
}