rpgcpf 0.1.1

GCPF archive compression and decompression library
Documentation
//! Errors that occur when working with [`Gcpf`]

use crate::{compression_mode::CompressionMode, compressor, decompressor};

/// Errors that occur when working with [`Gcpf`]
#[derive(Debug, thiserror::Error)]
pub enum Error {
    /// Bad magic number found
    #[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]),

    /// GCPF file truncated or corrupt
    #[error("GCPF file truncated or corrupt")]
    GcpfTruncated,

    /// No [`Compressor`] implementation available
    #[error("No `Compressor` implementation available for compression mode: {0} ")]
    NoCompressor(CompressionMode),

    /// No [`Decompressor`] implementation available
    #[error("No `Decompressor` implementation available for compression mode: {0} ")]
    NoDecompressor(CompressionMode),

    /// Unknown or unsupported compression mode
    #[error("Unknown or unsupported compression mode: {0}")]
    UnknownMode(u32),

    /// I/O errors
    #[error("I/O error: {0}")]
    IOError(#[from] std::io::Error),

    /// Errors that occur during compression
    #[error("Compression error: {0}")]
    CompressionError(#[from] compressor::error::Error),

    /// Errors that occur during decompression
    #[error("Decompression error: {0}")]
    DecompressionError(#[from] decompressor::error::Error),

    /// Attempted to compress or decompress data with length >= `u32::MAX`, GCPF only supports file sizes less than 4GiB
    #[error(
        "Attempted to compress or decompress data with length >= {u32max}, GCPF only supports file sizes less than 4GiB", u32max = u32::MAX)]
    DataTooBig,

    /// Integer conversion error
    #[error("Integer conversion error: {0}")]
    IntegerConversionError(#[from] std::num::TryFromIntError),
}