archivelib_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
6
7impl AllocatedMemory {
8  pub fn to_err(mut self: Self) -> Result<Vec<u8>, Option<String>> {
9    let raw = if self.data.is_null() {
10      None
11    } else {
12      let mut data = vec![];
13      let slice = unsafe { std::slice::from_raw_parts(self.data, self.length) };
14      data.extend(slice);
15      Some(data)
16    };
17    unsafe { clean(&mut self) };
18
19    match (self.status >= 0, raw) {
20      (true, Some(d)) => Ok(d),
21      (_, Some(other)) => Err(Some(other.into_iter().map(|b| b as char).collect())),
22      (_, None) => Err(None),
23    }
24  }
25}
26
27pub const AL_GREENLEAF_LEVEL_0: u8 = 0;
28pub const AL_GREENLEAF_LEVEL_1: u8 = 1;
29pub const AL_GREENLEAF_LEVEL_2: u8 = 2;
30pub const AL_GREENLEAF_LEVEL_3: u8 = 3;
31pub const AL_GREENLEAF_LEVEL_4: u8 = 4;
32
33pub fn do_compress(input: &[u8]) -> Result<Box<[u8]>, std::string::String> {
34  do_compress_level(input, AL_GREENLEAF_LEVEL_0)
35}
36
37pub fn do_compress_level(
38  input: &[u8],
39  compression_level: u8,
40) -> Result<Box<[u8]>, std::string::String> {
41  let mut data = {
42    let mut v = vec![];
43    v.extend(input.iter());
44    v.into_boxed_slice()
45  };
46  let length = data.len();
47  let ptr = data.as_mut_ptr();
48  unsafe { compress(ptr, length, compression_level) }
49    .to_err()
50    .map(|v| v.into_boxed_slice())
51    .map_err(|o| o.unwrap_or("".to_string()))
52}
53pub fn do_decompress(input: &[u8]) -> Result<Box<[u8]>, std::string::String> {
54  do_decompress_level(input, AL_GREENLEAF_LEVEL_0)
55}
56pub fn do_decompress_level(
57  input: &[u8],
58  compression_level: u8,
59) -> Result<Box<[u8]>, std::string::String> {
60  let mut data = {
61    let mut v = vec![];
62    v.extend(input.iter());
63    v.into_boxed_slice()
64  };
65  let length = data.len();
66  let ptr = data.as_mut_ptr();
67  unsafe { decompress(ptr, length, compression_level) }
68    .to_err()
69    .map(|v| v.into_boxed_slice())
70    .map_err(|o| o.unwrap_or("".to_string()))
71}