sugar_cli/airdrop/
structs.rs1use 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>>;