diff options
| author | Henry Gressmann <mail@henrygressmann.de> | 2023-12-06 14:55:53 +0100 |
|---|---|---|
| committer | Henry Gressmann <mail@henrygressmann.de> | 2023-12-06 14:55:53 +0100 |
| commit | 7d167c2fadb370a33dd65b387dbab9d053f103a9 (patch) | |
| tree | bafe2524446b5288aabc273cf6ee9494b7c42a07 /crates/cli/src/args.rs | |
| parent | 5f928b74d20717342074bb29797c97d75120c21f (diff) | |
feat: cli now has options to specify arguments and function to run
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
Diffstat (limited to 'crates/cli/src/args.rs')
| -rw-r--r-- | crates/cli/src/args.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/crates/cli/src/args.rs b/crates/cli/src/args.rs new file mode 100644 index 0000000..4023be6 --- /dev/null +++ b/crates/cli/src/args.rs @@ -0,0 +1,48 @@ +use std::str::FromStr; +use tinywasm::WasmValue; + +#[derive(Debug)] +pub struct WasmArg(WasmValue); + +pub fn to_wasm_args(args: Vec<WasmArg>) -> Vec<WasmValue> { + args.into_iter().map(|a| a.into()).collect() +} + +impl From<WasmArg> 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<Self, Self::Err> { + let [ty, val]: [&str; 2] = s + .split(':') + .collect::<Vec<_>>() + .try_into() + .map_err(|e| format!("invalid arguments: {:?}", e))?; + + let arg: WasmValue = match ty { + "i32" => val + .parse::<i32>() + .map_err(|e| format!("invalid argument value for i32: {e:?}"))? + .into(), + "i64" => val + .parse::<i64>() + .map_err(|e| format!("invalid argument value for i64: {e:?}"))? + .into(), + "f32" => val + .parse::<f32>() + .map_err(|e| format!("invalid argument value for f32: {e:?}"))? + .into(), + "f64" => val + .parse::<f64>() + .map_err(|e| format!("invalid argument value for f64: {e:?}"))? + .into(), + t => return Err(format!("Invalid arg type: {}", t)), + }; + + Ok(WasmArg(arg)) + } +} |
