stdcode/
asstr.rs

1use std::{fmt::Debug, str::FromStr};
2
3use serde::Deserialize;
4use serde::{Deserializer, Serialize, Serializer};
5
6pub fn serialize<T: ToString + Serialize, S>(val: T, serializer: S) -> Result<S::Ok, S::Error>
7where
8    S: Serializer,
9{
10    if serializer.is_human_readable() {
11        serializer.serialize_str(&val.to_string())
12    } else {
13        val.serialize(serializer)
14    }
15}
16
17pub fn deserialize<'de, T: FromStr + Deserialize<'de>, D>(deserializer: D) -> Result<T, D::Error>
18where
19    D: Deserializer<'de>,
20    <T as std::str::FromStr>::Err: Debug,
21{
22    if deserializer.is_human_readable() {
23        let s = String::deserialize(deserializer)?;
24        s.parse()
25            .map_err(|e| serde::de::Error::custom(format!("FromStr parsing error {:?}", e)))
26    } else {
27        T::deserialize(deserializer)
28    }
29    // let s = <&str>::deserialize(deserializer)?;
30    // base64::decode(s).map_err(de::Error::custom)
31}