summaryrefslogtreecommitdiff
path: root/src/assemblage.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/assemblage.rs')
-rw-r--r--src/assemblage.rs15
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"));
}