sugar_cli/airdrop/
structs.rs

1use std::hash::{Hash, Hasher};
2
3use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
4
5use crate::common::*;
6
7#[derive(Clone, Debug, Eq)]
8pub struct SerdePubkey(pub Pubkey);
9
10impl SerdePubkey {
11    pub fn new(pubkey: Pubkey) -> Self {
12        SerdePubkey(pubkey)
13    }
14}
15
16impl PartialEq for SerdePubkey {
17    fn eq(&self, other: &Self) -> bool {
18        self.0 == other.0
19    }
20}
21
22impl std::fmt::Display for SerdePubkey {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        write!(f, "{}", self.0)
25    }
26}
27
28impl Copy for SerdePubkey {}
29
30impl Hash for SerdePubkey {
31    fn hash<H: Hasher>(&self, state: &mut H) {
32        self.0.hash(state);
33    }
34}
35
36impl FromStr for SerdePubkey {
37    type Err = String;
38    fn from_str(s: &str) -> Result<Self, Self::Err> {
39        let pubkey =
40            Pubkey::from_str(s).map_err(|e| format!("Error '{}' while parsing '{}'", e, s))?;
41        Ok(SerdePubkey(pubkey))
42    }
43}
44
45impl<'de> Deserialize<'de> for SerdePubkey {
46    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
47    where
48        D: Deserializer<'de>,
49    {
50        let s = String::deserialize(deserializer)?;
51        FromStr::from_str(&s).map_err(de::Error::custom)
52    }
53}
54
55impl Serialize for SerdePubkey {
56    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
57    where
58        S: Serializer,
59    {
60        serializer.serialize_str(&self.0.to_string())
61    }
62}
63
64pub type AirDropTargets = HashMap<SerdePubkey, u64>;
65
66#[derive(Clone, Debug, Deserialize, Serialize)]
67pub struct TransactionResult {
68    pub signature: String,
69    pub status: bool,
70}
71
72pub type AirDropResults = HashMap<SerdePubkey, Vec<TransactionResult>>;