use alloc::string::String;
use alloc::vec;
use alloc::vec::Vec;
use core::fmt::{Debug, Display, Formatter};
pub struct InflateDecodeErrors
{
pub error: DecodeErrorStatus,
pub data: Vec<u8>
}
impl InflateDecodeErrors
{
pub fn new(error: DecodeErrorStatus, data: Vec<u8>) -> InflateDecodeErrors
{
InflateDecodeErrors { error, data }
}
pub fn new_with_error(error: DecodeErrorStatus) -> InflateDecodeErrors
{
InflateDecodeErrors::new(error, vec![])
}
}
impl Debug for InflateDecodeErrors
{
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result
{
writeln!(f, "{:?}", self.error)
}
}
pub enum DecodeErrorStatus
{
InsufficientData,
Generic(&'static str),
GenericStr(String),
CorruptData,
OutputLimitExceeded(usize, usize),
MismatchedCRC(u32, u32),
MismatchedAdler(u32, u32)
}
impl Debug for DecodeErrorStatus
{
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result
{
match self
{
Self::InsufficientData => writeln!(f, "Insufficient data"),
Self::Generic(reason) => writeln!(f, "{reason}"),
Self::GenericStr(reason) => writeln!(f, "{reason}"),
Self::CorruptData => writeln!(f, "Corrupt data"),
Self::OutputLimitExceeded(limit, current) => writeln!(
f,
"Output limit exceeded, set limit was {limit} and output size is {current}"
),
Self::MismatchedCRC(expected, found) =>
{
writeln!(f, "Mismatched CRC, expected {expected} but found {found}")
}
Self::MismatchedAdler(expected, found) =>
{
writeln!(f, "Mismatched Adler, expected {expected} but found {found}")
}
}
}
}
impl Display for InflateDecodeErrors
{
#[allow(clippy::uninlined_format_args)]
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result
{
writeln!(f, "{:?}", self)
}
}
#[cfg(feature = "std")]
impl std::error::Error for InflateDecodeErrors {}