use std::env::temp_dir;
use rust_macios::{
compression::{compression_algorithm, compression_decode_buffer, compression_encode_buffer},
kernel::size_t,
};
fn main() {
let source_string = r#"
Lorem ipsum dolor sit amet consectetur adipiscing elit mi
nibh ornare proin blandit diam ridiculus, faucibus mus
dui eu vehicula nam donec dictumst sed vivamus bibendum
aliquet efficitur. Felis imperdiet sodales dictum morbi
vivamus augue dis duis aliquet velit ullamcorper porttitor,
lobortis dapibus hac purus aliquam natoque iaculis blandit
montes nunc pretium.
"#;
let source_buffer = source_string.as_bytes();
let mut dest_buffer = vec![0; source_string.len()];
let algorithm = compression_algorithm::LZFSE;
let compressed_size = unsafe {
compression_encode_buffer(
dest_buffer.as_mut_ptr(),
source_string.len() as size_t,
source_buffer.as_ptr(),
source_string.len() as size_t,
std::ptr::null_mut(),
algorithm,
)
};
if compressed_size == 0 {
panic!("Encoding failed.")
}
let mut dir = temp_dir();
let encoded_file_name = format!("{}.LZFSE", "stringEncoded");
dir.push(&encoded_file_name);
std::fs::write(&dir, dest_buffer).unwrap();
let encoded_buf = std::fs::read(dir).unwrap();
const DECODED_CAPACITY: usize = 8_000_000;
let mut decoded_destination_buffer = [0; DECODED_CAPACITY];
let decoded_char_count = unsafe {
compression_decode_buffer(
decoded_destination_buffer.as_mut_ptr(),
DECODED_CAPACITY as size_t,
encoded_buf.as_ptr(),
encoded_buf.len() as size_t,
std::ptr::null_mut(),
algorithm,
)
};
println!("{decoded_char_count} characters were decoded");
println!(
"Decoded message: {}",
String::from_utf8_lossy(&decoded_destination_buffer)
);
}