use crate::*; // TODO DEPRECATE: /// `T` + [Dsl] -> `Self`. pub trait FromDsl: Sized { fn from_dsl (state: &T, dsl: &impl Dsl) -> Perhaps; fn from_dsl_or (state: &T, dsl: &impl Dsl, err: Box) -> Usually { Self::from_dsl(state, dsl)?.ok_or(err) } fn from_dsl_or_else (state: &T, dsl: &impl Dsl, err: impl Fn()->Box) -> Usually { Self::from_dsl(state, dsl)?.ok_or_else(err) } } /// `self` + [Dsl] -> `T` pub trait DslInto { fn dsl_into (&self, dsl: &impl Dsl) -> Perhaps; fn dsl_into_or (&self, dsl: &impl Dsl, err: Box) -> Usually { self.dsl_into(dsl)?.ok_or(err) } fn dsl_into_or_else (&self, dsl: &impl Dsl, err: impl Fn()->Box) -> Usually { self.dsl_into(dsl)?.ok_or_else(err) } } /// `self` + `T` -> [Dsl] pub trait DslFrom { fn dsl_from (&self, val: &T) -> Perhaps; fn dsl_from_or (&self, val: &T, err: Box) -> Usually { self.dsl_from(val)?.ok_or(err) } fn dsl_from_or_else (&self, val: &T, err: impl Fn()->Box) -> Usually { self.dsl_from(val)?.ok_or_else(err) } } /// `self` + `T` + -> [Dsl] pub trait IntoDsl { fn into_dsl (&self, state: &T) -> Perhaps; fn into_dsl_or (&self, state: &T, err: Box) -> Usually { self.into_dsl(state)?.ok_or(err) } fn into_dsl_or_else (&self, state: &T, err: impl Fn()->Box) -> Usually { self.into_dsl(state)?.ok_or_else(err) } } //impl<'s, T: FromDsl, U> DslInto<'s, T> for U { //fn dsl_into (&self, dsl: &impl Dsl) -> Perhaps { //T::from_dsl(self, dsl) //} //} //impl, U> IntoDsl for U { //fn into_dsl (&self, state: &T) -> Perhaps { //T::dsl_from(state, self) //} //}