linera_version/serde_pretty/
mod.rs

1// Copyright (c) Zefchain Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4mod 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}