Skip to main content

luaur_repl_cli/functions/
reset.rs

1use crate::functions::convert_repl_requirer::{convert, luarequire_NavigateResult};
2use crate::records::repl_requirer::ReplRequirer;
3use core::ffi::{c_char, c_void, CStr};
4use luaur_cli_lib::methods::vfs_navigator_reset_to_std_in::vfs_navigator_reset_to_std_in;
5use luaur_vm::type_aliases::lua_state::lua_State;
6
7pub unsafe fn reset(
8    _l: *mut lua_State,
9    ctx: *mut c_void,
10    requirer_chunkname: *const c_char,
11) -> luarequire_NavigateResult {
12    let req = &mut *(ctx as *mut ReplRequirer);
13
14    let chunkname = CStr::from_ptr(requirer_chunkname).to_string_lossy();
15    if chunkname == "=stdin" {
16        convert(vfs_navigator_reset_to_std_in(&mut req.vfs))
17    } else if !chunkname.is_empty() && chunkname.as_bytes()[0] == b'@' {
18        convert(req.vfs.reset_to_path(&chunkname[1..]))
19    } else {
20        luarequire_NavigateResult::NAVIGATE_NOT_FOUND
21    }
22}