envault-processor 0.0.1

Cipher library for envault
Documentation
use crate::error::ConfigError;

const PREFIX: &str = "ENV_KEY";

pub fn key_for(_env: &str, _key: &str) -> Result<String, ConfigError> {
    if let Ok(value) = std::env::var(PREFIX.to_string() + "__" + _env + "__" + _key) {
        return Ok(value);
    }
    if let Ok(value) = std::env::var(PREFIX.to_string() + "__" + _env) {
        return Ok(value);
    }
    match std::env::var(PREFIX) {
        Ok(value) => Ok(value),
        Err(_) => Err(ConfigError::KeyNotFound),
    }
}

#[cfg(test)]
mod tests {
    use crate::env::key_for;
    use crate::with_env_vars::with_env_vars;

    #[test]
    fn with_root_password() {
        with_env_vars(vec![("ENV_KEY", Some("password1"))], || {
            let password = key_for("dev", "a").unwrap();
            assert_eq!(password, "password1");
        })
    }

    #[test]
    fn with_password_for_env() {
        with_env_vars(
            vec![
                ("ENV_KEY", Some("password1")),
                ("ENV_KEY__dev", Some("password2")),
            ],
            || {
                let password = key_for("dev", "a").unwrap();
                assert_eq!(password, "password2");
            },
        )
    }

    #[test]
    fn with_password_for_key() {
        with_env_vars(
            vec![
                ("ENV_KEY", Some("password1")),
                ("ENV_KEY__dev", Some("password2")),
                ("ENV_KEY__dev__a", Some("password3")),
            ],
            || {
                let password = key_for("dev", "a").unwrap();
                assert_eq!(password, "password3");
            },
        )
    }
}