1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
use std::ffi::{CStr, CString}; use std::os::raw::c_char; mod test; extern "C" { fn MinifyJs(code: GoString) -> *const c_char; } #[repr(C)] struct GoString { a: *const c_char, b: i64, } pub fn esbuild(code: &str) -> &str { let c_code = CString::new(code).expect("CString::new failed"); let ptr = c_code.as_ptr(); let go_string = GoString { a: ptr, b: c_code.as_bytes().len() as i64, }; let result = unsafe { MinifyJs(go_string) }; let c_str = unsafe { CStr::from_ptr(result) }; c_str.to_str().expect("decode C string") }