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#[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}