use crate::ffi::{borrow, Buffer};
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_huffman_encode(data: *const u8, data_len: usize) -> Buffer {
match unsafe { borrow(data, data_len) } {
Some(data) => Buffer::new(crate::helpers::huffman::encode(data).to_vec()),
None => Buffer::EMPTY,
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_huffman_decode(data: *const u8, data_len: usize, out: *mut Buffer) -> bool {
if out.is_null() {
return false;
}
let Some(data) = (unsafe { borrow(data, data_len) }) else {
return false;
};
match crate::helpers::huffman::decode(data) {
Ok(octets) => {
unsafe { *out = Buffer::new(octets.to_vec()) };
true
}
Err(_) => false,
}
}