Skip to main content

synwire_core/credentials/
static_creds.rs

1//! Static credential provider.
2
3use crate::BoxFuture;
4use crate::credentials::SecretValue;
5use crate::credentials::traits::CredentialProvider;
6use crate::error::SynwireError;
7
8/// A credential provider that returns a fixed secret value.
9///
10/// Useful for testing or when the API key is known at construction time.
11///
12/// # Example
13///
14/// ```
15/// use synwire_core::credentials::{SecretValue, StaticCredentialProvider};
16///
17/// let provider = StaticCredentialProvider::new(SecretValue::new("sk-test"));
18/// ```
19#[derive(Debug, Clone)]
20pub struct StaticCredentialProvider {
21    secret: SecretValue,
22}
23
24impl StaticCredentialProvider {
25    /// Creates a new provider with the given fixed secret.
26    pub const fn new(secret: SecretValue) -> Self {
27        Self { secret }
28    }
29}
30
31impl CredentialProvider for StaticCredentialProvider {
32    fn get_credential(&self) -> BoxFuture<'_, Result<SecretValue, SynwireError>> {
33        let secret = self.secret.clone();
34        Box::pin(async move { Ok(secret) })
35    }
36}
37
38#[cfg(test)]
39#[allow(clippy::unwrap_used)]
40mod tests {
41    use super::*;
42
43    #[tokio::test]
44    async fn returns_fixed_value() {
45        let provider = StaticCredentialProvider::new(SecretValue::new("sk-test-key"));
46        let cred = provider.get_credential().await.unwrap();
47        assert_eq!(cred.expose(), "sk-test-key");
48    }
49
50    #[tokio::test]
51    async fn refresh_returns_same_value() {
52        let provider = StaticCredentialProvider::new(SecretValue::new("sk-test-key"));
53        let cred = provider.refresh_credential().await.unwrap();
54        assert_eq!(cred.expose(), "sk-test-key");
55    }
56}