use std::str::FromStr; use tinywasm::types::WasmValue; #[derive(Debug)] pub struct WasmArg(WasmValue); pub fn to_wasm_args(args: Vec) -> Vec { args.into_iter().map(Into::into).collect() } impl From for WasmValue { fn from(value: WasmArg) -> Self { value.0 } } impl FromStr for WasmArg { type Err = String; fn from_str(s: &str) -> std::prelude::v1::Result { let [ty, val]: [&str; 2] = s.split(':').collect::>().try_into().map_err(|e| format!("invalid arguments: {e:?}"))?; let arg: WasmValue = match ty { "i32" => val.parse::().map_err(|e| format!("invalid argument value for i32: {e:?}"))?.into(), "i64" => val.parse::().map_err(|e| format!("invalid argument value for i64: {e:?}"))?.into(), "f32" => val.parse::().map_err(|e| format!("invalid argument value for f32: {e:?}"))?.into(), "f64" => val.parse::().map_err(|e| format!("invalid argument value for f64: {e:?}"))?.into(), "v128" => val.parse::().map_err(|e| format!("invalid argument value for v128: {e:?}"))?.into(), t => return Err(format!("Invalid arg type: {t}")), }; Ok(WasmArg(arg)) } }