Skip to main content

tatara_engine/secrets/
env.rs

1//! Environment variable secret provider — reads secrets from process env.
2//! Used for testing and local development.
3
4use 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}