mod errors;
mod log;
mod vault;
pub use dotenvy;
pub use errors::Error;
use errors::Result;
use vault::Vault;
pub fn dotenv() -> Result<()> {
Vault::new().load()
}
pub fn dotenv_override() -> Result<()> {
Vault::new().load_override()
}
#[cfg(test)]
mod tests {
use serial_test::serial;
use std::{env, fs::File, io::prelude::*};
use tempfile::tempdir;
#[test]
#[serial] fn dotenv_ok() {
env::set_var("DOTENV_KEY", "dotenv://:key_ddcaa26504cd70a6fef9801901c3981538563a1767c297cb8416e8a38c62fe00@dotenv.local/vault/.env.vault?environment=production");
let tmp = tempdir().unwrap();
let vault_path = tmp.path().join(".env.vault");
let mut vault = File::create(&vault_path).unwrap();
vault
.write_all("DOTENV_VAULT_PRODUCTION=\"s7NYXa809k/bVSPwIAmJhPJmEGTtU0hG58hOZy7I0ix6y5HP8LsHBsZCYC/gw5DDFy5DgOcyd18R\"".as_bytes())
.unwrap();
vault.sync_all().unwrap();
let cwd = env::current_dir().unwrap();
env::set_current_dir(&tmp).unwrap();
let result = super::dotenv();
assert!(result.is_ok());
let from_vault = env::var("ALPHA");
assert!(from_vault.is_ok());
assert!(from_vault.unwrap() == "zeta");
tmp.close().unwrap();
env::remove_var("DOTENV_KEY");
env::remove_var("ALPHA");
env::set_current_dir(cwd).unwrap();
}
#[test]
#[serial] fn dotenv_fallback_to_env() {
let tmp = tempdir().unwrap();
let env_path = tmp.path().join(".env");
let mut env = File::create(&env_path).unwrap();
env.write_all("TESTKEY=\"from .env\"".as_bytes()).unwrap();
env.sync_all().unwrap();
let cwd = env::current_dir().unwrap();
env::set_current_dir(&tmp).unwrap();
let result = super::dotenv();
assert!(result.is_ok());
let from_env = env::var("TESTKEY");
assert!(from_env.is_ok());
assert!(from_env.unwrap() == "from .env");
tmp.close().unwrap();
env::remove_var("TESTKEY");
env::set_current_dir(cwd).unwrap();
}
#[test]
#[serial] fn dotenv_override_ok() {
env::set_var("DOTENV_KEY", "dotenv://:key_ddcaa26504cd70a6fef9801901c3981538563a1767c297cb8416e8a38c62fe00@dotenv.local/vault/.env.vault?environment=production");
let tmp = tempdir().unwrap();
let vault_path = tmp.path().join(".env.vault");
let mut vault = File::create(&vault_path).unwrap();
vault
.write_all("DOTENV_VAULT_PRODUCTION=\"s7NYXa809k/bVSPwIAmJhPJmEGTtU0hG58hOZy7I0ix6y5HP8LsHBsZCYC/gw5DDFy5DgOcyd18R\"".as_bytes())
.unwrap();
vault.sync_all().unwrap();
let cwd = env::current_dir().unwrap();
env::set_current_dir(&tmp).unwrap();
env::set_var("ALPHA", "beta");
let result = super::dotenv_override();
assert!(result.is_ok());
let from_vault = env::var("ALPHA");
assert!(from_vault.is_ok());
assert!(from_vault.unwrap() == "zeta");
tmp.close().unwrap();
env::remove_var("DOTENV_KEY");
env::remove_var("ALPHA");
env::set_current_dir(cwd).unwrap();
}
#[test]
#[serial] fn dotenv_override_fallback_to_env() {
let tmp = tempdir().unwrap();
let env_path = tmp.path().join(".env");
let mut env = File::create(&env_path).unwrap();
env.write_all("TESTKEY=\"from .env\"".as_bytes()).unwrap();
env.sync_all().unwrap();
let cwd = env::current_dir().unwrap();
env::set_current_dir(&tmp).unwrap();
env::set_var("TESTKEY", "helloworld");
let result = super::dotenv_override();
assert!(result.is_ok());
let from_env = env::var("TESTKEY");
assert!(from_env.is_ok());
assert!(from_env.unwrap() == "from .env");
tmp.close().unwrap();
env::remove_var("TESTKEY");
env::set_current_dir(cwd).unwrap();
}
}