use super::{CredError, Credential, CredentialSource};
use crate::capabilities::ProviderKind;
pub struct EnvCredentialSource;
#[async_trait::async_trait]
impl CredentialSource for EnvCredentialSource {
async fn get_credential(&self, provider: ProviderKind) -> Result<Credential, CredError> {
let active = std::env::var("GREENTIC_LLM_PROVIDER")
.map_err(|_| CredError::Missing(provider))?
.parse::<ProviderKind>()
.map_err(|_| CredError::Missing(provider))?;
if active != provider {
return Err(CredError::Missing(provider));
}
let api_key =
std::env::var("GREENTIC_LLM_API_KEY").map_err(|_| CredError::Missing(provider))?;
if api_key.is_empty() {
return Err(CredError::Missing(provider));
}
let base_url = std::env::var("GREENTIC_LLM_BASE_URL").ok();
Ok(Credential {
api_key,
base_url,
expires_at: None,
})
}
}