endpoint_libs/libs/
types.rs

1use std::fmt::Debug;
2use std::ops::{Deref, DerefMut};
3
4#[doc(hidden)]
5pub use alloy_primitives::{Address, B256 as H256, U256};
6use serde::de::Error;
7use serde::{Deserialize, Deserializer, Serialize, Serializer};
8
9#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
10pub struct BlockchainAddress(pub Address);
11impl Debug for BlockchainAddress {
12    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13        self.0.fmt(f)
14    }
15}
16#[allow(non_snake_case)]
17pub mod WithBlockchainAddress {
18    use super::*;
19
20    pub fn serialize<S>(this: &Address, serializer: S) -> Result<S::Ok, S::Error>
21    where
22        S: Serializer,
23    {
24        format!("{this:?}").serialize(serializer)
25    }
26    pub fn deserialize<'de, D>(deserializer: D) -> Result<Address, D::Error>
27    where
28        D: Deserializer<'de>,
29    {
30        let value = String::deserialize(deserializer)?;
31        let value = Address::from_slice(value.to_string().as_bytes());
32        Ok(value)
33    }
34}
35impl Serialize for BlockchainAddress {
36    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
37    where
38        S: Serializer,
39    {
40        format!("{:?}", self.0).serialize(serializer)
41    }
42}
43impl<'de> Deserialize<'de> for BlockchainAddress {
44    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
45    where
46        D: Deserializer<'de>,
47    {
48        let value = String::deserialize(deserializer)?;
49        let value = Address::from_slice(value.to_string().as_bytes());
50        Ok(BlockchainAddress(value))
51    }
52}
53
54impl From<Address> for BlockchainAddress {
55    fn from(address: Address) -> Self {
56        BlockchainAddress(address)
57    }
58}
59impl From<BlockchainAddress> for Address {
60    fn from(val: BlockchainAddress) -> Self {
61        val.0
62    }
63}
64
65impl Deref for BlockchainAddress {
66    type Target = Address;
67    fn deref(&self) -> &Self::Target {
68        &self.0
69    }
70}
71impl DerefMut for BlockchainAddress {
72    fn deref_mut(&mut self) -> &mut Self::Target {
73        &mut self.0
74    }
75}
76#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
77pub struct BlockchainTransactionHash(pub H256);
78impl Debug for BlockchainTransactionHash {
79    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
80        self.0.fmt(f)
81    }
82}
83#[allow(non_snake_case)]
84pub mod WithBlockchainTransactionHash {
85    use std::str::FromStr;
86
87    use super::*;
88
89    pub fn serialize<S>(this: &H256, serializer: S) -> Result<S::Ok, S::Error>
90    where
91        S: Serializer,
92    {
93        format!("{this:?}").serialize(serializer)
94    }
95    pub fn deserialize<'de, D>(deserializer: D) -> Result<H256, D::Error>
96    where
97        D: Deserializer<'de>,
98    {
99        let value = String::deserialize(deserializer)?;
100
101        let h256_value = H256::from_str(&value).map_err(|e| D::Error::custom(e.to_string()))?;
102
103        Ok(h256_value)
104    }
105}
106impl Serialize for BlockchainTransactionHash {
107    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
108    where
109        S: Serializer,
110    {
111        format!("{:?}", self.0).serialize(serializer)
112    }
113}
114impl<'de> Deserialize<'de> for BlockchainTransactionHash {
115    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
116    where
117        D: Deserializer<'de>,
118    {
119        let value = String::deserialize(deserializer)?;
120
121        let h256_value = H256::from_slice(value.as_bytes());
122
123        Ok(BlockchainTransactionHash(h256_value))
124    }
125}
126
127impl From<H256> for BlockchainTransactionHash {
128    fn from(hash: H256) -> Self {
129        BlockchainTransactionHash(hash)
130    }
131}
132impl From<BlockchainTransactionHash> for H256 {
133    fn from(val: BlockchainTransactionHash) -> Self {
134        val.0
135    }
136}
137
138impl Deref for BlockchainTransactionHash {
139    type Target = H256;
140    fn deref(&self) -> &Self::Target {
141        &self.0
142    }
143}
144impl DerefMut for BlockchainTransactionHash {
145    fn deref_mut(&mut self) -> &mut Self::Target {
146        &mut self.0
147    }
148}