use minify_html::{minify, Cfg}; use std::slice; #[no_mangle] pub extern "C" fn ffi_create_cfg( keep_closing_tags: bool, keep_comments: bool, keep_html_and_head_opening_tags: bool, keep_spaces_between_attributes: bool, minify_css: bool, minify_js: bool, remove_bangs: bool, remove_processing_instructions: bool, ) -> *const Cfg { Box::into_raw(Box::new(Cfg { keep_closing_tags, keep_comments, keep_html_and_head_opening_tags, keep_spaces_between_attributes, minify_css, minify_js, remove_bangs, remove_processing_instructions, })) } #[no_mangle] pub extern "C" fn ffi_drop_cfg(cfg: *const Cfg) -> () { unsafe { Box::from_raw(cfg as *mut Cfg); }; } #[no_mangle] pub extern "C" fn ffi_in_place( code: *mut u8, code_len: usize, cfg: *const Cfg, out_min_len: *mut usize, ) { let code_slice = unsafe { slice::from_raw_parts_mut(code, code_len) }; let min_code = minify(code_slice, unsafe { &*cfg }); let min_len = min_code.len(); code_slice[..min_len].copy_from_slice(&min_code); unsafe { *out_min_len = min_len; } }