use crate::errors::Result;
use crate::seed::SecretsStore;
use async_trait::async_trait;
use greentic_secrets_spec::SecretUri;
use greentic_types::secrets::SecretFormat;
#[async_trait]
pub trait SecretsSink: Send + Sync {
async fn put_secret(&self, uri: &SecretUri, value: &[u8], format: SecretFormat) -> Result<()>;
}
pub struct StoreSink<S: SecretsStore> {
store: S,
}
impl<S: SecretsStore> StoreSink<S> {
pub fn new(store: S) -> Self {
Self { store }
}
pub fn store(&self) -> &S {
&self.store
}
}
#[async_trait]
impl<S: SecretsStore> SecretsSink for StoreSink<S> {
async fn put_secret(&self, uri: &SecretUri, value: &[u8], format: SecretFormat) -> Result<()> {
self.store.put(&uri.to_string(), format, value).await
}
}