jasn/
de.rs

1//! Deserialization of JASN text to Rust values.
2
3use jasn_core::de;
4use serde::de::Deserialize;
5
6use crate::{Value, parser};
7
8/// Error type for deserialization.
9#[derive(Debug, thiserror::Error)]
10pub enum Error {
11    /// Parse error from the JASN parser.
12    #[error("Parse error: {0}")]
13    ParseError(#[from] parser::Error),
14    /// Deserialization error from value module.
15    #[error("Deserialization error: {0}")]
16    DeserializationError(#[from] de::Error),
17}
18
19/// Result type for deserialization.
20pub type Result<T> = std::result::Result<T, Error>;
21
22/// Deserialize a JASN string into a Rust value.
23pub fn from_str<T>(s: &str) -> Result<T>
24where
25    T: for<'de> Deserialize<'de>,
26{
27    let value = parser::parse(s)?;
28    Ok(de::from_value(&value)?)
29}
30
31/// Deserialize a JASN [`Value`] into a Rust value.
32pub fn from_value<'de, T>(value: &'de Value) -> Result<T>
33where
34    T: Deserialize<'de>,
35{
36    Ok(de::from_value(value)?)
37}