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(|a| a.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(), t => return Err(format!("Invalid arg type: {}", t)), }; Ok(WasmArg(arg)) } }