use crate::phys::CompressionType;
use core::fmt;
#[cfg(feature = "std")]
use std::error;
#[derive(Debug)]
pub enum CompressionError {
NotCompressable {},
Unsupported {
compression: CompressionType,
},
}
impl fmt::Display for CompressionError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
CompressionError::NotCompressable {} => {
write!(f, "Compression error, not compressable")
}
CompressionError::Unsupported { compression } => {
write!(f, "Unsupported Compression {compression}")
}
}
}
}
#[cfg(feature = "std")]
impl error::Error for CompressionError {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
None
}
}
pub trait Compression {
fn compress(
&mut self,
dst: &mut [u8],
src: &[u8],
level: u32,
) -> Result<usize, CompressionError>;
}
#[derive(Debug)]
pub enum DecompressionError {
EndOfInput {
offset: usize,
capacity: usize,
count: usize,
},
InvalidInput {
offset: usize,
},
Unsupported {
compression: CompressionType,
},
}
impl fmt::Display for DecompressionError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
DecompressionError::EndOfInput {
offset,
capacity,
count,
} => {
write!(f, "Decompression error, end of input at offset {offset} capacity {capacity} count {count}")
}
DecompressionError::InvalidInput { offset } => {
write!(f, "Decompression error, invalid input at offset {offset}")
}
DecompressionError::Unsupported { compression } => {
write!(
f,
"Decompression error, unsupported compression {compression}"
)
}
}
}
}
#[cfg(feature = "std")]
impl error::Error for DecompressionError {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
None
}
}
pub trait Decompression {
fn decompress(
&mut self,
dst: &mut [u8],
src: &[u8],
level: u32,
) -> Result<(), DecompressionError>;
}