Skip to main content

oxigdal_compress/
error.rs

1//! Error types for compression operations
2
3use thiserror::Error;
4
5/// Result type for compression operations
6pub type Result<T> = std::result::Result<T, CompressionError>;
7
8/// Errors that can occur during compression operations
9#[derive(Error, Debug)]
10pub enum CompressionError {
11    /// Codec not found or not supported
12    #[error("Codec not supported: {0}")]
13    CodecNotSupported(String),
14
15    /// Compression failed
16    #[error("Compression failed: {0}")]
17    CompressionFailed(String),
18
19    /// Decompression failed
20    #[error("Decompression failed: {0}")]
21    DecompressionFailed(String),
22
23    /// Invalid compression level
24    #[error("Invalid compression level: {level}, expected range {min}..={max}")]
25    InvalidCompressionLevel {
26        /// Provided compression level
27        level: i32,
28        /// Minimum acceptable level
29        min: i32,
30        /// Maximum acceptable level
31        max: i32,
32    },
33
34    /// Invalid buffer size
35    #[error("Invalid buffer size: {0}")]
36    InvalidBufferSize(String),
37
38    /// Checksum mismatch
39    #[error("Checksum mismatch: expected {expected:x}, got {actual:x}")]
40    ChecksumMismatch {
41        /// Expected checksum
42        expected: u64,
43        /// Actual checksum
44        actual: u64,
45    },
46
47    /// Integrity check failed
48    #[error("Integrity check failed: {0}")]
49    IntegrityCheckFailed(String),
50
51    /// Invalid metadata
52    #[error("Invalid metadata: {0}")]
53    InvalidMetadata(String),
54
55    /// I/O error
56    #[error("I/O error: {0}")]
57    Io(#[from] std::io::Error),
58
59    /// Invalid parameter
60    #[error("Invalid parameter: {0}")]
61    InvalidParameter(String),
62
63    /// LZ4 codec error
64    #[error("LZ4 error: {0}")]
65    Lz4Error(String),
66
67    /// Zstd codec error
68    #[error("Zstd error: {0}")]
69    ZstdError(String),
70
71    /// Brotli codec error
72    #[error("Brotli error: {0}")]
73    BrotliError(String),
74
75    /// Snappy codec error
76    #[error("Snappy codec error: {0}")]
77    SnappyError(String),
78
79    /// Deflate codec error
80    #[error("Deflate error: {0}")]
81    DeflateError(String),
82
83    /// Delta codec error
84    #[error("Delta codec error: {0}")]
85    DeltaError(String),
86
87    /// RLE codec error
88    #[error("RLE error: {0}")]
89    RleError(String),
90
91    /// Dictionary codec error
92    #[error("Dictionary error: {0}")]
93    DictionaryError(String),
94
95    /// Floating-point compression error
96    #[error("Floating-point compression error: {0}")]
97    FloatingPointError(String),
98
99    /// Auto-selection error
100    #[error("Auto-selection error: {0}")]
101    AutoSelectionError(String),
102
103    /// Parallel processing error
104    #[error("Parallel processing error: {0}")]
105    ParallelError(String),
106
107    /// Streaming error
108    #[error("Streaming error: {0}")]
109    StreamingError(String),
110
111    /// Unsupported data type
112    #[error("Unsupported data type: {0}")]
113    UnsupportedDataType(String),
114
115    /// Buffer too small
116    #[error("Buffer too small: required {required}, available {available}")]
117    BufferTooSmall {
118        /// Required buffer size
119        required: usize,
120        /// Available buffer size
121        available: usize,
122    },
123
124    /// Configuration error
125    #[error("Configuration error: {0}")]
126    ConfigurationError(String),
127}
128
129// Note: lz4 0.1 removed CompressError and DecompressError types
130// Errors are now returned as strings
131// Users should handle lz4 errors inline where they occur
132
133impl From<oxiarc_snappy::SnappyError> for CompressionError {
134    fn from(err: oxiarc_snappy::SnappyError) -> Self {
135        CompressionError::SnappyError(err.to_string())
136    }
137}