crypto-rust 0.1.0

A simple rust CLI application to print datas about cryptocurrency stuff
Documentation
use regex::Regex;
use checker_error::Error;

pub mod checker_error {
    use thiserror::Error;

    #[derive(Error, Debug)]
    pub enum Error {
        #[error("Two currency parameters is required.\nSyntax: {} price <currency1> <currency2>\n", env!("CARGO_PKG_NAME"))]
        ParamCountError,
        
        #[error("Invalid currency format for \"{currency}\".\nCurrency should be only composed of letters with a length of 3 or 4 characters.")]
        CurrencyFormatError {
            currency: String
        },

        #[error("Invalid CMC api key format.\n\nCorrect format should be:\nXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n")]
        ApiKeyFormatError
    }
}



pub fn params_for_price(
    args: Vec<String>
) -> Result<(String, String), checker_error::Error> {

    if args.len() < 4 {
        return Err(Error::ParamCountError);
    }

    let first_currency: String = args[2].to_uppercase();
    let second_currency: String = args[3].to_uppercase();

    verify_currency_format(&first_currency)?;
    verify_currency_format(&second_currency)?;

    return Ok((first_currency, second_currency));
}

pub fn verify_cmc_api_key_format(api_key: &String) -> Result<(), Error> {
    let api_key_regex = Regex::new(
        r"^[a-z0-9]{8}[-][a-z0-9]{4}[-][a-z0-9]{4}[-][a-z0-9]{4}[-][a-z0-9]{12}$"
    ).unwrap();

    if !api_key_regex.is_match(api_key) {
        return Err(Error::ApiKeyFormatError);
    }
    else {
        return Ok(());
    }
}

fn verify_currency_format(currency: &String) -> Result<(), Error> {
    let currency_regex = Regex::new(r"^[A-Z]{3,4}$").unwrap();

    if !currency_regex.is_match(currency) {
        return Err(Error::CurrencyFormatError{currency: String::from(currency)});
    }
    else { 
        return Ok(());
    }
}