Skip to main content

lzf_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5//! Crate for linking to the native c library [liblzf](http://software.schmorp.de/pkg/liblzf.html).
6
7#[cfg(feature = "paranoid")]
8include!(concat!(env!("OUT_DIR"), "/lzf_bindings.rs"));
9
10#[cfg(not(feature = "paranoid"))]
11mod pregenerated;
12#[cfg(not(feature = "paranoid"))]
13pub use pregenerated::*;
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18
19    #[test]
20    fn roundtrip() {
21        let message = "This very interesting long string which contains much valuable information";
22
23        let mut compressed_buffer = vec![0_u8; message.len() + 1];
24
25        let bytes_used = unsafe {
26            lzf_compress(
27                message.as_ptr() as *const _,
28                message.len() as _,
29                compressed_buffer.as_mut_ptr() as *mut _,
30                compressed_buffer.len() as _,
31            )
32        };
33        assert_ne!(bytes_used, 0);
34
35        let mut output = vec![0_u8; message.len()];
36        let bytes_used = unsafe {
37            lzf_decompress(
38                compressed_buffer.as_ptr() as *mut _,
39                bytes_used,
40                output.as_mut_ptr() as *mut _,
41                output.len() as _,
42            )
43        };
44        assert_eq!(bytes_used, message.len() as _);
45
46        assert_eq!(message.as_bytes(), &output[..]);
47    }
48}