Documentation
extern "C" {
    fn decompress_lzo(compressed: *const u8, compressed_len: u32, decompressed: *mut u8, decompressed_len: *mut u32) -> i32;
}


pub fn decompress_lzo_wrapper(compressed_data: &[u8]) -> Result<Vec<u8>, &'static str> {
    let mut decompressed_data = vec![0u8; compressed_data.len() * 10]; // Adjust size as needed
    let mut decompressed_len = decompressed_data.len() as u32;
    let result = unsafe {
        decompress_lzo(
            compressed_data.as_ptr(),
            compressed_data.len() as u32,
            decompressed_data.as_mut_ptr(),
            &mut decompressed_len,
        )
    };
    if result != 0 {
        Err("Decompression failed")
    } else {
        decompressed_data.truncate(decompressed_len as usize);
        Ok(decompressed_data)
    }
}