diff options
author | Nadrieril | 2020-10-24 15:37:52 +0100 |
---|---|---|
committer | GitHub | 2020-10-24 15:37:52 +0100 |
commit | d9e42ea1fe16fc9f16a390f2dac2713e691b2700 (patch) | |
tree | e5bae5c7a70f2c3721baf2e8a4c3683c5dfb71dc /serde_dhall/src/deserialize.rs | |
parent | 41b303c00392571fe8c862041b811f7716e38b57 (diff) | |
parent | 34a4727366e8efb4f9d51c9f636ebcda580173b0 (diff) |
Merge pull request #183 from io12/pub-simple-value
Make SimpleValue public and add from_simple_value()
Diffstat (limited to '')
-rw-r--r-- | serde_dhall/src/deserialize.rs | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/serde_dhall/src/deserialize.rs b/serde_dhall/src/deserialize.rs index 92be2e9..6d3aab8 100644 --- a/serde_dhall/src/deserialize.rs +++ b/serde_dhall/src/deserialize.rs @@ -45,6 +45,51 @@ impl<T> Sealed for T where T: serde::de::DeserializeOwned {} struct Deserializer<'a>(Cow<'a, SimpleValue>); +/// Deserialize a Rust value from a Dhall [`SimpleValue`]. +/// +/// # Example +/// +/// ```rust +/// # fn main() -> serde_dhall::Result<()> { +/// use std::collections::BTreeMap; +/// use serde::Deserialize; +/// +/// // We use serde's derive feature +/// #[derive(Deserialize)] +/// struct Point { +/// x: u64, +/// y: u64, +/// } +/// +/// // Some Dhall data +/// let mut data = BTreeMap::new(); +/// data.insert( +/// "x".to_string(), +/// serde_dhall::SimpleValue::Num(serde_dhall::NumKind::Natural(1)) +/// ); +/// data.insert( +/// "y".to_string(), +/// serde_dhall::SimpleValue::Num(serde_dhall::NumKind::Natural(2)) +/// ); +/// let data = serde_dhall::SimpleValue::Record(data); +/// +/// // Parse the Dhall value as a Point. +/// let point: Point = serde_dhall::from_simple_value(data)?; +/// +/// assert_eq!(point.x, 1); +/// assert_eq!(point.y, 2); +/// # Ok(()) +/// # } +/// ``` +/// +/// [`SimpleValue`]: enum.SimpleValue.html +pub fn from_simple_value<T>(v: SimpleValue) -> Result<T> +where + T: serde::de::DeserializeOwned, +{ + T::deserialize(Deserializer(Cow::Owned(v))) +} + impl<T> FromDhall for T where T: serde::de::DeserializeOwned, @@ -56,7 +101,7 @@ where v ))) })?; - T::deserialize(Deserializer(Cow::Owned(sval))) + from_simple_value(sval) } } |