factorio_mlua_sys/luau/
luacode.rs1use std::os::raw::{c_char, c_int, c_void};
4use std::slice;
5
6#[repr(C)]
7pub struct lua_CompileOptions {
8 pub optimizationLevel: c_int,
9 pub debugLevel: c_int,
10 pub coverageLevel: c_int,
11 pub vectorLib: *const c_char,
12 pub vectorCtor: *const c_char,
13 pub mutableGlobals: *mut *const c_char,
14}
15
16extern "C" {
17 #[link_name = "luau_compile"]
18 pub fn luau_compile_(
19 source: *const c_char,
20 size: usize,
21 options: *mut lua_CompileOptions,
22 outsize: *mut usize,
23 ) -> *mut c_char;
24
25 fn free(p: *mut c_void);
26}
27
28pub unsafe fn luau_compile(source: &[u8], mut options: lua_CompileOptions) -> Vec<u8> {
29 let mut outsize = 0;
30 let data_ptr = luau_compile_(
31 source.as_ptr() as *const c_char,
32 source.len(),
33 &mut options,
34 &mut outsize,
35 );
36 let data = slice::from_raw_parts(data_ptr as *mut u8, outsize).to_vec();
37 free(data_ptr as *mut c_void);
38 data
39}