termcinema-cli 0.1.0

๐ŸŽฌ Animated terminal-to-SVG renderer CLI for the termcinema project
Documentation
/// Predefined typing speed presets used for animation timing.
///
/// Each variant maps to a fixed frame delay (in milliseconds):
///
/// - ๐Ÿข `Slow`     โ†’ 150ms  ยท Snail-paced typing, good for cinematic effect
/// - ๐Ÿ‡ `Normal`   โ†’ 80ms   ยท Default typing speed
/// - ๐Ÿš€ `Fast`     โ†’ 45ms   ยท Snappy interaction, readable but quick
/// - โšก  `Extreme`  โ†’ 5ms    ยท Virtually instant output, useful for tests or skips
#[derive(Debug)]
pub(crate) enum SpeedPreset {
    Slow,
    Normal,
    Fast,
    Extreme,
}

/// Parse a user-provided string into a [`SpeedPreset`] variant.
///
/// Accepts case-insensitive values:
/// - `"slow"`
/// - `"normal"`
/// - `"fast"`
/// - `"extreme"`
///
/// Returns `None` if the input is unrecognized.
pub(crate) fn parse_speed(input: &str) -> Option<SpeedPreset> {
    match input.to_lowercase().as_str() {
        "slow" => Some(SpeedPreset::Slow),
        "normal" => Some(SpeedPreset::Normal),
        "fast" => Some(SpeedPreset::Fast),
        "extreme" => Some(SpeedPreset::Extreme),
        _ => None,
    }
}

/// Convert a [`SpeedPreset`] to its corresponding frame delay in milliseconds.
///
/// This delay defines how long to wait between each character during typing.
pub(crate) fn speed_to_delay_ms(preset: &SpeedPreset) -> u32 {
    match preset {
        SpeedPreset::Slow => 150,
        SpeedPreset::Normal => 80,
        SpeedPreset::Fast => 45,
        SpeedPreset::Extreme => 5,
    }
}