diff options
Diffstat (limited to 'dhall/src/traits')
| -rw-r--r-- | dhall/src/traits/deserialize.rs | 20 | ||||
| -rw-r--r-- | dhall/src/traits/dynamic_type.rs | 16 | ||||
| -rw-r--r-- | dhall/src/traits/static_type.rs | 45 | 
3 files changed, 41 insertions, 40 deletions
diff --git a/dhall/src/traits/deserialize.rs b/dhall/src/traits/deserialize.rs index 1fbdfe1..f1be054 100644 --- a/dhall/src/traits/deserialize.rs +++ b/dhall/src/traits/deserialize.rs @@ -5,25 +5,25 @@ pub trait Deserialize<'a>: Sized {      fn from_str(s: &'a str, ty: Option<&Type>) -> Result<Self>;  } -impl<'a> Deserialize<'a> for Parsed { +impl<'de: 'a, 'a> Deserialize<'de> for Parsed<'a> {      /// Simply parses the provided string. Ignores the      /// provided type. -    fn from_str(s: &'a str, _: Option<&Type>) -> Result<Self> { +    fn from_str(s: &'de str, _: Option<&Type>) -> Result<Self> {          Ok(Parsed::parse_str(s)?)      }  } -impl<'a> Deserialize<'a> for Resolved { +impl<'de: 'a, 'a> Deserialize<'de> for Resolved<'a> {      /// Parses and resolves the provided string. Ignores the      /// provided type. -    fn from_str(s: &'a str, ty: Option<&Type>) -> Result<Self> { +    fn from_str(s: &'de str, ty: Option<&Type>) -> Result<Self> {          Ok(Parsed::from_str(s, ty)?.resolve()?)      }  } -impl<'a> Deserialize<'a> for Typed { +impl<'de: 'a, 'a> Deserialize<'de> for Typed<'a> {      /// Parses, resolves and typechecks the provided string. -    fn from_str(s: &'a str, ty: Option<&Type>) -> Result<Self> { +    fn from_str(s: &'de str, ty: Option<&Type>) -> Result<Self> {          let resolved = Resolved::from_str(s, ty)?;          match ty {              None => Ok(resolved.typecheck()?), @@ -32,15 +32,15 @@ impl<'a> Deserialize<'a> for Typed {      }  } -impl<'a> Deserialize<'a> for Normalized { +impl<'de: 'a, 'a> Deserialize<'de> for Normalized<'a> {      /// Parses, resolves, typechecks and normalizes the provided string. -    fn from_str(s: &'a str, ty: Option<&Type>) -> Result<Self> { +    fn from_str(s: &'de str, ty: Option<&Type>) -> Result<Self> {          Ok(Typed::from_str(s, ty)?.normalize())      }  } -impl<'a> Deserialize<'a> for Type { -    fn from_str(s: &'a str, ty: Option<&Type>) -> Result<Self> { +impl<'de: 'a, 'a> Deserialize<'de> for Type<'a> { +    fn from_str(s: &'de str, ty: Option<&Type>) -> Result<Self> {          Ok(Normalized::from_str(s, ty)?.into_type())      }  } diff --git a/dhall/src/traits/dynamic_type.rs b/dhall/src/traits/dynamic_type.rs index d03f8cd..28ed76d 100644 --- a/dhall/src/traits/dynamic_type.rs +++ b/dhall/src/traits/dynamic_type.rs @@ -6,17 +6,17 @@ use dhall_core::{Const, ExprF};  use std::borrow::Cow;  pub trait DynamicType { -    fn get_type<'a>(&'a self) -> Result<Cow<'a, Type>, TypeError>; +    fn get_type<'a>(&'a self) -> Result<Cow<'a, Type<'static>>, TypeError>;  }  impl<T: StaticType> DynamicType for T { -    fn get_type<'a>(&'a self) -> Result<Cow<'a, Type>, TypeError> { +    fn get_type<'a>(&'a self) -> Result<Cow<'a, Type<'static>>, TypeError> {          Ok(Cow::Owned(T::get_static_type()))      }  } -impl DynamicType for Type { -    fn get_type(&self) -> Result<Cow<'_, Type>, TypeError> { +impl<'a> DynamicType for Type<'a> { +    fn get_type(&self) -> Result<Cow<'_, Type<'static>>, TypeError> {          use TypeInternal::*;          match &self.0 {              Expr(e) => e.get_type(), @@ -29,8 +29,8 @@ impl DynamicType for Type {      }  } -impl DynamicType for Normalized { -    fn get_type(&self) -> Result<Cow<'_, Type>, TypeError> { +impl<'a> DynamicType for Normalized<'a> { +    fn get_type(&self) -> Result<Cow<'_, Type<'static>>, TypeError> {          match &self.1 {              Some(t) => Ok(Cow::Borrowed(t)),              None => Err(TypeError::new( @@ -42,8 +42,8 @@ impl DynamicType for Normalized {      }  } -impl DynamicType for Typed { -    fn get_type(&self) -> Result<Cow<'_, Type>, TypeError> { +impl<'a> DynamicType for Typed<'a> { +    fn get_type(&self) -> Result<Cow<'_, Type<'static>>, TypeError> {          match &self.1 {              Some(t) => Ok(Cow::Borrowed(t)),              None => Err(TypeError::new( diff --git a/dhall/src/traits/static_type.rs b/dhall/src/traits/static_type.rs index 6b0f5c5..35d91e1 100644 --- a/dhall/src/traits/static_type.rs +++ b/dhall/src/traits/static_type.rs @@ -3,7 +3,7 @@ use dhall_core::*;  use dhall_generator::*;  pub trait StaticType { -    fn get_static_type() -> Type; +    fn get_static_type() -> Type<'static>;  }  /// Trait for rust types that can be represented in dhall in @@ -12,79 +12,80 @@ pub trait StaticType {  /// is `HashMap<Text, bool>` because dhall cannot represent records with a  /// variable number of fields.  pub trait SimpleStaticType { -    fn get_simple_static_type() -> SimpleType; +    fn get_simple_static_type<'a>() -> SimpleType<'a>;  } -fn mktype(x: SubExpr<X, X>) -> SimpleType { -    SimpleType(x) +fn mktype<'a>(x: SubExpr<X, X>) -> SimpleType<'a> { +    SimpleType(x, std::marker::PhantomData)  }  impl<T: SimpleStaticType> StaticType for T { -    fn get_static_type() -> Type { +    fn get_static_type() -> Type<'static> {          crate::expr::Normalized(              T::get_simple_static_type().into(),              Some(Type::const_type()), +            std::marker::PhantomData,          )          .into_type()      }  } -impl StaticType for SimpleType { -    fn get_static_type() -> Type { +impl<'a> StaticType for SimpleType<'a> { +    fn get_static_type() -> Type<'static> {          Type::const_type()      }  }  impl SimpleStaticType for bool { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Bool))      }  }  impl SimpleStaticType for Natural { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Natural))      }  }  impl SimpleStaticType for u32 { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Natural))      }  }  impl SimpleStaticType for u64 { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Natural))      }  }  impl SimpleStaticType for Integer { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Integer))      }  }  impl SimpleStaticType for i32 { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Integer))      }  }  impl SimpleStaticType for i64 { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Integer))      }  }  impl SimpleStaticType for String { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!(Text))      }  }  impl<A: SimpleStaticType, B: SimpleStaticType> SimpleStaticType for (A, B) { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          let ta: SubExpr<_, _> = A::get_simple_static_type().into();          let tb: SubExpr<_, _> = B::get_simple_static_type().into();          mktype(dhall_expr!({ _1: ta, _2: tb })) @@ -92,27 +93,27 @@ impl<A: SimpleStaticType, B: SimpleStaticType> SimpleStaticType for (A, B) {  }  impl<T: SimpleStaticType> SimpleStaticType for Option<T> { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          let t: SubExpr<_, _> = T::get_simple_static_type().into();          mktype(dhall_expr!(Optional t))      }  }  impl<T: SimpleStaticType> SimpleStaticType for Vec<T> { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          let t: SubExpr<_, _> = T::get_simple_static_type().into();          mktype(dhall_expr!(List t))      }  } -impl<'a, T: SimpleStaticType> SimpleStaticType for &'a T { -    fn get_simple_static_type() -> SimpleType { +impl<'b, T: SimpleStaticType> SimpleStaticType for &'b T { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          T::get_simple_static_type()      }  }  impl<T> SimpleStaticType for std::marker::PhantomData<T> { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          mktype(dhall_expr!({}))      }  } @@ -120,7 +121,7 @@ impl<T> SimpleStaticType for std::marker::PhantomData<T> {  impl<T: SimpleStaticType, E: SimpleStaticType> SimpleStaticType      for std::result::Result<T, E>  { -    fn get_simple_static_type() -> SimpleType { +    fn get_simple_static_type<'a>() -> SimpleType<'a> {          let tt: SubExpr<_, _> = T::get_simple_static_type().into();          let te: SubExpr<_, _> = E::get_simple_static_type().into();          mktype(dhall_expr!(< Ok: tt | Err: te>))  | 
