diff options
| author | troido <troido@protonmail.com> | 2020-05-19 23:49:26 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-05-19 23:49:26 +0200 |
| commit | f98a024a06fef04fc40b29204f50d6e3a9089e10 (patch) | |
| tree | 1e65730eede1200f593ba2e4053210bab194d83a | |
| parent | b7e3d2a51441a2c51d0cacd6f874fc8b260579e9 (diff) | |
implemented fromtoparameter for hashmap and hashset
| -rw-r--r-- | src/componentwrapper.rs | 21 | ||||
| -rw-r--r-- | src/fromtoparameter.rs | 29 |
2 files changed, 29 insertions, 21 deletions
diff --git a/src/componentwrapper.rs b/src/componentwrapper.rs index c5d95c5..2619d9c 100644 --- a/src/componentwrapper.rs +++ b/src/componentwrapper.rs @@ -216,26 +216,7 @@ components!(all: }; Ear () {Ear::default()}; Build (obj: Template); - Whitelist ( - allowed: Vec<(String, Vec<String>)>, ({ - Whitelist.allowed.iter().map(|(item, players)| - (item.clone(), players.iter().map(|playerid| playerid.name.clone()).collect()) - ).collect() - }) - ) { - Whitelist { - allowed: allowed - .into_iter() - .map(|(item, names)| ( - item, - names - .into_iter() - .map(|name| PlayerId{name}) - .collect::<HashSet<PlayerId>>() - )) - .collect() - } - }; + Whitelist (allowed: HashMap<String, HashSet<PlayerId>>); Dedup (id: String, priority: i64); Minable (trigger: String, total: i64) { Minable { diff --git a/src/fromtoparameter.rs b/src/fromtoparameter.rs index 4abfdfd..f201a2a 100644 --- a/src/fromtoparameter.rs +++ b/src/fromtoparameter.rs @@ -1,5 +1,6 @@ - +use std::collections::{HashSet, HashMap}; +use std::hash::Hash; use crate::{ parameter::Parameter, Template, @@ -107,6 +108,32 @@ where } } +impl<T> FromToParameter for HashSet<T> +where + T: FromToParameter + Eq + Hash, +{ + fn from_parameter(p: Parameter) -> Option<Self>{ + Some(<Vec<T>>::from_parameter(p)?.into_iter().collect()) + } + fn to_parameter(self) -> Parameter { + self.into_iter().collect::<Vec<T>>().to_parameter() + } +} + +impl<T, U> FromToParameter for HashMap<T, U> +where + T: FromToParameter + Eq + Hash, + U: FromToParameter, +{ + fn from_parameter(p: Parameter) -> Option<Self>{ + Some(<Vec<(T, U)>>::from_parameter(p)?.into_iter().collect()) + } + fn to_parameter(self) -> Parameter { + self.into_iter().collect::<Vec<(T, U)>>().to_parameter() + } +} + + impl<T, U> FromToParameter for (T, U) where T: FromToParameter, |
