tatara_engine/secrets/
env.rs1use super::{SecretFetcher, SecretValue};
5use anyhow::Result;
6use async_trait::async_trait;
7
8pub struct EnvSecretFetcher;
9
10#[async_trait]
11impl SecretFetcher for EnvSecretFetcher {
12 async fn fetch(&self, key: &str) -> Result<SecretValue> {
13 let value = std::env::var(key)
14 .map_err(|_| anyhow::anyhow!("environment variable '{}' not set", key))?;
15 Ok(SecretValue {
16 value,
17 version: "env".to_string(),
18 })
19 }
20}
21
22#[cfg(test)]
23mod tests {
24 use super::*;
25
26 #[tokio::test]
27 async fn test_env_fetch() {
28 std::env::set_var("TATARA_TEST_SECRET", "hunter2");
29 let fetcher = EnvSecretFetcher;
30 let result = fetcher.fetch("TATARA_TEST_SECRET").await.unwrap();
31 assert_eq!(result.value, "hunter2");
32 std::env::remove_var("TATARA_TEST_SECRET");
33 }
34
35 #[tokio::test]
36 async fn test_env_fetch_missing() {
37 let fetcher = EnvSecretFetcher;
38 assert!(fetcher.fetch("DEFINITELY_NOT_SET_XYZ_123").await.is_err());
39 }
40}