1use jasn_core::de;
4use serde::de::Deserialize;
5
6use crate::{Value, parser};
7
8#[derive(Debug, thiserror::Error)]
10pub enum Error {
11 #[error("Parse error: {0}")]
13 ParseError(#[from] parser::Error),
14 #[error("Deserialization error: {0}")]
16 DeserializationError(#[from] de::Error),
17}
18
19pub type Result<T> = std::result::Result<T, Error>;
21
22pub 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
31pub fn from_value<'de, T>(value: &'de Value) -> Result<T>
33where
34 T: Deserialize<'de>,
35{
36 Ok(de::from_value(value)?)
37}