use crate::BoxFuture;
use crate::credentials::SecretValue;
use crate::credentials::traits::CredentialProvider;
use crate::error::SynwireError;
#[derive(Debug, Clone)]
pub struct StaticCredentialProvider {
secret: SecretValue,
}
impl StaticCredentialProvider {
pub const fn new(secret: SecretValue) -> Self {
Self { secret }
}
}
impl CredentialProvider for StaticCredentialProvider {
fn get_credential(&self) -> BoxFuture<'_, Result<SecretValue, SynwireError>> {
let secret = self.secret.clone();
Box::pin(async move { Ok(secret) })
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used)]
mod tests {
use super::*;
#[tokio::test]
async fn returns_fixed_value() {
let provider = StaticCredentialProvider::new(SecretValue::new("sk-test-key"));
let cred = provider.get_credential().await.unwrap();
assert_eq!(cred.expose(), "sk-test-key");
}
#[tokio::test]
async fn refresh_returns_same_value() {
let provider = StaticCredentialProvider::new(SecretValue::new("sk-test-key"));
let cred = provider.refresh_credential().await.unwrap();
assert_eq!(cred.expose(), "sk-test-key");
}
}