variadic
change kxtqwnqkwnnqotxyumvsqzmnxtmslotz
commit a4e2c7e292a673e9f167884f51b1ff8d2203a311
author Alpha Chen <alpha@kejadlen.dev>
date
parent xttyszmx
diff --git a/src/utils.rs b/src/utils.rs
index 1598633..b8cdcc8 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -102,21 +102,16 @@ impl IntoLua for Utils {
         )?;
         utils_table.set(
             "sh",
-            lua.create_function(|lua, args: LuaMultiValue| {
-                let all_args: Vec<String> = args
-                    .into_iter()
-                    .map(|arg| String::from_lua(arg, lua))
-                    .collect::<Result<Vec<_>, _>>()?;
-
-                if all_args.is_empty() {
-                    return Err(LuaError::external(FrorkError::InvalidArguments(
+            lua.create_function(|_lua, args: LuaVariadic<String>| {
+                let mut args_iter = args.into_iter();
+                let cmd = args_iter.next().ok_or_else(|| {
+                    LuaError::external(FrorkError::InvalidArguments(
                         "sh requires at least a command".to_string(),
-                    )));
-                }
-
-                let (cmd, cmd_args) = all_args.split_first().unwrap();
+                    ))
+                })?;
+                let cmd_args: Vec<String> = args_iter.collect();
 
-                let result = Utils::sh(cmd, cmd_args)
+                let result = Utils::sh(&cmd, &cmd_args)
                     .map(|(stdout, status)| (Some(stdout), status))
                     .unwrap_or((None, -1));
                 Ok(result)