Skip to main content

unishox_rs/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4use std::ffi::{c_char, c_int};
5include!("./bindings.rs");
6
7pub fn compress_simple(input: &str) -> Vec<u8> {
8    let mut output = vec![0; input.len() * 2];
9    let len = unsafe {
10        unishox2_compress_simple(
11            input.as_ptr() as *const c_char,
12            input.len() as c_int,
13            output.as_mut_ptr() as *mut c_char,
14        )
15    };
16    unsafe { output.set_len(len as usize) };
17    println!("{:?}", output);
18    output
19}
20
21pub fn decompress_simple(input: &Vec<u8>) -> String {
22    let mut output = vec![0; input.len() * 2];
23    let len = unsafe {
24        unishox2_decompress_simple(
25            input.as_ptr() as *const c_char,
26            input.len() as c_int,
27            output.as_mut_ptr() as *mut c_char,
28        )
29    };
30    unsafe { output.set_len(len as usize) };
31    println!("{:?}", output);
32    String::from_utf8(output).unwrap()
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn compress_simple_test() {
41        let input = "Hello World!";
42        let output = compress_simple(input);
43        print!("{:?}", output);
44        assert_eq!(output, [135, 103, 199, 20, 131, 222, 183, 199, 67, 238]);
45    }
46
47    #[test]
48    fn decompress_simple_test() {
49        let input = vec![135, 103, 199, 20, 131, 222, 183, 199, 67, 238];
50        let output = decompress_simple(&input);
51        print!("{}", output);
52        assert_eq!(output, "Hello World!");
53    }
54}