luaur_repl_cli/functions/
get_cache_key.rs1use core::ffi::{c_char, c_void};
2use luaur_code_gen::type_aliases::lua_state::lua_State;
3
4use crate::functions::write::{luarequire_WriteResult, write};
5use crate::records::repl_requirer::ReplRequirer;
6
7pub unsafe fn get_cache_key(
8 _L: *mut lua_State,
9 ctx: *mut c_void,
10 buffer: *mut c_char,
11 buffer_size: usize,
12 size_out: *mut usize,
13) -> luarequire_WriteResult {
14 if ctx.is_null() {
15 return luarequire_WriteResult::WRITE_FAILURE;
16 }
17
18 let req = &*(ctx as *const ReplRequirer);
19 let path = req.vfs.get_absolute_file_path();
20 let path_cstr = path.as_bytes();
21 let null_terminated_size = path_cstr.len() + 1;
22
23 if buffer_size < null_terminated_size {
24 if !size_out.is_null() {
25 *size_out = null_terminated_size;
26 }
27 return luarequire_WriteResult::WRITE_BUFFER_TOO_SMALL;
28 }
29
30 if !buffer.is_null() {
31 let src = path_cstr;
32 let dst = core::slice::from_raw_parts_mut(buffer as *mut u8, null_terminated_size);
33 dst[..src.len()].copy_from_slice(src);
34 dst[src.len()] = 0;
35 }
36
37 if !size_out.is_null() {
38 *size_out = null_terminated_size;
39 }
40
41 luarequire_WriteResult::WRITE_SUCCESS
42}