diff options
Diffstat (limited to 'src/parameter.rs')
| -rw-r--r-- | src/parameter.rs | 110 |
1 files changed, 0 insertions, 110 deletions
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<Self>; - fn to_parameter(self) -> Parameter; -} - - - -impl FromToParameter for Parameter { - fn from_parameter(p: Parameter) -> Option<Self>{ - 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<Self>{ - 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<T> FromToParameter for Vec<T> -where - T: FromToParameter, -{ - fn from_parameter(p: Parameter) -> Option<Self>{ - 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<T, U> FromToParameter for (T, U) -where - T: FromToParameter, - U: FromToParameter, -{ - fn from_parameter(p: Parameter) -> Option<Self> { - 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<T, U, V> FromToParameter for (T, U, V) -where - T: FromToParameter, - U: FromToParameter, - V: FromToParameter, -{ - fn from_parameter(p: Parameter) -> Option<Self> { - 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::*; |
