Skip to main content

hive_rs/types/
misc.rs

1use std::collections::BTreeMap;
2use std::fmt::{Display, Formatter};
3
4use serde::de::Error as _;
5use serde::{Deserialize, Deserializer, Serialize, Serializer};
6use serde_json::Value;
7
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
9pub struct VestingDelegation {
10    #[serde(flatten)]
11    pub extra: BTreeMap<String, Value>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
15pub struct ExpiringVestingDelegation {
16    #[serde(flatten)]
17    pub extra: BTreeMap<String, Value>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
21pub struct Witness {
22    #[serde(flatten)]
23    pub extra: BTreeMap<String, Value>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
27pub struct WitnessProps {
28    #[serde(flatten)]
29    pub extra: BTreeMap<String, Value>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
33pub struct OrderBook {
34    #[serde(flatten)]
35    pub extra: BTreeMap<String, Value>,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
39pub struct OpenOrder {
40    #[serde(flatten)]
41    pub extra: BTreeMap<String, Value>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
45pub struct MarketTrade {
46    #[serde(flatten)]
47    pub extra: BTreeMap<String, Value>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
51pub struct MarketBucket {
52    #[serde(flatten)]
53    pub extra: BTreeMap<String, Value>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
57pub struct SavingsWithdraw {
58    #[serde(flatten)]
59    pub extra: BTreeMap<String, Value>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
63pub struct ConversionRequest {
64    #[serde(flatten)]
65    pub extra: BTreeMap<String, Value>,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
69pub struct CollateralizedConversionRequest {
70    #[serde(flatten)]
71    pub extra: BTreeMap<String, Value>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
75pub struct FollowEntry {
76    #[serde(flatten)]
77    pub extra: BTreeMap<String, Value>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
81pub struct FollowCount {
82    #[serde(flatten)]
83    pub extra: BTreeMap<String, Value>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
87pub struct BlogEntry {
88    #[serde(flatten)]
89    pub extra: BTreeMap<String, Value>,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
93pub struct BlogEntryLight {
94    #[serde(flatten)]
95    pub extra: BTreeMap<String, Value>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
99pub struct Escrow {
100    #[serde(flatten)]
101    pub extra: BTreeMap<String, Value>,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
105pub struct Proposal {
106    #[serde(flatten)]
107    pub extra: BTreeMap<String, Value>,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
111pub struct RecurrentTransfer {
112    #[serde(flatten)]
113    pub extra: BTreeMap<String, Value>,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
117pub struct AppliedOperation {
118    #[serde(flatten)]
119    pub extra: BTreeMap<String, Value>,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
123pub struct CommunityDetail {
124    #[serde(flatten)]
125    pub extra: BTreeMap<String, Value>,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
129pub struct CommunityRole {
130    #[serde(flatten)]
131    pub extra: BTreeMap<String, Value>,
132}
133
134#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
135pub struct Notification {
136    #[serde(flatten)]
137    pub extra: BTreeMap<String, Value>,
138}
139
140#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
141pub struct PostsQuery {
142    #[serde(flatten)]
143    pub extra: BTreeMap<String, Value>,
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
147pub struct AccountPostsQuery {
148    #[serde(flatten)]
149    pub extra: BTreeMap<String, Value>,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
153pub struct CommunityQuery {
154    #[serde(flatten)]
155    pub extra: BTreeMap<String, Value>,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
159pub struct ListCommunitiesQuery {
160    #[serde(flatten)]
161    pub extra: BTreeMap<String, Value>,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
165pub struct CommunityRolesQuery {
166    #[serde(flatten)]
167    pub extra: BTreeMap<String, Value>,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
171pub struct AccountNotifsQuery {
172    #[serde(flatten)]
173    pub extra: BTreeMap<String, Value>,
174}
175
176#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
177pub struct ChainId {
178    pub bytes: [u8; 32],
179}
180
181impl ChainId {
182    pub fn mainnet() -> Self {
183        Self::from_hex("beeab0de00000000000000000000000000000000000000000000000000000000")
184            .expect("valid mainnet chain id")
185    }
186
187    pub fn testnet() -> Self {
188        Self::from_hex("18dcf0a285365fc58b71f18b3d3fec954aa0c141c44e4e5cb4cf777b9eab274e")
189            .expect("valid testnet chain id")
190    }
191
192    pub fn from_hex(value: &str) -> Result<Self, hex::FromHexError> {
193        let bytes = hex::decode(value)?;
194        let bytes: [u8; 32] = bytes
195            .try_into()
196            .map_err(|_| hex::FromHexError::InvalidStringLength)?;
197        Ok(Self { bytes })
198    }
199
200    pub fn to_hex(&self) -> String {
201        hex::encode(self.bytes)
202    }
203}
204
205impl Default for ChainId {
206    fn default() -> Self {
207        Self::mainnet()
208    }
209}
210
211impl Display for ChainId {
212    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
213        write!(f, "{}", self.to_hex())
214    }
215}
216
217impl Serialize for ChainId {
218    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
219    where
220        S: Serializer,
221    {
222        serializer.serialize_str(&self.to_hex())
223    }
224}
225
226impl<'de> Deserialize<'de> for ChainId {
227    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
228    where
229        D: Deserializer<'de>,
230    {
231        let value = String::deserialize(deserializer)?;
232        Self::from_hex(&value).map_err(D::Error::custom)
233    }
234}