From 3b728aff86a086f71f013b77a715c33748d9f6a8 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Wed, 28 Oct 2020 21:45:42 +0000 Subject: Make type annotation optional to allow serializing SimpleValue --- serde_dhall/src/options/mod.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'serde_dhall/src/options/mod.rs') diff --git a/serde_dhall/src/options/mod.rs b/serde_dhall/src/options/mod.rs index 384f318..9241c45 100644 --- a/serde_dhall/src/options/mod.rs +++ b/serde_dhall/src/options/mod.rs @@ -1,2 +1,36 @@ +use crate::{SimpleType, StaticType}; + pub(crate) mod de; pub(crate) mod ser; + +#[derive(Debug, Clone, Copy)] +pub struct NoAnnot; +#[derive(Debug, Clone, Copy)] +pub struct ManualAnnot<'ty>(&'ty SimpleType); +#[derive(Debug, Clone, Copy)] +pub struct StaticAnnot; + +pub trait TypeAnnot: Copy {} +pub trait HasAnnot { + fn get_annot(a: A) -> Option; +} + +impl TypeAnnot for NoAnnot {} +impl TypeAnnot for ManualAnnot<'_> {} +impl TypeAnnot for StaticAnnot {} + +impl HasAnnot for T { + fn get_annot(_: NoAnnot) -> Option { + None + } +} +impl HasAnnot> for T { + fn get_annot(a: ManualAnnot<'_>) -> Option { + Some(a.0.clone()) + } +} +impl HasAnnot for T { + fn get_annot(_: StaticAnnot) -> Option { + Some(T::static_type()) + } +} -- cgit v1.2.3