typeman 1.0.1

Typing speed test with practice mode in GUI, TUI and CLI
Documentation
use std::fmt::Display;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum TimeSelection {
    Seconds15,
    Seconds30,
    Seconds60,
    Seconds120,
    Minutes5,
    Minutes10,
}

impl TimeSelection {
    pub fn all() -> &'static [TimeSelection] {
        &[
            TimeSelection::Seconds15,
            TimeSelection::Seconds30,
            TimeSelection::Seconds60,
            TimeSelection::Seconds120,
            TimeSelection::Minutes5,
            TimeSelection::Minutes10,
        ]
    }

    pub fn to_seconds(&self) -> u64 {
        match self {
            TimeSelection::Seconds15 => 15,
            TimeSelection::Seconds30 => 30,
            TimeSelection::Seconds60 => 60,
            TimeSelection::Seconds120 => 120,
            TimeSelection::Minutes5 => 300,
            TimeSelection::Minutes10 => 600,
        }
    }

    pub fn count() -> usize {
        Self::all().len()
    }
}

impl Default for TimeSelection {
    fn default() -> Self {
        TimeSelection::Seconds30
    }
}

impl Display for TimeSelection {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            TimeSelection::Seconds15 => write!(f, "15s"),
            TimeSelection::Seconds30 => write!(f, "30s"),
            TimeSelection::Seconds60 => write!(f, "60s"),
            TimeSelection::Seconds120 => write!(f, "120s"),
            TimeSelection::Minutes5 => write!(f, "5min"),
            TimeSelection::Minutes10 => write!(f, "10min"),
        }
    }
}