From b7e3d2a51441a2c51d0cacd6f874fc8b260579e9 Mon Sep 17 00:00:00 2001 From: troido Date: Tue, 19 May 2020 23:08:47 +0200 Subject: moved parameter conversions to their own file and added more conversions --- src/parameter.rs | 110 ------------------------------------------------------- 1 file changed, 110 deletions(-) (limited to 'src/parameter.rs') diff --git a/src/parameter.rs b/src/parameter.rs index 8df7625..cee6342 100644 --- a/src/parameter.rs +++ b/src/parameter.rs @@ -114,116 +114,6 @@ impl Parameter { } } -pub trait FromToParameter: Sized { - fn from_parameter(p: Parameter) -> Option; - fn to_parameter(self) -> Parameter; -} - - - -impl FromToParameter for Parameter { - fn from_parameter(p: Parameter) -> Option{ - Some(p) - } - fn to_parameter(self) -> Parameter { - self - } -} - -macro_rules! tofrom { - ($paramtyp: ident $typ: ty) => { - impl FromToParameter for $typ { - fn from_parameter(p: Parameter) -> Option{ - if let Parameter::$paramtyp(i) = p { - Some(i) - } else { - None - } - } - fn to_parameter(self) -> Parameter { - Parameter::$paramtyp(self) - } - } - } -} - -tofrom!(Int i64); -tofrom!(Float f64); -tofrom!(Bool bool); -tofrom!(String String); -tofrom!(Pos Pos); -tofrom!(Template Template); -tofrom!(Interaction Interactable); - - -impl FromToParameter for Vec -where - T: FromToParameter, -{ - fn from_parameter(p: Parameter) -> Option{ - if let Parameter::List(items) = p{ - let mut v = Self::new(); - for item in items { - if let Some(t) = T::from_parameter(item){ - v.push(t); - } else { - return None; - } - } - Some(v) - } else { - None - } - } - fn to_parameter(self) -> Parameter { - Parameter::List(self.into_iter().map(|item| item.to_parameter()).collect()) - } -} - -impl FromToParameter for (T, U) -where - T: FromToParameter, - U: FromToParameter, -{ - fn from_parameter(p: Parameter) -> Option { - if let Parameter::List(mut items) = p { - if items.len() == 2 { - return Some(( - T::from_parameter(items.remove(0))?, - U::from_parameter(items.remove(0))? - )) - } - } - None - } - fn to_parameter(self) -> Parameter { - Parameter::List(vec![self.0.to_parameter(), self.1.to_parameter()]) - } -} - -impl FromToParameter for (T, U, V) -where - T: FromToParameter, - U: FromToParameter, - V: FromToParameter, -{ - fn from_parameter(p: Parameter) -> Option { - if let Parameter::List(mut items) = p { - if items.len() == 3 { - return Some(( - T::from_parameter(items.remove(0))?, - U::from_parameter(items.remove(0))?, - V::from_parameter(items.remove(0))? - )) - } - } - None - } - fn to_parameter(self) -> Parameter { - Parameter::List(vec![self.0.to_parameter(), self.1.to_parameter(), self.2.to_parameter()]) - } -} - #[cfg(test)] mod tests { use super::*; -- cgit