Skip to main content

compression/
raw_ffi.rs

1#![allow(non_camel_case_types)]
2
3use std::ffi::c_void;
4
5pub type compression_algorithm = u32;
6pub type compression_stream_operation = i32;
7pub type compression_status = i32;
8
9pub const COMPRESSION_LZ4: compression_algorithm = 0x100;
10pub const COMPRESSION_ZLIB: compression_algorithm = 0x205;
11pub const COMPRESSION_LZMA: compression_algorithm = 0x306;
12pub const COMPRESSION_LZ4_RAW: compression_algorithm = 0x101;
13pub const COMPRESSION_BROTLI: compression_algorithm = 0xB02;
14pub const COMPRESSION_LZFSE: compression_algorithm = 0x801;
15pub const COMPRESSION_LZBITMAP: compression_algorithm = 0x702;
16
17pub const COMPRESSION_STREAM_ENCODE: compression_stream_operation = 0;
18pub const COMPRESSION_STREAM_DECODE: compression_stream_operation = 1;
19
20pub const COMPRESSION_STREAM_FINALIZE: i32 = 0x0001;
21
22pub const COMPRESSION_STATUS_OK: compression_status = 0;
23pub const COMPRESSION_STATUS_ERROR: compression_status = -1;
24pub const COMPRESSION_STATUS_END: compression_status = 1;
25
26#[repr(C)]
27#[derive(Clone, Copy, Debug, Default)]
28pub struct compression_stream {
29    pub dst_ptr: *mut u8,
30    pub dst_size: usize,
31    pub src_ptr: *const u8,
32    pub src_size: usize,
33    pub state: *mut c_void,
34}
35
36unsafe extern "C" {
37    pub fn compression_encode_scratch_buffer_size(algorithm: compression_algorithm) -> usize;
38    pub fn compression_encode_buffer(
39        dst_buffer: *mut u8,
40        dst_size: usize,
41        src_buffer: *const u8,
42        src_size: usize,
43        scratch_buffer: *mut c_void,
44        algorithm: compression_algorithm,
45    ) -> usize;
46    pub fn compression_decode_scratch_buffer_size(algorithm: compression_algorithm) -> usize;
47    pub fn compression_decode_buffer(
48        dst_buffer: *mut u8,
49        dst_size: usize,
50        src_buffer: *const u8,
51        src_size: usize,
52        scratch_buffer: *mut c_void,
53        algorithm: compression_algorithm,
54    ) -> usize;
55    pub fn compression_stream_init(
56        stream: *mut compression_stream,
57        operation: compression_stream_operation,
58        algorithm: compression_algorithm,
59    ) -> compression_status;
60    pub fn compression_stream_process(
61        stream: *mut compression_stream,
62        flags: i32,
63    ) -> compression_status;
64    pub fn compression_stream_destroy(stream: *mut compression_stream) -> compression_status;
65}