Expand description
Rust bindings for the LZFSE reference implementation
https://github.com/lzfse/lzfse
§Example
use lzfse::{decode_buffer, encode_buffer};
let input: &[u8] = &[0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE];
// compression
// in the worst case lzfse will fallback to return the input uncompressed
// and add a magic header to indicate this. that requires 12 bytes (see lzfse_encode.c)
let max_outlen = input.len() + 12;
let mut compressed = vec![0; max_outlen];
let bytes_out = encode_buffer(&input[..], &mut compressed[..]).unwrap();
assert!(bytes_out < input.len());
// decompression
// need to allocate 1 byte more since lzfse returns input.len() if the buffer is too small
let mut uncompressed = vec![0; input.len() + 1];
let bytes_in = decode_buffer(&compressed[0..bytes_out], &mut uncompressed[..]).unwrap();
assert_eq!(bytes_in, input.len());
assert_eq!(input[..], uncompressed[..bytes_in]);§Scratch Buffer Example
The encode_buffer_scratch and decode_buffer_scratch functions allow for encoding and decoding
using a scratch buffer to avoid allocations by the underlying library. This makes it possible to
use the Rust crate with no_std and a custom allocator.
use lzfse::{encode_buffer_scratch, decode_buffer_scratch, Scratch};
let input: &[u8] = &[0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE,
0xF, 0xE, 0xE, 0xD, 0xF, 0xA, 0xC, 0xE];
let mut compressed = vec![0; input.len() + 12];
let mut scratch = Scratch::new();
let bytes_out = encode_buffer_scratch(&input, &mut compressed, &mut scratch).unwrap();
assert!(bytes_out < input.len());
let mut uncompressed = vec![0; input.len() + 1];
let bytes_in = decode_buffer_scratch(&compressed[0..bytes_out], &mut uncompressed, &mut scratch).unwrap();
assert_eq!(bytes_in, input.len());
assert_eq!(input[..], uncompressed[..bytes_in]);Structs§
Enums§
- Error
- This type represents all possible errors that can occur when decompressing data.
Functions§
- decode_
buffer - Decompress input into byte array
- decode_
buffer_ scratch - Decompress input into byte array using a scratch buffer
- encode_
buffer - Compress input into byte array
- encode_
buffer_ scratch - Compress input into byte array using a scratch buffer