use crate::{compression_mode::CompressionMode, compressor, decompressor};
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("Bad magic number: expected `[0x47, 0x43, 0x50, 0x46]`, found `[{:x}, {:x}, {:x}, {:x}]`", .0[0], .0[1], .0[2], .0[3])]
BadMagic([u8; 4]),
#[error("GCPF file truncated or corrupt")]
GcpfTruncated,
#[error("No `Compressor` implementation available for compression mode: {0} ")]
NoCompressor(CompressionMode),
#[error("No `Decompressor` implementation available for compression mode: {0} ")]
NoDecompressor(CompressionMode),
#[error("Unknown or unsupported compression mode: {0}")]
UnknownMode(u32),
#[error("I/O error: {0}")]
IOError(#[from] std::io::Error),
#[error("Compression error: {0}")]
CompressionError(#[from] compressor::error::Error),
#[error("Decompression error: {0}")]
DecompressionError(#[from] decompressor::error::Error),
#[error(
"Attempted to compress or decompress data with length >= {u32max}, GCPF only supports file sizes less than 4GiB", u32max = u32::MAX)]
DataTooBig,
#[error("Integer conversion error: {0}")]
IntegerConversionError(#[from] std::num::TryFromIntError),
}