ripmors 0.1.0

ripmors is a library for encoding and decoding international Morse code and several variants
Documentation
use ripmors::*;

use clap::{Parser, ValueEnum};

#[derive(ValueEnum, Debug, Default, Clone, Copy, Eq, Parser, PartialEq)]
#[clap(rename_all = "kebab_case")]
enum EncodeVariant {
    #[default]
    Unicode,
    Ascii,
}

#[derive(ValueEnum, Debug, Default, Clone, Copy, Eq, Parser, PartialEq)]
#[clap(rename_all = "kebab_case")]
enum DecodeVariant {
    #[default]
    Standard,
    Greek,
    Russian,
    Japanese,
    Korean,
    Hebrew,
    Arabic,
}

#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
    #[arg(short, long, num_args = 0..=1, default_missing_value = "standard")]
    decode: Option<DecodeVariant>,
    #[arg(short, long, num_args = 0..=1, default_missing_value = "unicode")]
    encode: Option<EncodeVariant>,
}

fn main() {
    let args = Args::parse();

    let mut stdin = std::io::stdin();
    let mut stdout = std::io::stdout();

    if let Some(variant) = args.decode {
        let char_decode = match variant {
            DecodeVariant::Standard => to_standard,
            DecodeVariant::Greek => to_greek,
            DecodeVariant::Russian => to_russian,
            DecodeVariant::Japanese => to_japanese,
            DecodeVariant::Korean => to_korean,
            DecodeVariant::Hebrew => to_hebrew,
            DecodeVariant::Arabic => to_arabic,
        };
        decode_stream(&mut stdin, &mut stdout, char_decode);
    } else if args.encode == Some(EncodeVariant::Ascii) {
        encode_stream_ascii(&mut stdin, &mut stdout);
    } else {
        encode_stream(&mut stdin, &mut stdout);
    }
}