crunch64/
lib.rs

1pub mod gzip;
2pub mod mio0;
3pub mod yay0;
4pub mod yaz0;
5
6mod utils;
7
8use thiserror::Error;
9
10#[cfg(feature = "python_bindings")]
11use pyo3::exceptions::PyRuntimeError;
12#[cfg(feature = "python_bindings")]
13use pyo3::prelude::*;
14
15/* This needs to be in sync with the C equivalent at `crunch64/error.h` */
16#[cfg_attr(feature = "c_bindings", repr(u32))]
17#[derive(Copy, Clone, Debug, Error, PartialEq, Eq, Hash)]
18pub enum Crunch64Error {
19    #[error("Not an error")]
20    Okay,
21    #[error("File does not begin with Yay0 header")]
22    InvalidYay0Header,
23    #[error("File does not begin with Yaz0 header")]
24    InvalidYaz0Header,
25    #[error("File does not begin with Mio0 header")]
26    InvalidMio0Header,
27    #[error("Unsupported compression type")]
28    UnsupportedCompressionType,
29    #[error("Unaligned read")]
30    UnalignedRead,
31    #[error("Failed to convert bytes")]
32    ByteConversion,
33    #[error("Tried to access data out of bounds")]
34    OutOfBounds,
35    #[error("Pointer is null")]
36    NullPointer,
37    #[error("Invalid compression level")]
38    InvalidCompressionLevel,
39}
40
41#[cfg(feature = "python_bindings")]
42impl std::convert::From<Crunch64Error> for PyErr {
43    fn from(err: Crunch64Error) -> PyErr {
44        PyRuntimeError::new_err(err.to_string())
45    }
46}
47
48#[cfg(feature = "python_bindings")]
49#[pymodule]
50fn crunch64(_py: Python<'_>, m: &PyModule) -> PyResult<()> {
51    m.add_function(wrap_pyfunction!(yay0::python_bindings::decompress_yay0, m)?)?;
52    m.add_function(wrap_pyfunction!(yay0::python_bindings::compress_yay0, m)?)?;
53    m.add_function(wrap_pyfunction!(yaz0::python_bindings::decompress_yaz0, m)?)?;
54    m.add_function(wrap_pyfunction!(yaz0::python_bindings::compress_yaz0, m)?)?;
55    m.add_function(wrap_pyfunction!(mio0::python_bindings::decompress_mio0, m)?)?;
56    m.add_function(wrap_pyfunction!(mio0::python_bindings::compress_mio0, m)?)?;
57    m.add_function(wrap_pyfunction!(gzip::python_bindings::compress_gzip, m)?)?;
58    Ok(())
59}