use crate::{error::SendSyncError, ErrorKind};
pub trait Vault: std::fmt::Debug + Send + Sync + 'static {
type Error: SendSyncError;
fn encrypt(&self, payload: &[u8]) -> Result<Vec<u8>, Self::Error>;
fn decrypt(&self, payload: &[u8]) -> Result<Vec<u8>, Self::Error>;
}
pub trait AnyVault: std::fmt::Debug + Send + Sync + 'static {
fn encrypt(&self, payload: &[u8]) -> Result<Vec<u8>, crate::Error>;
fn decrypt(&self, payload: &[u8]) -> Result<Vec<u8>, crate::Error>;
}
impl<T, E> AnyVault for T
where
T: Vault<Error = E> + std::fmt::Debug,
E: SendSyncError,
{
fn encrypt(&self, payload: &[u8]) -> Result<Vec<u8>, crate::Error> {
self.encrypt(payload)
.map_err(|err| crate::Error::from(ErrorKind::Vault(Box::new(err))))
}
fn decrypt(&self, payload: &[u8]) -> Result<Vec<u8>, crate::Error> {
Vault::decrypt(self, payload)
.map_err(|err| crate::Error::from(ErrorKind::Vault(Box::new(err))))
}
}