linera_version/serde_pretty/
mod.rs1mod r#type;
5pub use r#type::*;
6use serde::{de::Deserialize, ser::Serialize};
7
8impl<T, Repr> From<T> for Pretty<T, Repr> {
9 fn from(value: T) -> Self {
10 Self::new(value)
11 }
12}
13
14impl<T, Repr> Serialize for Pretty<T, Repr>
15where
16 T: Serialize + Clone,
17 Repr: Serialize + From<T>,
18{
19 fn serialize<S: serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20 if serializer.is_human_readable() {
21 Repr::from(self.value.clone()).serialize(serializer)
22 } else {
23 self.value.serialize(serializer)
24 }
25 }
26}
27
28impl<'de, T, Repr> serde::de::Deserialize<'de> for Pretty<T, Repr>
29where
30 T: Deserialize<'de> + From<Repr>,
31 Repr: Deserialize<'de>,
32{
33 fn deserialize<D: serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
34 if deserializer.is_human_readable() {
35 Ok(Pretty::new(Repr::deserialize(deserializer)?.into()))
36 } else {
37 Ok(Pretty::new(T::deserialize(deserializer)?))
38 }
39 }
40}