diff options
Diffstat (limited to 'src/componentwrapper.rs')
| -rw-r--r-- | src/componentwrapper.rs | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/componentwrapper.rs b/src/componentwrapper.rs index 2619d9c..638d156 100644 --- a/src/componentwrapper.rs +++ b/src/componentwrapper.rs @@ -21,6 +21,7 @@ use crate::{ fromtoparameter::FromToParameter, Timestamp, Template, + exchange::Exchange, Pos, Result, aerr @@ -50,12 +51,13 @@ macro_rules! components { ComponentType::$comp => Ok(Self::$comp({ use crate::components::$comp; $( - let $paramname = <$paramtype>::from_parameter( - parameters + let $paramname = { + let param = parameters .remove(stringify!($paramname)) - .ok_or(aerr!("required parameter '{}'not found", stringify!($paramname)))? - ) - .ok_or(aerr!("parameter {} is invalid type", stringify!($paramname)))?; + .ok_or(aerr!("required parameter '{}'not found", stringify!($paramname)))?; + <$paramtype>::from_parameter(param.clone()) + .ok_or(aerr!("parameter {} is invalid type: {:?} is not of type {}", stringify!($paramname), param, stringify!($paramtype)))? + }; )* $creation @@ -233,6 +235,18 @@ components!(all: } }; Substitute (into: Template); + Talkable (text: String); + Exchanger (prefix: String, exchanges: Vec<(String, Vec<ItemId>, Vec<ItemId>)>) { + Exchanger { + prefix, + exchanges: exchanges + .into_iter() + .map(|(key, cost, offer)| + (key, Exchange{cost, offer}) + ) + .collect() + } + }; ); |
