summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/componentwrapper.rs21
-rw-r--r--src/fromtoparameter.rs29
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,