1use libc::{c_char, c_int, c_void, size_t};
7
8#[repr(C)]
10#[derive(Debug, Copy, Clone, PartialEq, Eq)]
11#[allow(non_camel_case_types)]
12pub enum rgz_status_t {
13 RGZ_STATUS_OK = 0,
14 RGZ_STATUS_EOF = 1,
15 RGZ_STATUS_INVALID_ARGUMENT = 10,
16 RGZ_STATUS_IO_ERROR = 11,
17 RGZ_STATUS_DATA_ERROR = 12,
18 RGZ_STATUS_UNSUPPORTED = 13,
19 RGZ_STATUS_OUT_OF_MEMORY = 14,
20 RGZ_STATUS_INTERNAL_ERROR = 15,
21 RGZ_STATUS_SEEK_ERROR = 16,
22 RGZ_STATUS_INDEX_ERROR = 17,
23 RGZ_STATUS_STATE_ERROR = 18,
24 RGZ_STATUS_NOT_IMPLEMENTED = 19,
25}
26
27pub const RGZ_IO_READ_MODE_MASK: u32 = 0b11;
32pub const RGZ_IO_READ_MODE_AUTO: u32 = 0;
33pub const RGZ_IO_READ_MODE_SEQUENTIAL: u32 = 1;
34pub const RGZ_IO_READ_MODE_PREAD: u32 = 2;
35pub const RGZ_IO_READ_MODE_LOCKED_READ_AND_SEEK: u32 = 3;
36
37#[repr(C)]
39pub struct rgz_config_t {
40 pub struct_size: u32,
41 pub flags: u32,
42 pub parallelism: u32,
43 pub reserved0: u32,
44 pub chunk_size: u64,
45 pub reserved1: u64,
46}
47
48#[repr(C)]
50#[derive(Copy, Clone)]
51pub struct rgz_callbacks_t {
52 pub read: Option<
53 unsafe extern "C" fn(user_data: *mut c_void, dst: *mut c_char, len: size_t) -> size_t,
54 >,
55 pub seek:
56 Option<unsafe extern "C" fn(user_data: *mut c_void, offset: i64, origin: c_int) -> u64>,
57 pub get_size: Option<unsafe extern "C" fn(user_data: *mut c_void) -> u64>,
58 pub clone: Option<unsafe extern "C" fn(user_data: *mut c_void) -> *mut c_void>,
59 pub free_user_data: Option<unsafe extern "C" fn(user_data: *mut c_void)>,
60}
61
62#[repr(C)]
64pub struct rgz_reader_t {
65 _unused: [u8; 0],
66}
67
68extern "C" {
69 pub fn rgz_abi_version() -> u32;
70 pub fn rgz_config_init(config: *mut rgz_config_t);
71
72 pub fn rgz_open_path_ex(
73 path: *const c_char,
74 config: *const rgz_config_t,
75 status_out: *mut rgz_status_t,
76 ) -> *mut rgz_reader_t;
77
78 pub fn rgz_open_callbacks(
79 callbacks: rgz_callbacks_t,
80 user_data: *mut c_void,
81 config: *const rgz_config_t,
82 status_out: *mut rgz_status_t,
83 ) -> *mut rgz_reader_t;
84
85 pub fn rgz_close(reader: *mut rgz_reader_t);
86
87 pub fn rgz_read(
88 reader: *mut rgz_reader_t,
89 dst: *mut c_void,
90 len: size_t,
91 read_out: *mut size_t,
92 ) -> rgz_status_t;
93
94 pub fn rgz_read_discard(
95 reader: *mut rgz_reader_t,
96 len: size_t,
97 read_out: *mut size_t,
98 ) -> rgz_status_t;
99
100 pub fn rgz_read_to_fd(
101 reader: *mut rgz_reader_t,
102 output_fd: c_int,
103 len: size_t,
104 read_out: *mut size_t,
105 ) -> rgz_status_t;
106
107 pub fn rgz_set_keep_index(reader: *mut rgz_reader_t, keep_index: bool) -> rgz_status_t;
108
109 pub fn rgz_seek_to(reader: *mut rgz_reader_t, uncompressed_offset: u64) -> rgz_status_t;
110
111 pub fn rgz_tell(reader: *mut rgz_reader_t, offset_out: *mut u64) -> rgz_status_t;
112
113 pub fn rgz_import_index_path(reader: *mut rgz_reader_t, path: *const c_char) -> rgz_status_t;
114
115 pub fn rgz_export_index_path(reader: *mut rgz_reader_t, path: *const c_char) -> rgz_status_t;
116
117 pub fn rgz_import_index_callbacks(
118 reader: *mut rgz_reader_t,
119 callbacks: rgz_callbacks_t,
120 user_data: *mut c_void,
121 ) -> rgz_status_t;
122
123 pub fn rgz_export_index_write(
124 reader: *mut rgz_reader_t,
125 write_cb: unsafe extern "C" fn(
126 user_data: *mut c_void,
127 buffer: *const c_void,
128 size: size_t,
129 ) -> size_t,
130 user_data: *mut c_void,
131 ) -> rgz_status_t;
132
133 pub fn rgz_last_error(reader: *mut rgz_reader_t) -> *const c_char;
134 pub fn rgz_last_global_error() -> *const c_char;
135 pub fn rgz_last_status(reader: *mut rgz_reader_t) -> rgz_status_t;
136}