diff options
Diffstat (limited to '')
-rw-r--r-- | serde_dhall/src/deserialize.rs (renamed from serde_dhall/src/serde.rs) | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/serde_dhall/src/serde.rs b/serde_dhall/src/deserialize.rs index 717450a..75a08a9 100644 --- a/serde_dhall/src/serde.rs +++ b/serde_dhall/src/deserialize.rs @@ -1,15 +1,28 @@ -use std::borrow::Cow; - use serde::de::value::{ MapAccessDeserializer, MapDeserializer, SeqDeserializer, }; +use std::borrow::Cow; use dhall::syntax::NumKind; use crate::simple::{ValKind, Value as SimpleValue}; -use crate::{Deserialize, Error, Result, Value}; +use crate::{Error, Result, Value}; + +pub trait Sealed {} + +/// A data structure that can be deserialized from a Dhall expression +/// +/// This is automatically implemented for any type that [serde][serde] +/// can deserialize. +/// +/// This trait cannot be implemented manually. +pub trait Deserialize: Sealed + Sized { + #[doc(hidden)] + /// See [serde_dhall::from_str][crate::from_str] + fn from_dhall(v: &Value) -> Result<Self>; +} -impl<'a, T> crate::sealed::Sealed for T where T: serde::Deserialize<'a> {} +impl<'a, T> Sealed for T where T: serde::Deserialize<'a> {} struct Deserializer<'a>(Cow<'a, SimpleValue>); |