diff options
Diffstat (limited to 'src/assemblage.rs')
| -rw-r--r-- | src/assemblage.rs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/assemblage.rs b/src/assemblage.rs index 8e3a349..df60b45 100644 --- a/src/assemblage.rs +++ b/src/assemblage.rs @@ -31,11 +31,16 @@ impl Assemblage { let tup = arg.as_array().ok_or(aerr!("argument is not an array"))?; let key = tup.get(0).ok_or(aerr!("argument has no name"))?.as_str().ok_or(aerr!("argument name is not a string"))?.to_string(); let typ = ParameterType::from_str(tup.get(1).ok_or(aerr!("argument has no type"))?.as_str().ok_or(aerr!("argument type not a string"))?).ok_or(aerr!("failed to parse argument type"))?; - let def = tup.get(2).ok_or("argument has no default")?; - if def.is_null() { + if let Some(def) = tup.get(2){ + arguments.push( + ( + key.clone(), + typ, + Some(Parameter::from_typed_json(typ, def).ok_or(aerr!("invalid argument default"))?) + ) + ); + } else { arguments.push((key.clone(), typ, None)); - } else { - arguments.push((key.clone(), typ, Some(Parameter::from_typed_json(typ, def).ok_or(aerr!("invalid argument default"))?))); } } Ok(arguments) @@ -159,7 +164,7 @@ impl Assemblage { None } }; - let param = value.ok_or(aerr!("argument has no value"))?; + let param = value.ok_or(aerr!(&format!("argument <{:?}> has no value", (idx, (name, typ, def)))))?; if param.paramtype() != *typ { return Err(aerr!("argument has incorrect type")); } |
