bai2 0.4.0

A tool to parse BAI2 files
Documentation
use chrono::{NaiveDate, NaiveTime};
use std::str::FromStr;

pub fn parse_string(string: &str) -> String {
    string.trim().replace("/", "")
}

pub fn parse_currency(string: &str, default: &str) -> String {
    return match parse_string(string).as_str() {
        "" => default.to_string(),
        c => c.to_string(),
    };
}

pub fn parse_date(string: &str) -> Option<NaiveDate> {
    let date = parse_string(string);
    let maybe_date = NaiveDate::parse_from_str(&date, "%y%m%d");
    match maybe_date {
        Ok(d) => Some(d),
        Err(_) => None,
    }
}

pub fn parse_time(string: &str) -> Option<String> {
    match parse_string(string).as_str() {
        "" => None,
        "2400" => Some("end of day".to_string()),
        "9999" => Some("end of day".to_string()),
        time => match NaiveTime::parse_from_str(time, "%H%M") {
            Ok(t) => Some(t.to_string()),
            Err(_) => None,
        },
    }
}

pub fn parse_int<T: FromStr>(string: &str) -> Option<T> {
    let number = string
        .trim()
        .replace("/", "")
        .trim_start_matches('0')
        .parse::<T>();

    match number {
        Ok(n) => Some(n),
        Err(_) => None,
    }
}