#[cfg(feature = "compression")]
pub mod compression;
pub mod encoding;
#[cfg(feature = "compression")]
mod wrapper {
#[derive(Debug, thiserror::Error)]
pub enum DataAnchorUtilsError {
#[error(transparent)]
CompressionError(#[from] crate::compression::DataAnchorCompressionError),
#[error(transparent)]
EncodingError(#[from] crate::encoding::DataAnchorEncodingError),
}
pub type DataAnchorUtilsResult<T = ()> = Result<T, DataAnchorUtilsError>;
pub fn encode_and_compress<T>(
encoding: &EncodingType,
compression: &CompressionType,
data: &T,
) -> DataAnchorUtilsResult<Vec<u8>>
where
T: crate::encoding::Encodable,
{
let encoded_data = encoding.encode(data)?;
Ok(compression.compress(&encoded_data)?)
}
pub fn decompress_and_decode<T>(data: &[u8]) -> DataAnchorUtilsResult<T>
where
T: crate::encoding::Decodable,
{
let decompressed_data = CompressionType::default().decompress(data)?;
Ok(EncodingType::default().decode(&decompressed_data)?)
}
#[cfg(feature = "async")]
mod _async {
use super::DataAnchorUtilsResult;
use crate::{
compression::{CompressionType, DataAnchorCompressionAsync},
encoding::{DataAnchorEncoding, EncodingType},
};
pub async fn encode_and_compress_async<T>(
encoding: &EncodingType,
compression: &CompressionType,
data: &T,
) -> DataAnchorUtilsResult<Vec<u8>>
where
T: crate::encoding::Encodable,
{
let encoded_data = encoding.encode(data)?;
Ok(compression.compress_async(&encoded_data).await?)
}
pub async fn decompress_and_decode_async<T>(data: &[u8]) -> DataAnchorUtilsResult<T>
where
T: crate::encoding::Decodable,
{
let decompressed_data = CompressionType::default().decompress_async(data).await?;
Ok(EncodingType::default().decode(&decompressed_data)?)
}
}
#[cfg(feature = "async")]
pub use _async::*;
use crate::{
compression::{CompressionType, DataAnchorCompression},
encoding::{DataAnchorEncoding, EncodingType},
};
}
#[cfg(feature = "compression")]
pub use wrapper::*;