rs_snake 1.0.5

The classic 'Snake' game as a terminal application.
Documentation
use clap::{Parser, ValueEnum};

#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
pub struct ArgsParser {
    #[arg(short, long, value_enum, default_value_t = GridSize::Small)]
    pub grid_size: GridSize,
    #[arg(short, long, value_enum, default_value_t = Speed::High)]
    pub speed: Speed,
    #[arg(short, long, value_enum, default_value_t = MovementKeyScheme::Arrows)]
    pub movement_key_scheme: MovementKeyScheme,
}

#[derive(ValueEnum, Clone, Debug)]
pub enum GridSize {
    Small,
    Medium,
    Large,
}

impl GridSize {
    pub fn value(&self) -> f64 {
        match self {
            GridSize::Small => 0.7,
            GridSize::Medium => 0.85,
            GridSize::Large => 1.0,
        }
    }
}

#[derive(ValueEnum, Clone, Debug)]
pub enum Speed {
    Slow,
    Moderate,
    High,
}

impl Speed {
    pub fn value(&self) -> u64 {
        match self {
            Speed::Slow => 120,
            Speed::Moderate => 90,
            Speed::High => 60,
        }
    }
}

#[derive(ValueEnum, Clone, Debug, PartialEq)]
pub enum MovementKeyScheme {
    WSAD,
    Arrows,
}