summaryrefslogtreecommitdiff
path: root/serde_dhall/src/serde.rs
diff options
context:
space:
mode:
authorNadrieril2020-03-22 21:20:58 +0000
committerNadrieril2020-03-31 21:45:31 +0100
commit1a98b506055779e1a60558d9c5a56b071b3d61a0 (patch)
tree1ec11648ed9e3c503c6f4f06307c3541af648a23 /serde_dhall/src/serde.rs
parent196491a37a9ab2869ab6d76e1417a85a9e033dd4 (diff)
Reorganize API and internals of serde_dhall a bit
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>);