pyth_sdk/
utils.rs

1/// This module helps serde to serialize deserialize some fields as String
2///
3/// The reason this is added is that `#[serde(with = "String")]` does not work
4/// because Borsh also implements serialize and deserialize functions and
5/// compiler cannot distinguish them.
6pub mod as_string {
7    use serde::de::Error;
8    use serde::{
9        Deserialize,
10        Deserializer,
11        Serializer,
12    };
13
14    pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
15    where
16        T: std::fmt::Display,
17        S: Serializer,
18    {
19        serializer.serialize_str(value.to_string().as_str())
20    }
21
22    pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
23    where
24        T: std::str::FromStr,
25        D: Deserializer<'de>,
26    {
27        let string = String::deserialize(deserializer)?;
28        string
29            .parse()
30            .map_err(|_| D::Error::custom("Input is not valid"))
31    }
32}