From eb9853dec24045adb7447e1c8ac186e52204b690 Mon Sep 17 00:00:00 2001 From: troido Date: Mon, 28 Sep 2020 14:29:53 +0200 Subject: removed parametertype --- src/fromtoparameter.rs | 49 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) (limited to 'src/fromtoparameter.rs') diff --git a/src/fromtoparameter.rs b/src/fromtoparameter.rs index 13483d7..180632f 100644 --- a/src/fromtoparameter.rs +++ b/src/fromtoparameter.rs @@ -1,6 +1,7 @@ use std::collections::{HashSet, HashMap}; use std::hash::Hash; +use std::str::FromStr; use crate::{ parameter::Parameter, Template, @@ -8,7 +9,9 @@ use crate::{ PlayerId, Sprite, ItemId, - RoomId + RoomId, + components::{Trigger}, + Timestamp }; pub trait FromToParameter: Sized { @@ -82,11 +85,26 @@ tofrom!(PlayerId(String)); tofrom!(Sprite(String)); tofrom!(ItemId(String)); tofrom!(RoomId(String)); +tofrom!(Timestamp(Int)); + + +macro_rules! fromtostr { + ($t: ty) => { + impl FromToParameter for $t { + fn from_parameter(p: Parameter) -> Option{ + <$t>::from_str(&String::from_parameter(p)?).ok() + } + fn to_parameter(self) -> Parameter { + self.to_string().to_parameter() + } + } + } +} + +fromtostr!(Trigger); impl FromToParameter for Vec -where - T: FromToParameter, -{ +where T: FromToParameter { fn from_parameter(p: Parameter) -> Option{ if let Parameter::List(items) = p{ let mut v = Self::new(); @@ -108,9 +126,7 @@ where } impl FromToParameter for HashSet -where - T: FromToParameter + Eq + Hash, -{ +where T: FromToParameter + Eq + Hash { fn from_parameter(p: Parameter) -> Option{ Some(>::from_parameter(p)?.into_iter().collect()) } @@ -186,3 +202,22 @@ impl FromToParameter for Pos { (self.x, self.y).to_parameter() } } + +impl FromToParameter for Option +where T: FromToParameter { + fn from_parameter(p: Parameter) -> Option{ + if p == Parameter::List(Vec::new()) { + Some(None) + } else { + Some(Some(T::from_parameter(p)?)) + } + } + fn to_parameter(self) -> Parameter { + if let Some(p) = self { + p.to_parameter() + } else { + Parameter::List(Vec::new()) + } + } +} + -- cgit