env-loader 0.3.2

Simple storage for env variables with typings
Documentation
#[derive(Debug, Clone)]
pub enum Value {
    Str,
    Int,
    Long,
    Bool,
}

#[derive(Debug, Clone)]
pub enum InnerValue {
    Str(String),
    Int(i32),
    Long(i64),
    Bool(bool),
    None,
}
#[allow(private_in_public)]
impl From<(String, &Value)> for InnerValue {
    fn from(value: (String, &Value)) -> InnerValue {
        match value.1 {
            Value::Bool => match value.0.to_ascii_lowercase().as_ref() {
                "true" => InnerValue::Bool(true),
                "false" => InnerValue::Bool(false),
                _ => InnerValue::None,
            },
            Value::Int => {
                let parsed = value.0.parse();
                if parsed.is_err() {
                    return InnerValue::None;
                }
                InnerValue::Int(parsed.unwrap())
            }
            Value::Long => {
                let parsed = value.0.parse();
                if parsed.is_err() {
                    return InnerValue::None;
                }
                InnerValue::Long(parsed.unwrap())
            }
            Value::Str => InnerValue::Str(value.0),
        }
    }
}

impl From<InnerValue> for Option<i64> {
    fn from(value: InnerValue) -> Self {
        match value {
            InnerValue::Long(val) => Some(val),
            _ => None,
        }
    }
}

impl From<InnerValue> for Option<i32> {
    fn from(value: InnerValue) -> Self {
        match value {
            InnerValue::Int(num) => Some(num),
            _ => None,
        }
    }
}
impl From<InnerValue> for Option<String> {
    fn from(value: InnerValue) -> Self {
        match value {
            InnerValue::Str(str) => Some(str),
            _ => None,
        }
    }
}
impl From<InnerValue> for Option<bool> {
    fn from(value: InnerValue) -> Self {
        match value {
            InnerValue::Bool(flag) => Some(flag),
            _ => None,
        }
    }
}