endpoint_libs/libs/
types.rs1use 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}