refactor(LuaCommandManager): Express the semantics of Lua code explicitly

This commit is contained in:
Benedikt Peetz 2023-09-09 19:55:16 +02:00
parent ed37d1239f
commit bc1fc0cc02
Signed by: bpeetz
GPG Key ID: A5E94010C3A642AD
1 changed files with 16 additions and 16 deletions

View File

@ -42,21 +42,19 @@ impl LuaCommandManager {
let local = LocalSet::new(); let local = LocalSet::new();
local.spawn_local(async move { local.spawn_local(async move {
info!( info!(
"Lua command handling initialized, \ "Lua command handling initialized, \
waiting for commands.." waiting for commands.."
); );
while let Some(command) = lua_command_rx.recv().await { while let Some(command) = lua_command_rx.recv().await {
debug!("Recieved lua code: {}", &command); debug!("Recieved lua code (in LuaCommandHandler): {}", &command);
let local_event_call_tx = event_call_tx.clone(); let local_event_call_tx = event_call_tx.clone();
task::spawn_local(async move { task::spawn_local(async move {
exec_lua_command(&command, local_event_call_tx) exec_lua(&command, local_event_call_tx).await.expect(
.await "This should return all relevent errors \
.expect(
"This should return all relevent errors \
by other messages, \ by other messages, \
this should never error", this should never error",
); );
}); });
} }
}); });
@ -67,7 +65,7 @@ impl LuaCommandManager {
} }
} }
async fn exec_lua_command(command: &str, event_call_tx: mpsc::Sender<Event>) -> Result<()> { async fn exec_lua(lua_code: &str, event_call_tx: mpsc::Sender<Event>) -> Result<()> {
let second_event_call_tx = event_call_tx.clone(); let second_event_call_tx = event_call_tx.clone();
let lua = LUA let lua = LUA
.get_or_init(|| { .get_or_init(|| {
@ -79,21 +77,23 @@ async fn exec_lua_command(command: &str, event_call_tx: mpsc::Sender<Event>) ->
.lock() .lock()
.await; .await;
info!("Recieved code to execute: `{}`, executing...", &command); info!("Recieved code to execute: `{}`, executing...", &lua_code);
let output = lua.load(command).eval_async::<Value>().await; let output = lua.load(lua_code).eval_async::<Value>().await;
match output { match output {
Ok(out) => { Ok(out) => {
let to_string_fn: Function = lua.globals().get("tostring").expect("This always exists"); let to_string_fn: Function = lua.globals().get("tostring").expect("This always exists");
let output: String = to_string_fn.call(out).expect("tostring should not error"); let output: String = to_string_fn.call(out).expect("tostring should not error");
info!("Function `{}` returned: `{}`", command, &output); info!("Lua code `{}` evaluated to: `{}`", lua_code, &output);
event_call_tx if output != "nil" {
.send(Event::CommandEvent(Command::DisplayOutput(output), None)) event_call_tx
.await .send(Event::CommandEvent(Command::DisplayOutput(output), None))
.context("Failed to send lua output command")? .await
.context("Failed to send lua output command")?
}
} }
Err(err) => { Err(err) => {
error!("Function `{}` returned error: `{}`", command, err); error!("Lua code `{}` returned error: `{}`", lua_code, err);
event_call_tx event_call_tx
.send(Event::CommandEvent( .send(Event::CommandEvent(
Command::RaiseError(err.to_string()), Command::RaiseError(err.to_string()),