use alloc::boxed::Box;
use alloc::vec::Vec;
pub type TransformerError = Box<dyn core::error::Error + Send + Sync>;
pub trait Transformer: Send + Sync {
fn apply_bytes(&mut self, data: &[u8]) -> Result<Vec<u8>, TransformerError>;
fn reverse_bytes(&mut self, data: &[u8]) -> Result<Vec<u8>, TransformerError>;
fn name(&self) -> Option<&'static str>;
fn box_clone(&self) -> Box<dyn Transformer>;
}
pub trait TransformerExt: Transformer {
fn apply<D: AsRef<[u8]>>(&mut self, data: D) -> Result<Vec<u8>, TransformerError> {
self.apply_bytes(data.as_ref())
}
fn reverse<D: AsRef<[u8]>>(&mut self, data: D) -> Result<Vec<u8>, TransformerError> {
self.reverse_bytes(data.as_ref())
}
}
impl<T: Transformer + ?Sized> TransformerExt for T {}