json_syntax/serde/
mod.rs

1use crate::Value;
2use serde::{de::DeserializeOwned, Serialize};
3
4mod de;
5mod ser;
6
7pub use de::*;
8pub use ser::*;
9
10const NUMBER_TOKEN: &str = "$serde_json::private::Number";
11
12/// Serializes the given `value` into a JSON [`Value`].
13///
14/// # Example
15///
16/// ```
17/// use serde::Serialize;
18/// use json_syntax::{json, Value};
19///
20/// #[derive(Serialize)]
21/// struct User {
22///     fingerprint: String,
23///     location: String,
24/// }
25///
26/// let u = User {
27///   fingerprint: "0xF9BA143B95FF6D82".to_owned(),
28///   location: "Menlo Park, CA".to_owned(),
29/// };
30///
31/// let expected: Value = json!({
32///   "fingerprint": "0xF9BA143B95FF6D82",
33///   "location": "Menlo Park, CA",
34/// });
35///
36/// let v = json_syntax::to_value(u).unwrap();
37/// assert_eq!(v, expected);
38/// ```
39pub fn to_value<T>(value: T) -> Result<Value, SerializeError>
40where
41	T: Serialize,
42{
43	value.serialize(Serializer)
44}
45
46/// Deserializes the JSON `value` into an instance of type `T`.
47///
48/// # Example
49///
50/// ```
51/// use serde::Deserialize;
52/// use json_syntax::{json, Value};
53///
54/// #[derive(Deserialize, Debug)]
55/// struct User {
56///     fingerprint: String,
57///     location: String,
58/// }
59///
60/// let j: Value = json!({
61///   "fingerprint": "0xF9BA143B95FF6D82",
62///   "location": "Menlo Park, CA"
63/// });
64///
65/// let u: User = json_syntax::from_value(j).unwrap();
66/// println!("{:#?}", u);
67/// ```
68pub fn from_value<T>(value: Value) -> Result<T, DeserializeError>
69where
70	T: DeserializeOwned,
71{
72	T::deserialize(value)
73}