1use std::str::FromStr;
2
3use serde::{de::Error, Deserialize, Deserializer};
4use solana_program::pubkey::Pubkey;
5
6pub fn pubkey_from_base58<'de, D>(deserializer: D) -> Result<Pubkey, D::Error>
9where
10 D: Deserializer<'de>,
11{
12 let s: &str = Deserialize::deserialize(deserializer)?;
13 Pubkey::from_str(s).map_err(D::Error::custom)
14}
15
16pub fn vec_pubkey_from_base58<'de, D>(
20 deserializer: D,
21) -> Result<Vec<Pubkey>, D::Error>
22where
23 D: Deserializer<'de>,
24{
25 let xs: Vec<&str> = Deserialize::deserialize(deserializer)?;
26 xs.into_iter()
27 .map(|s| Pubkey::from_str(s).map_err(D::Error::custom))
28 .collect()
29}
30
31pub fn opt_pubkey_from_base58<'de, D>(
35 deserializer: D,
36) -> Result<Option<Pubkey>, D::Error>
37where
38 D: Deserializer<'de>,
39{
40 let opt: Option<&str> = Deserialize::deserialize(deserializer)?;
41 opt.map(|s| Pubkey::from_str(s).map_err(D::Error::custom))
42 .transpose()
43}
44
45pub fn u64_from_string<'de, D>(deserializer: D) -> Result<u64, D::Error>
48where
49 D: Deserializer<'de>,
50{
51 let s: &str = Deserialize::deserialize(deserializer)?;
52 u64::from_str(s).map_err(D::Error::custom)
53}
54
55pub fn i64_from_string<'de, D>(deserializer: D) -> Result<i64, D::Error>
58where
59 D: Deserializer<'de>,
60{
61 let s: &str = Deserialize::deserialize(deserializer)?;
62 i64::from_str(s).map_err(D::Error::custom)
63}
64
65pub fn u128_from_string<'de, D>(deserializer: D) -> Result<u128, D::Error>
68where
69 D: Deserializer<'de>,
70{
71 let s: &str = Deserialize::deserialize(deserializer)?;
72 u128::from_str(s).map_err(D::Error::custom)
73}
74
75pub fn i128_from_string<'de, D>(deserializer: D) -> Result<i128, D::Error>
78where
79 D: Deserializer<'de>,
80{
81 let s: &str = Deserialize::deserialize(deserializer)?;
82 i128::from_str(s).map_err(D::Error::custom)
83}