provekit_common/utils/
serde_jsonify.rs1use serde::{de::Error as _, ser::Error as _, Deserialize, Deserializer, Serialize, Serializer};
5
6pub fn serialize<T, S>(obj: &T, serializer: S) -> Result<S::Ok, S::Error>
7where
8 T: Serialize,
9 S: Serializer,
10{
11 if serializer.is_human_readable() {
12 T::serialize(obj, serializer)
13 } else {
14 let json = serde_json::to_string(obj).map_err(S::Error::custom)?;
15 serializer.serialize_str(&json)
16 }
17}
18
19pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
20where
21 T: Deserialize<'de>,
22 D: Deserializer<'de>,
23{
24 if deserializer.is_human_readable() {
25 T::deserialize(deserializer)
26 } else {
27 let json: &str = <&str>::deserialize(deserializer)?;
28 serde_json::from_str(json).map_err(D::Error::custom)
29 }
30}