serde_utils/
json_str.rs

1//! Serialize a datatype as a JSON-blob within a single string.
2use serde::{
3    de::{DeserializeOwned, Error as _},
4    ser::Error as _,
5    Deserialize, Deserializer, Serialize, Serializer,
6};
7
8/// Serialize as a JSON object within a string.
9pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
10where
11    S: Serializer,
12    T: Serialize,
13{
14    serializer.serialize_str(&serde_json::to_string(value).map_err(S::Error::custom)?)
15}
16
17/// Deserialize a JSON object embedded in a string.
18pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
19where
20    D: Deserializer<'de>,
21    T: DeserializeOwned,
22{
23    let json_str = String::deserialize(deserializer)?;
24    serde_json::from_str(&json_str).map_err(D::Error::custom)
25}