Skip to main content

compression/
raw_ffi.rs

1#![allow(non_camel_case_types)]
2
3use std::ffi::c_void;
4
5/// Wraps `compression_algorithm` from `compression.h`.
6pub type compression_algorithm = u32;
7/// Wraps `compression_stream_operation` from `compression.h`.
8pub type compression_stream_operation = i32;
9/// Wraps `compression_status` from `compression.h`.
10pub type compression_status = i32;
11
12/// Wraps `COMPRESSION_LZ4` from `compression.h`.
13pub const COMPRESSION_LZ4: compression_algorithm = 0x100;
14/// Wraps `COMPRESSION_ZLIB` from `compression.h`.
15pub const COMPRESSION_ZLIB: compression_algorithm = 0x205;
16/// Wraps `COMPRESSION_LZMA` from `compression.h`.
17pub const COMPRESSION_LZMA: compression_algorithm = 0x306;
18/// Wraps `COMPRESSION_LZ4_RAW` from `compression.h`.
19pub const COMPRESSION_LZ4_RAW: compression_algorithm = 0x101;
20/// Wraps `COMPRESSION_BROTLI` from `compression.h`.
21pub const COMPRESSION_BROTLI: compression_algorithm = 0xB02;
22/// Wraps `COMPRESSION_LZFSE` from `compression.h`.
23pub const COMPRESSION_LZFSE: compression_algorithm = 0x801;
24/// Wraps `COMPRESSION_LZBITMAP` from `compression.h`.
25pub const COMPRESSION_LZBITMAP: compression_algorithm = 0x702;
26
27/// Wraps `COMPRESSION_STREAM_ENCODE` from `compression.h`.
28pub const COMPRESSION_STREAM_ENCODE: compression_stream_operation = 0;
29/// Wraps `COMPRESSION_STREAM_DECODE` from `compression.h`.
30pub const COMPRESSION_STREAM_DECODE: compression_stream_operation = 1;
31
32/// Wraps `COMPRESSION_STREAM_FINALIZE` from `compression.h`.
33pub const COMPRESSION_STREAM_FINALIZE: i32 = 0x0001;
34
35/// Wraps `COMPRESSION_STATUS_OK` from `compression.h`.
36pub const COMPRESSION_STATUS_OK: compression_status = 0;
37/// Wraps `COMPRESSION_STATUS_ERROR` from `compression.h`.
38pub const COMPRESSION_STATUS_ERROR: compression_status = -1;
39/// Wraps `COMPRESSION_STATUS_END` from `compression.h`.
40pub const COMPRESSION_STATUS_END: compression_status = 1;
41
42/// Wraps `compression_stream` values used by Compression or AppleArchive.
43#[repr(C)]
44#[derive(Clone, Copy, Debug, Default)]
45pub struct compression_stream {
46    /// Wraps the `dst_ptr` field of `compression_stream`.
47    pub dst_ptr: *mut u8,
48    /// Wraps the `dst_size` field of `compression_stream`.
49    pub dst_size: usize,
50    /// Wraps the `src_ptr` field of `compression_stream`.
51    pub src_ptr: *const u8,
52    /// Wraps the `src_size` field of `compression_stream`.
53    pub src_size: usize,
54    /// Wraps the `state` field of `compression_stream`.
55    pub state: *mut c_void,
56}
57
58unsafe extern "C" {
59    /// Wraps the `compression_encode_scratch_buffer_size` convenience for `Compression`.
60    pub fn compression_encode_scratch_buffer_size(algorithm: compression_algorithm) -> usize;
61    /// Wraps the `compression_encode_buffer` convenience for `Compression`.
62    pub fn compression_encode_buffer(
63        dst_buffer: *mut u8,
64        dst_size: usize,
65        src_buffer: *const u8,
66        src_size: usize,
67        scratch_buffer: *mut c_void,
68        algorithm: compression_algorithm,
69    ) -> usize;
70    /// Wraps the `compression_decode_scratch_buffer_size` convenience for `Compression`.
71    pub fn compression_decode_scratch_buffer_size(algorithm: compression_algorithm) -> usize;
72    /// Wraps the `compression_decode_buffer` convenience for `Compression`.
73    pub fn compression_decode_buffer(
74        dst_buffer: *mut u8,
75        dst_size: usize,
76        src_buffer: *const u8,
77        src_size: usize,
78        scratch_buffer: *mut c_void,
79        algorithm: compression_algorithm,
80    ) -> usize;
81    /// Wraps the `compression_stream_init` convenience for `Compression`.
82    pub fn compression_stream_init(
83        stream: *mut compression_stream,
84        operation: compression_stream_operation,
85        algorithm: compression_algorithm,
86    ) -> compression_status;
87    /// Wraps the `compression_stream_process` convenience for `Compression`.
88    pub fn compression_stream_process(
89        stream: *mut compression_stream,
90        flags: i32,
91    ) -> compression_status;
92    /// Wraps the `compression_stream_destroy` convenience for `Compression`.
93    pub fn compression_stream_destroy(stream: *mut compression_stream) -> compression_status;
94}