luaur_bytecode_cli/functions/
serialize_script_summary.rs1use alloc::vec::Vec;
2use core::ffi::c_void;
3use std::ffi::CString;
4
5use luaur_code_gen::records::function_bytecode_summary::FunctionBytecodeSummary;
6
7use crate::functions::escape_filename::escape_filename;
8use crate::functions::serialize_function_summary::serialize_function_summary;
9
10pub fn serialize_script_summary(
11 file: &str,
12 script_summary: &Vec<FunctionBytecodeSummary>,
13 fp: *mut c_void,
14) {
15 let escaped = CString::new(escape_filename(file).replace('\0', "")).unwrap();
17 let function_count = script_summary.len();
18
19 unsafe {
20 fprintf(
21 fp,
22 b" \"%s\": [\n\0".as_ptr() as *const core::ffi::c_char,
23 escaped.as_ptr(),
24 );
25 }
26
27 for (i, summary) in script_summary.iter().enumerate() {
28 serialize_function_summary(summary, fp);
29 unsafe {
30 if i == function_count - 1 {
31 fprintf(fp, b"\n\0".as_ptr() as *const core::ffi::c_char);
32 } else {
33 fprintf(fp, b",\n\0".as_ptr() as *const core::ffi::c_char);
34 }
35 }
36 }
37
38 unsafe {
39 fprintf(fp, b" ]\0".as_ptr() as *const core::ffi::c_char);
40 }
41}
42
43extern "C" {
44 fn fprintf(stream: *mut c_void, format: *const core::ffi::c_char, ...) -> core::ffi::c_int;
45}