diff options
author | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
commit | 1b6a04ca5504955c571d1c97504fb45ea0befee4 (patch) | |
tree | 7579f518b23313e8a9748a88ab6173d5e030b227 /vendor/zune-inflate/src/errors.rs | |
parent | 5ecd8cf2cba827454317368b68571df0d13d7842 (diff) | |
download | fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.tar.xz fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.zip |
Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
Diffstat (limited to 'vendor/zune-inflate/src/errors.rs')
-rw-r--r-- | vendor/zune-inflate/src/errors.rs | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/vendor/zune-inflate/src/errors.rs b/vendor/zune-inflate/src/errors.rs new file mode 100644 index 0000000..b32124d --- /dev/null +++ b/vendor/zune-inflate/src/errors.rs @@ -0,0 +1,121 @@ +//! Errors possible when decoding deflate/zlib/gzip +//! streams + +use alloc::string::String; +use alloc::vec; +use alloc::vec::Vec; +use core::fmt::{Debug, Display, Formatter}; + +/// A struct returned when decompression fails +/// +/// This struct contains two fields, +/// +/// - `error`:Tells you the error that actually occured. +/// - `data`: Gives you decoded data up until that point when +/// the error was encountered. +/// +/// One can recover data up to the error if they so wish but +/// guarantees about data state is not given +pub struct InflateDecodeErrors +{ + /// reason why decompression fails + pub error: DecodeErrorStatus, + /// Decoded data up until that decompression error + pub data: Vec<u8> +} + +impl InflateDecodeErrors +{ + /// Create a new decode wrapper with data being + /// how many bytes we actually decoded before hitting an error + /// + /// # Arguments + /// - `error`: Error encountered during decoding + /// - `data`: Data up to that point of decoding + /// + /// # Returns + /// Itself + pub fn new(error: DecodeErrorStatus, data: Vec<u8>) -> InflateDecodeErrors + { + InflateDecodeErrors { error, data } + } + /// Create a new decode wrapper with an empty vector + /// + /// # Arguments + /// - `error`: Error encountered during decoding. + 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 +{ + /// Input data is not enough to construct + /// a full output + InsufficientData, + /// Anything that isn't significant + Generic(&'static str), + /// Anything that isn't significant but we need to + /// pass back information to the user as to what went wrong + GenericStr(String), + ///Input data was malformed. + CorruptData, + /// Limit set by the user was exceeded by + /// decompressed output + OutputLimitExceeded(usize, usize), + /// Output CRC does not match stored CRC. + /// + /// Only present for zlib + MismatchedCRC(u32, u32), + /// Output Adler does not match stored adler + /// + /// Only present for gzip + 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 {} |