lz4_flex/frame/
mod.rs
1use std::{fmt, io};
21
22#[cfg_attr(feature = "safe-encode", forbid(unsafe_code))]
23pub(crate) mod compress;
24#[cfg_attr(feature = "safe-decode", forbid(unsafe_code))]
25pub(crate) mod decompress;
26pub(crate) mod header;
27
28pub use compress::{AutoFinishEncoder, FrameEncoder};
29pub use decompress::FrameDecoder;
30pub use header::{BlockMode, BlockSize, FrameInfo};
31
32#[derive(Debug)]
33#[non_exhaustive]
34pub enum Error {
36 CompressionError(crate::block::CompressError),
38 DecompressionError(crate::block::DecompressError),
40 IoError(io::Error),
42 UnsupportedBlocksize(u8),
44 UnsupportedVersion(u8),
46 WrongMagicNumber,
48 ReservedBitsSet,
50 InvalidBlockInfo,
52 BlockTooBig,
54 HeaderChecksumError,
56 BlockChecksumError,
58 ContentChecksumError,
60 SkippableFrame(u32),
63 DictionaryNotSupported,
65 ContentLengthError {
67 expected: u64,
69 actual: u64,
71 },
72}
73
74impl From<Error> for io::Error {
75 fn from(e: Error) -> Self {
76 match e {
77 Error::IoError(e) => e,
78 Error::CompressionError(_)
79 | Error::DecompressionError(_)
80 | Error::SkippableFrame(_)
81 | Error::DictionaryNotSupported => io::Error::new(io::ErrorKind::Other, e),
82 Error::WrongMagicNumber
83 | Error::UnsupportedBlocksize(..)
84 | Error::UnsupportedVersion(..)
85 | Error::ReservedBitsSet
86 | Error::InvalidBlockInfo
87 | Error::BlockTooBig
88 | Error::HeaderChecksumError
89 | Error::ContentChecksumError
90 | Error::BlockChecksumError
91 | Error::ContentLengthError { .. } => io::Error::new(io::ErrorKind::InvalidData, e),
92 }
93 }
94}
95
96impl From<io::Error> for Error {
97 fn from(e: io::Error) -> Self {
98 match e.get_ref().map(|e| e.downcast_ref::<Error>()) {
99 Some(_) => *e.into_inner().unwrap().downcast::<Error>().unwrap(),
100 None => Error::IoError(e),
101 }
102 }
103}
104
105impl fmt::Display for Error {
106 fn fmt(&self, f: &mut fmt::Formatter) -> std::fmt::Result {
107 write!(f, "{self:?}")
108 }
109}
110
111impl std::error::Error for Error {}