You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
use crate::{GlobalConfig, InstanceConfig};
|
|
use mlua::{Function, LuaSerdeExt, MultiValue, ToLua, UserData, UserDataMethods, Value};
|
|
use serde::Deserialize;
|
|
|
|
#[derive(Debug, Default, Deserialize, Clone)]
|
|
struct LuaFreeList(Vec<String>);
|
|
|
|
impl UserData for LuaFreeList {
|
|
fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) {
|
|
methods.add_method_mut("add", |_, this, args: MultiValue| {
|
|
for item in args.iter() {
|
|
if let Value::String(item) = item {
|
|
this.0.push(item.to_str()?.to_string())
|
|
}
|
|
}
|
|
|
|
Ok(Value::Nil)
|
|
})
|
|
}
|
|
}
|
|
|
|
pub fn build_qemu_command(config: &InstanceConfig, global_config: &GlobalConfig) -> Vec<String> {
|
|
let lua = mlua::Lua::new();
|
|
// TODO: load correct script
|
|
lua.load(include_str!("../../config/qemu.lua"))
|
|
.eval::<()>()
|
|
.unwrap();
|
|
let val: Function = lua.globals().get("build_command").unwrap();
|
|
let item = LuaFreeList::default();
|
|
let multi = MultiValue::from_vec(vec![
|
|
lua.to_value(config).unwrap(),
|
|
item.to_lua(&lua).unwrap(),
|
|
]);
|
|
let mut x = val.call::<MultiValue, LuaFreeList>(multi).unwrap();
|
|
println!("{:?}", x);
|
|
|
|
let mut cmd: Vec<String> = vec![];
|
|
cmd.push("-name".to_string());
|
|
cmd.push(format!("guest={},debug-threads=on", config.name));
|
|
|
|
cmd.push("-S".to_string());
|
|
cmd.push("-msg".to_string());
|
|
cmd.push("timestamps=on".to_string());
|
|
cmd.append(&mut x.0);
|
|
|
|
cmd
|
|
}
|