factorio_mlua_sys/luau/
luacode.rs

1//! Contains definitions from `luacode.h`.
2
3use 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}