1use crate::model::*;
2use borsh::{BorshDeserialize, BorshSerialize};
3use kaspa_consensus_core::api::stats::BlockCount;
4use kaspa_core::debug;
5use kaspa_notify::subscription::{context::SubscriptionContext, single::UtxosChangedSubscription, Command};
6use kaspa_utils::hex::ToHex;
7use serde::{Deserialize, Serialize};
8use std::collections::HashMap;
9use std::{
10    fmt::{Display, Formatter},
11    sync::Arc,
12};
13use workflow_serializer::prelude::*;
14
15pub type RpcExtraData = Vec<u8>;
16
17#[derive(Debug, Serialize, Deserialize)]
22#[serde(rename_all = "camelCase")]
23pub struct SubmitBlockRequest {
24    pub block: RpcRawBlock,
25    #[serde(alias = "allowNonDAABlocks")]
26    pub allow_non_daa_blocks: bool,
27}
28impl SubmitBlockRequest {
29    pub fn new(block: RpcRawBlock, allow_non_daa_blocks: bool) -> Self {
30        Self { block, allow_non_daa_blocks }
31    }
32}
33
34impl Serializer for SubmitBlockRequest {
35    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
36        store!(u16, &1, writer)?;
37        serialize!(RpcRawBlock, &self.block, writer)?;
38        store!(bool, &self.allow_non_daa_blocks, writer)?;
39
40        Ok(())
41    }
42}
43
44impl Deserializer for SubmitBlockRequest {
45    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
46        let _version = load!(u16, reader)?;
47        let block = deserialize!(RpcRawBlock, reader)?;
48        let allow_non_daa_blocks = load!(bool, reader)?;
49
50        Ok(Self { block, allow_non_daa_blocks })
51    }
52}
53
54#[derive(Clone, Copy, Eq, PartialEq, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
55#[serde(rename_all = "camelCase")]
56#[borsh(use_discriminant = true)]
57pub enum SubmitBlockRejectReason {
58    BlockInvalid = 1,
59    IsInIBD = 2,
60    RouteIsFull = 3,
61}
62impl SubmitBlockRejectReason {
63    fn as_str(&self) -> &'static str {
64        match self {
66            SubmitBlockRejectReason::BlockInvalid => "block is invalid",
67            SubmitBlockRejectReason::IsInIBD => "node is not synced",
68            SubmitBlockRejectReason::RouteIsFull => "route is full",
69        }
70    }
71}
72impl Display for SubmitBlockRejectReason {
73    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
74        f.write_str(self.as_str())
75    }
76}
77
78#[derive(Eq, PartialEq, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
79#[serde(rename_all = "lowercase")]
80#[serde(tag = "type", content = "reason")]
81#[borsh(use_discriminant = true)]
82pub enum SubmitBlockReport {
83    Success,
84    Reject(SubmitBlockRejectReason),
85}
86impl SubmitBlockReport {
87    pub fn is_success(&self) -> bool {
88        *self == SubmitBlockReport::Success
89    }
90}
91
92#[derive(Debug, Serialize, Deserialize)]
93#[serde(rename_all = "camelCase")]
94pub struct SubmitBlockResponse {
95    pub report: SubmitBlockReport,
96}
97
98impl Serializer for SubmitBlockResponse {
99    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
100        store!(u16, &1, writer)?;
101        store!(SubmitBlockReport, &self.report, writer)?;
102        Ok(())
103    }
104}
105
106impl Deserializer for SubmitBlockResponse {
107    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
108        let _version = load!(u16, reader)?;
109        let report = load!(SubmitBlockReport, reader)?;
110
111        Ok(Self { report })
112    }
113}
114
115#[derive(Debug, Serialize, Deserialize)]
120#[serde(rename_all = "camelCase")]
121pub struct GetBlockTemplateRequest {
122    pub pay_address: RpcAddress,
124    pub extra_data: RpcExtraData,
126}
127impl GetBlockTemplateRequest {
128    pub fn new(pay_address: RpcAddress, extra_data: RpcExtraData) -> Self {
129        Self { pay_address, extra_data }
130    }
131}
132
133impl Serializer for GetBlockTemplateRequest {
134    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
135        store!(u16, &1, writer)?;
136        store!(RpcAddress, &self.pay_address, writer)?;
137        store!(RpcExtraData, &self.extra_data, writer)?;
138
139        Ok(())
140    }
141}
142
143impl Deserializer for GetBlockTemplateRequest {
144    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
145        let _version = load!(u16, reader)?;
146        let pay_address = load!(RpcAddress, reader)?;
147        let extra_data = load!(RpcExtraData, reader)?;
148
149        Ok(Self { pay_address, extra_data })
150    }
151}
152
153#[derive(Debug, Serialize, Deserialize)]
154#[serde(rename_all = "camelCase")]
155pub struct GetBlockTemplateResponse {
156    pub block: RpcRawBlock,
157
158    pub is_synced: bool,
163}
164
165impl Serializer for GetBlockTemplateResponse {
166    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
167        store!(u16, &1, writer)?;
168        serialize!(RpcRawBlock, &self.block, writer)?;
169        store!(bool, &self.is_synced, writer)?;
170
171        Ok(())
172    }
173}
174
175impl Deserializer for GetBlockTemplateResponse {
176    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
177        let _version = load!(u16, reader)?;
178        let block = deserialize!(RpcRawBlock, reader)?;
179        let is_synced = load!(bool, reader)?;
180
181        Ok(Self { block, is_synced })
182    }
183}
184
185#[derive(Clone, Debug, Serialize, Deserialize)]
187#[serde(rename_all = "camelCase")]
188pub struct GetBlockRequest {
189    pub hash: RpcHash,
191
192    pub include_transactions: bool,
194}
195impl GetBlockRequest {
196    pub fn new(hash: RpcHash, include_transactions: bool) -> Self {
197        Self { hash, include_transactions }
198    }
199}
200
201impl Serializer for GetBlockRequest {
202    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
203        store!(u16, &1, writer)?;
204        store!(RpcHash, &self.hash, writer)?;
205        store!(bool, &self.include_transactions, writer)?;
206
207        Ok(())
208    }
209}
210
211impl Deserializer for GetBlockRequest {
212    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
213        let _version = load!(u16, reader)?;
214        let hash = load!(RpcHash, reader)?;
215        let include_transactions = load!(bool, reader)?;
216
217        Ok(Self { hash, include_transactions })
218    }
219}
220
221#[derive(Clone, Debug, Serialize, Deserialize)]
222#[serde(rename_all = "camelCase")]
223pub struct GetBlockResponse {
224    pub block: RpcBlock,
225}
226
227impl Serializer for GetBlockResponse {
228    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
229        store!(u16, &1, writer)?;
230        serialize!(RpcBlock, &self.block, writer)?;
231
232        Ok(())
233    }
234}
235
236impl Deserializer for GetBlockResponse {
237    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
238        let _version = load!(u16, reader)?;
239        let block = deserialize!(RpcBlock, reader)?;
240
241        Ok(Self { block })
242    }
243}
244
245#[derive(Clone, Debug, Serialize, Deserialize)]
247#[serde(rename_all = "camelCase")]
248pub struct GetInfoRequest {}
249
250impl Serializer for GetInfoRequest {
251    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
252        store!(u16, &1, writer)?;
253        Ok(())
254    }
255}
256
257impl Deserializer for GetInfoRequest {
258    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
259        let _version = load!(u16, reader)?;
260        Ok(Self {})
261    }
262}
263
264#[derive(Clone, Debug, Serialize, Deserialize)]
265#[serde(rename_all = "camelCase")]
266pub struct GetInfoResponse {
267    pub p2p_id: String,
268    pub mempool_size: u64,
269    pub server_version: String,
270    pub is_utxo_indexed: bool,
271    pub is_synced: bool,
272    pub has_notify_command: bool,
273    pub has_message_id: bool,
274}
275
276impl Serializer for GetInfoResponse {
277    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
278        store!(u16, &1, writer)?;
279        store!(String, &self.p2p_id, writer)?;
280        store!(u64, &self.mempool_size, writer)?;
281        store!(String, &self.server_version, writer)?;
282        store!(bool, &self.is_utxo_indexed, writer)?;
283        store!(bool, &self.is_synced, writer)?;
284        store!(bool, &self.has_notify_command, writer)?;
285        store!(bool, &self.has_message_id, writer)?;
286
287        Ok(())
288    }
289}
290
291impl Deserializer for GetInfoResponse {
292    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
293        let _version = load!(u16, reader)?;
294        let p2p_id = load!(String, reader)?;
295        let mempool_size = load!(u64, reader)?;
296        let server_version = load!(String, reader)?;
297        let is_utxo_indexed = load!(bool, reader)?;
298        let is_synced = load!(bool, reader)?;
299        let has_notify_command = load!(bool, reader)?;
300        let has_message_id = load!(bool, reader)?;
301
302        Ok(Self { p2p_id, mempool_size, server_version, is_utxo_indexed, is_synced, has_notify_command, has_message_id })
303    }
304}
305
306#[derive(Clone, Debug, Serialize, Deserialize)]
307#[serde(rename_all = "camelCase")]
308pub struct GetCurrentNetworkRequest {}
309
310impl Serializer for GetCurrentNetworkRequest {
311    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
312        store!(u16, &1, writer)?;
313        Ok(())
314    }
315}
316
317impl Deserializer for GetCurrentNetworkRequest {
318    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
319        let _version = load!(u16, reader)?;
320        Ok(Self {})
321    }
322}
323
324#[derive(Clone, Debug, Serialize, Deserialize)]
325#[serde(rename_all = "camelCase")]
326pub struct GetCurrentNetworkResponse {
327    pub network: RpcNetworkType,
328}
329
330impl GetCurrentNetworkResponse {
331    pub fn new(network: RpcNetworkType) -> Self {
332        Self { network }
333    }
334}
335
336impl Serializer for GetCurrentNetworkResponse {
337    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
338        store!(u16, &1, writer)?;
339        store!(RpcNetworkType, &self.network, writer)?;
340        Ok(())
341    }
342}
343
344impl Deserializer for GetCurrentNetworkResponse {
345    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
346        let _version = load!(u16, reader)?;
347        let network = load!(RpcNetworkType, reader)?;
348        Ok(Self { network })
349    }
350}
351
352#[derive(Clone, Debug, Serialize, Deserialize)]
353#[serde(rename_all = "camelCase")]
354pub struct GetPeerAddressesRequest {}
355
356impl Serializer for GetPeerAddressesRequest {
357    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
358        store!(u16, &1, writer)?;
359        Ok(())
360    }
361}
362
363impl Deserializer for GetPeerAddressesRequest {
364    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
365        let _version = load!(u16, reader)?;
366        Ok(Self {})
367    }
368}
369
370#[derive(Clone, Debug, Serialize, Deserialize)]
371#[serde(rename_all = "camelCase")]
372pub struct GetPeerAddressesResponse {
373    pub known_addresses: Vec<RpcPeerAddress>,
374    pub banned_addresses: Vec<RpcIpAddress>,
375}
376
377impl GetPeerAddressesResponse {
378    pub fn new(known_addresses: Vec<RpcPeerAddress>, banned_addresses: Vec<RpcIpAddress>) -> Self {
379        Self { known_addresses, banned_addresses }
380    }
381}
382
383impl Serializer for GetPeerAddressesResponse {
384    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
385        store!(u16, &1, writer)?;
386        store!(Vec<RpcPeerAddress>, &self.known_addresses, writer)?;
387        store!(Vec<RpcIpAddress>, &self.banned_addresses, writer)?;
388        Ok(())
389    }
390}
391
392impl Deserializer for GetPeerAddressesResponse {
393    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
394        let _version = load!(u16, reader)?;
395        let known_addresses = load!(Vec<RpcPeerAddress>, reader)?;
396        let banned_addresses = load!(Vec<RpcIpAddress>, reader)?;
397        Ok(Self { known_addresses, banned_addresses })
398    }
399}
400
401#[derive(Clone, Debug, Serialize, Deserialize)]
402#[serde(rename_all = "camelCase")]
403pub struct GetSinkRequest {}
404
405impl Serializer for GetSinkRequest {
406    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
407        store!(u16, &1, writer)?;
408        Ok(())
409    }
410}
411
412impl Deserializer for GetSinkRequest {
413    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
414        let _version = load!(u16, reader)?;
415        Ok(Self {})
416    }
417}
418
419#[derive(Clone, Debug, Serialize, Deserialize)]
420#[serde(rename_all = "camelCase")]
421pub struct GetSinkResponse {
422    pub sink: RpcHash,
423}
424
425impl GetSinkResponse {
426    pub fn new(selected_tip_hash: RpcHash) -> Self {
427        Self { sink: selected_tip_hash }
428    }
429}
430
431impl Serializer for GetSinkResponse {
432    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
433        store!(u16, &1, writer)?;
434        store!(RpcHash, &self.sink, writer)?;
435        Ok(())
436    }
437}
438
439impl Deserializer for GetSinkResponse {
440    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
441        let _version = load!(u16, reader)?;
442        let sink = load!(RpcHash, reader)?;
443        Ok(Self { sink })
444    }
445}
446
447#[derive(Clone, Debug, Serialize, Deserialize)]
448#[serde(rename_all = "camelCase")]
449pub struct GetMempoolEntryRequest {
450    pub transaction_id: RpcTransactionId,
451    pub include_orphan_pool: bool,
452    pub filter_transaction_pool: bool,
454}
455
456impl GetMempoolEntryRequest {
457    pub fn new(transaction_id: RpcTransactionId, include_orphan_pool: bool, filter_transaction_pool: bool) -> Self {
458        Self { transaction_id, include_orphan_pool, filter_transaction_pool }
459    }
460}
461
462impl Serializer for GetMempoolEntryRequest {
463    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
464        store!(u16, &1, writer)?;
465        store!(RpcTransactionId, &self.transaction_id, writer)?;
466        store!(bool, &self.include_orphan_pool, writer)?;
467        store!(bool, &self.filter_transaction_pool, writer)?;
468
469        Ok(())
470    }
471}
472
473impl Deserializer for GetMempoolEntryRequest {
474    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
475        let _version = load!(u16, reader)?;
476        let transaction_id = load!(RpcTransactionId, reader)?;
477        let include_orphan_pool = load!(bool, reader)?;
478        let filter_transaction_pool = load!(bool, reader)?;
479
480        Ok(Self { transaction_id, include_orphan_pool, filter_transaction_pool })
481    }
482}
483
484#[derive(Clone, Debug, Serialize, Deserialize)]
485#[serde(rename_all = "camelCase")]
486pub struct GetMempoolEntryResponse {
487    pub mempool_entry: RpcMempoolEntry,
488}
489
490impl GetMempoolEntryResponse {
491    pub fn new(mempool_entry: RpcMempoolEntry) -> Self {
492        Self { mempool_entry }
493    }
494}
495
496impl Serializer for GetMempoolEntryResponse {
497    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
498        store!(u16, &1, writer)?;
499        serialize!(RpcMempoolEntry, &self.mempool_entry, writer)?;
500        Ok(())
501    }
502}
503
504impl Deserializer for GetMempoolEntryResponse {
505    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
506        let _version = load!(u16, reader)?;
507        let mempool_entry = deserialize!(RpcMempoolEntry, reader)?;
508        Ok(Self { mempool_entry })
509    }
510}
511
512#[derive(Clone, Debug, Serialize, Deserialize)]
513#[serde(rename_all = "camelCase")]
514pub struct GetMempoolEntriesRequest {
515    pub include_orphan_pool: bool,
516    pub filter_transaction_pool: bool,
518}
519
520impl GetMempoolEntriesRequest {
521    pub fn new(include_orphan_pool: bool, filter_transaction_pool: bool) -> Self {
522        Self { include_orphan_pool, filter_transaction_pool }
523    }
524}
525
526impl Serializer for GetMempoolEntriesRequest {
527    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
528        store!(u16, &1, writer)?;
529        store!(bool, &self.include_orphan_pool, writer)?;
530        store!(bool, &self.filter_transaction_pool, writer)?;
531
532        Ok(())
533    }
534}
535
536impl Deserializer for GetMempoolEntriesRequest {
537    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
538        let _version = load!(u16, reader)?;
539        let include_orphan_pool = load!(bool, reader)?;
540        let filter_transaction_pool = load!(bool, reader)?;
541
542        Ok(Self { include_orphan_pool, filter_transaction_pool })
543    }
544}
545
546#[derive(Clone, Debug, Serialize, Deserialize)]
547#[serde(rename_all = "camelCase")]
548pub struct GetMempoolEntriesResponse {
549    pub mempool_entries: Vec<RpcMempoolEntry>,
550}
551
552impl GetMempoolEntriesResponse {
553    pub fn new(mempool_entries: Vec<RpcMempoolEntry>) -> Self {
554        Self { mempool_entries }
555    }
556}
557
558impl Serializer for GetMempoolEntriesResponse {
559    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
560        store!(u16, &1, writer)?;
561        serialize!(Vec<RpcMempoolEntry>, &self.mempool_entries, writer)?;
562        Ok(())
563    }
564}
565
566impl Deserializer for GetMempoolEntriesResponse {
567    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
568        let _version = load!(u16, reader)?;
569        let mempool_entries = deserialize!(Vec<RpcMempoolEntry>, reader)?;
570        Ok(Self { mempool_entries })
571    }
572}
573
574#[derive(Clone, Debug, Serialize, Deserialize)]
575#[serde(rename_all = "camelCase")]
576pub struct GetConnectedPeerInfoRequest {}
577
578impl Serializer for GetConnectedPeerInfoRequest {
579    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
580        store!(u16, &1, writer)?;
581        Ok(())
582    }
583}
584
585impl Deserializer for GetConnectedPeerInfoRequest {
586    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
587        let _version = load!(u16, reader)?;
588        Ok(Self {})
589    }
590}
591
592#[derive(Clone, Debug, Serialize, Deserialize)]
593#[serde(rename_all = "camelCase")]
594pub struct GetConnectedPeerInfoResponse {
595    pub peer_info: Vec<RpcPeerInfo>,
596}
597
598impl GetConnectedPeerInfoResponse {
599    pub fn new(peer_info: Vec<RpcPeerInfo>) -> Self {
600        Self { peer_info }
601    }
602}
603
604impl Serializer for GetConnectedPeerInfoResponse {
605    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
606        store!(u16, &1, writer)?;
607        store!(Vec<RpcPeerInfo>, &self.peer_info, writer)?;
608        Ok(())
609    }
610}
611
612impl Deserializer for GetConnectedPeerInfoResponse {
613    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
614        let _version = load!(u16, reader)?;
615        let peer_info = load!(Vec<RpcPeerInfo>, reader)?;
616        Ok(Self { peer_info })
617    }
618}
619
620#[derive(Clone, Debug, Serialize, Deserialize)]
621#[serde(rename_all = "camelCase")]
622pub struct AddPeerRequest {
623    pub peer_address: RpcContextualPeerAddress,
624    pub is_permanent: bool,
625}
626
627impl AddPeerRequest {
628    pub fn new(peer_address: RpcContextualPeerAddress, is_permanent: bool) -> Self {
629        Self { peer_address, is_permanent }
630    }
631}
632
633impl Serializer for AddPeerRequest {
634    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
635        store!(u16, &1, writer)?;
636        store!(RpcContextualPeerAddress, &self.peer_address, writer)?;
637        store!(bool, &self.is_permanent, writer)?;
638
639        Ok(())
640    }
641}
642
643impl Deserializer for AddPeerRequest {
644    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
645        let _version = load!(u16, reader)?;
646        let peer_address = load!(RpcContextualPeerAddress, reader)?;
647        let is_permanent = load!(bool, reader)?;
648
649        Ok(Self { peer_address, is_permanent })
650    }
651}
652
653#[derive(Clone, Debug, Serialize, Deserialize)]
654#[serde(rename_all = "camelCase")]
655pub struct AddPeerResponse {}
656
657impl Serializer for AddPeerResponse {
658    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
659        store!(u16, &1, writer)?;
660        Ok(())
661    }
662}
663
664impl Deserializer for AddPeerResponse {
665    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
666        let _version = load!(u16, reader)?;
667        Ok(Self {})
668    }
669}
670
671#[derive(Clone, Debug, Serialize, Deserialize)]
672#[serde(rename_all = "camelCase")]
673pub struct SubmitTransactionRequest {
674    pub transaction: RpcTransaction,
675    pub allow_orphan: bool,
676}
677
678impl SubmitTransactionRequest {
679    pub fn new(transaction: RpcTransaction, allow_orphan: bool) -> Self {
680        Self { transaction, allow_orphan }
681    }
682}
683
684impl Serializer for SubmitTransactionRequest {
685    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
686        store!(u16, &1, writer)?;
687        serialize!(RpcTransaction, &self.transaction, writer)?;
688        store!(bool, &self.allow_orphan, writer)?;
689
690        Ok(())
691    }
692}
693
694impl Deserializer for SubmitTransactionRequest {
695    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
696        let _version = load!(u16, reader)?;
697        let transaction = deserialize!(RpcTransaction, reader)?;
698        let allow_orphan = load!(bool, reader)?;
699
700        Ok(Self { transaction, allow_orphan })
701    }
702}
703
704#[derive(Clone, Debug, Serialize, Deserialize)]
705#[serde(rename_all = "camelCase")]
706pub struct SubmitTransactionResponse {
707    pub transaction_id: RpcTransactionId,
708}
709
710impl SubmitTransactionResponse {
711    pub fn new(transaction_id: RpcTransactionId) -> Self {
712        Self { transaction_id }
713    }
714}
715
716impl Serializer for SubmitTransactionResponse {
717    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
718        store!(u16, &1, writer)?;
719        store!(RpcTransactionId, &self.transaction_id, writer)?;
720
721        Ok(())
722    }
723}
724
725impl Deserializer for SubmitTransactionResponse {
726    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
727        let _version = load!(u16, reader)?;
728        let transaction_id = load!(RpcTransactionId, reader)?;
729
730        Ok(Self { transaction_id })
731    }
732}
733
734#[derive(Clone, Debug, Serialize, Deserialize)]
735#[serde(rename_all = "camelCase")]
736pub struct SubmitTransactionReplacementRequest {
737    pub transaction: RpcTransaction,
738}
739
740impl SubmitTransactionReplacementRequest {
741    pub fn new(transaction: RpcTransaction) -> Self {
742        Self { transaction }
743    }
744}
745
746impl Serializer for SubmitTransactionReplacementRequest {
747    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
748        store!(u16, &1, writer)?;
749        serialize!(RpcTransaction, &self.transaction, writer)?;
750
751        Ok(())
752    }
753}
754
755impl Deserializer for SubmitTransactionReplacementRequest {
756    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
757        let _version = load!(u16, reader)?;
758        let transaction = deserialize!(RpcTransaction, reader)?;
759
760        Ok(Self { transaction })
761    }
762}
763
764#[derive(Clone, Debug, Serialize, Deserialize)]
765#[serde(rename_all = "camelCase")]
766pub struct SubmitTransactionReplacementResponse {
767    pub transaction_id: RpcTransactionId,
768    pub replaced_transaction: RpcTransaction,
769}
770
771impl SubmitTransactionReplacementResponse {
772    pub fn new(transaction_id: RpcTransactionId, replaced_transaction: RpcTransaction) -> Self {
773        Self { transaction_id, replaced_transaction }
774    }
775}
776
777impl Serializer for SubmitTransactionReplacementResponse {
778    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
779        store!(u16, &1, writer)?;
780        store!(RpcTransactionId, &self.transaction_id, writer)?;
781        serialize!(RpcTransaction, &self.replaced_transaction, writer)?;
782
783        Ok(())
784    }
785}
786
787impl Deserializer for SubmitTransactionReplacementResponse {
788    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
789        let _version = load!(u16, reader)?;
790        let transaction_id = load!(RpcTransactionId, reader)?;
791        let replaced_transaction = deserialize!(RpcTransaction, reader)?;
792
793        Ok(Self { transaction_id, replaced_transaction })
794    }
795}
796
797#[derive(Clone, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
798#[serde(rename_all = "camelCase")]
799pub struct GetSubnetworkRequest {
800    pub subnetwork_id: RpcSubnetworkId,
801}
802
803impl GetSubnetworkRequest {
804    pub fn new(subnetwork_id: RpcSubnetworkId) -> Self {
805        Self { subnetwork_id }
806    }
807}
808
809impl Serializer for GetSubnetworkRequest {
810    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
811        store!(u16, &1, writer)?;
812        store!(RpcSubnetworkId, &self.subnetwork_id, writer)?;
813
814        Ok(())
815    }
816}
817
818impl Deserializer for GetSubnetworkRequest {
819    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
820        let _version = load!(u16, reader)?;
821        let subnetwork_id = load!(RpcSubnetworkId, reader)?;
822
823        Ok(Self { subnetwork_id })
824    }
825}
826
827#[derive(Clone, Debug, Serialize, Deserialize)]
828#[serde(rename_all = "camelCase")]
829pub struct GetSubnetworkResponse {
830    pub gas_limit: u64,
831}
832
833impl GetSubnetworkResponse {
834    pub fn new(gas_limit: u64) -> Self {
835        Self { gas_limit }
836    }
837}
838
839impl Serializer for GetSubnetworkResponse {
840    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
841        store!(u16, &1, writer)?;
842        store!(u64, &self.gas_limit, writer)?;
843
844        Ok(())
845    }
846}
847
848impl Deserializer for GetSubnetworkResponse {
849    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
850        let _version = load!(u16, reader)?;
851        let gas_limit = load!(u64, reader)?;
852
853        Ok(Self { gas_limit })
854    }
855}
856
857#[derive(Clone, Debug, Serialize, Deserialize)]
858#[serde(rename_all = "camelCase")]
859pub struct GetVirtualChainFromBlockRequest {
860    pub start_hash: RpcHash,
861    pub include_accepted_transaction_ids: bool,
862}
863
864impl GetVirtualChainFromBlockRequest {
865    pub fn new(start_hash: RpcHash, include_accepted_transaction_ids: bool) -> Self {
866        Self { start_hash, include_accepted_transaction_ids }
867    }
868}
869
870impl Serializer for GetVirtualChainFromBlockRequest {
871    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
872        store!(u16, &1, writer)?;
873        store!(RpcHash, &self.start_hash, writer)?;
874        store!(bool, &self.include_accepted_transaction_ids, writer)?;
875
876        Ok(())
877    }
878}
879
880impl Deserializer for GetVirtualChainFromBlockRequest {
881    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
882        let _version = load!(u16, reader)?;
883        let start_hash = load!(RpcHash, reader)?;
884        let include_accepted_transaction_ids = load!(bool, reader)?;
885
886        Ok(Self { start_hash, include_accepted_transaction_ids })
887    }
888}
889
890#[derive(Clone, Debug, Serialize, Deserialize)]
891#[serde(rename_all = "camelCase")]
892pub struct GetVirtualChainFromBlockResponse {
893    pub removed_chain_block_hashes: Vec<RpcHash>,
894    pub added_chain_block_hashes: Vec<RpcHash>,
895    pub accepted_transaction_ids: Vec<RpcAcceptedTransactionIds>,
896}
897
898impl GetVirtualChainFromBlockResponse {
899    pub fn new(
900        removed_chain_block_hashes: Vec<RpcHash>,
901        added_chain_block_hashes: Vec<RpcHash>,
902        accepted_transaction_ids: Vec<RpcAcceptedTransactionIds>,
903    ) -> Self {
904        Self { removed_chain_block_hashes, added_chain_block_hashes, accepted_transaction_ids }
905    }
906}
907
908impl Serializer for GetVirtualChainFromBlockResponse {
909    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
910        store!(u16, &1, writer)?;
911        store!(Vec<RpcHash>, &self.removed_chain_block_hashes, writer)?;
912        store!(Vec<RpcHash>, &self.added_chain_block_hashes, writer)?;
913        store!(Vec<RpcAcceptedTransactionIds>, &self.accepted_transaction_ids, writer)?;
914
915        Ok(())
916    }
917}
918
919impl Deserializer for GetVirtualChainFromBlockResponse {
920    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
921        let _version = load!(u16, reader)?;
922        let removed_chain_block_hashes = load!(Vec<RpcHash>, reader)?;
923        let added_chain_block_hashes = load!(Vec<RpcHash>, reader)?;
924        let accepted_transaction_ids = load!(Vec<RpcAcceptedTransactionIds>, reader)?;
925
926        Ok(Self { removed_chain_block_hashes, added_chain_block_hashes, accepted_transaction_ids })
927    }
928}
929
930#[derive(Clone, Debug, Serialize, Deserialize)]
931#[serde(rename_all = "camelCase")]
932pub struct GetBlocksRequest {
933    pub low_hash: Option<RpcHash>,
934    pub include_blocks: bool,
935    pub include_transactions: bool,
936}
937
938impl GetBlocksRequest {
939    pub fn new(low_hash: Option<RpcHash>, include_blocks: bool, include_transactions: bool) -> Self {
940        Self { low_hash, include_blocks, include_transactions }
941    }
942}
943
944impl Serializer for GetBlocksRequest {
945    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
946        store!(u16, &1, writer)?;
947        store!(Option<RpcHash>, &self.low_hash, writer)?;
948        store!(bool, &self.include_blocks, writer)?;
949        store!(bool, &self.include_transactions, writer)?;
950
951        Ok(())
952    }
953}
954
955impl Deserializer for GetBlocksRequest {
956    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
957        let _version = load!(u16, reader)?;
958        let low_hash = load!(Option<RpcHash>, reader)?;
959        let include_blocks = load!(bool, reader)?;
960        let include_transactions = load!(bool, reader)?;
961
962        Ok(Self { low_hash, include_blocks, include_transactions })
963    }
964}
965
966#[derive(Clone, Debug, Serialize, Deserialize)]
967#[serde(rename_all = "camelCase")]
968pub struct GetBlocksResponse {
969    pub block_hashes: Vec<RpcHash>,
970    pub blocks: Vec<RpcBlock>,
971}
972
973impl GetBlocksResponse {
974    pub fn new(block_hashes: Vec<RpcHash>, blocks: Vec<RpcBlock>) -> Self {
975        Self { block_hashes, blocks }
976    }
977}
978
979impl Serializer for GetBlocksResponse {
980    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
981        store!(u16, &1, writer)?;
982        store!(Vec<RpcHash>, &self.block_hashes, writer)?;
983        serialize!(Vec<RpcBlock>, &self.blocks, writer)?;
984
985        Ok(())
986    }
987}
988
989impl Deserializer for GetBlocksResponse {
990    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
991        let _version = load!(u16, reader)?;
992        let block_hashes = load!(Vec<RpcHash>, reader)?;
993        let blocks = deserialize!(Vec<RpcBlock>, reader)?;
994
995        Ok(Self { block_hashes, blocks })
996    }
997}
998
999#[derive(Clone, Debug, Serialize, Deserialize)]
1000#[serde(rename_all = "camelCase")]
1001pub struct GetBlockCountRequest {}
1002
1003impl Serializer for GetBlockCountRequest {
1004    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1005        store!(u16, &1, writer)?;
1006        Ok(())
1007    }
1008}
1009
1010impl Deserializer for GetBlockCountRequest {
1011    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1012        let _version = load!(u16, reader)?;
1013        Ok(Self {})
1014    }
1015}
1016
1017pub type GetBlockCountResponse = BlockCount;
1018
1019#[derive(Clone, Debug, Serialize, Deserialize)]
1020#[serde(rename_all = "camelCase")]
1021pub struct GetBlockDagInfoRequest {}
1022
1023impl Serializer for GetBlockDagInfoRequest {
1024    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1025        store!(u16, &1, writer)?;
1026        Ok(())
1027    }
1028}
1029
1030impl Deserializer for GetBlockDagInfoRequest {
1031    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1032        let _version = load!(u16, reader)?;
1033        Ok(Self {})
1034    }
1035}
1036
1037#[derive(Clone, Debug, Serialize, Deserialize)]
1038#[serde(rename_all = "camelCase")]
1039pub struct GetBlockDagInfoResponse {
1040    pub network: RpcNetworkId,
1041    pub block_count: u64,
1042    pub header_count: u64,
1043    pub tip_hashes: Vec<RpcHash>,
1044    pub difficulty: f64,
1045    pub past_median_time: u64, pub virtual_parent_hashes: Vec<RpcHash>,
1047    pub pruning_point_hash: RpcHash,
1048    pub virtual_daa_score: u64,
1049    pub sink: RpcHash,
1050}
1051
1052impl GetBlockDagInfoResponse {
1053    pub fn new(
1054        network: RpcNetworkId,
1055        block_count: u64,
1056        header_count: u64,
1057        tip_hashes: Vec<RpcHash>,
1058        difficulty: f64,
1059        past_median_time: u64,
1060        virtual_parent_hashes: Vec<RpcHash>,
1061        pruning_point_hash: RpcHash,
1062        virtual_daa_score: u64,
1063        sink: RpcHash,
1064    ) -> Self {
1065        Self {
1066            network,
1067            block_count,
1068            header_count,
1069            tip_hashes,
1070            difficulty,
1071            past_median_time,
1072            virtual_parent_hashes,
1073            pruning_point_hash,
1074            virtual_daa_score,
1075            sink,
1076        }
1077    }
1078}
1079
1080impl Serializer for GetBlockDagInfoResponse {
1081    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1082        store!(u16, &1, writer)?;
1083        store!(RpcNetworkId, &self.network, writer)?;
1084        store!(u64, &self.block_count, writer)?;
1085        store!(u64, &self.header_count, writer)?;
1086        store!(Vec<RpcHash>, &self.tip_hashes, writer)?;
1087        store!(f64, &self.difficulty, writer)?;
1088        store!(u64, &self.past_median_time, writer)?;
1089        store!(Vec<RpcHash>, &self.virtual_parent_hashes, writer)?;
1090        store!(RpcHash, &self.pruning_point_hash, writer)?;
1091        store!(u64, &self.virtual_daa_score, writer)?;
1092        store!(RpcHash, &self.sink, writer)?;
1093
1094        Ok(())
1095    }
1096}
1097
1098impl Deserializer for GetBlockDagInfoResponse {
1099    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1100        let _version = load!(u16, reader)?;
1101        let network = load!(RpcNetworkId, reader)?;
1102        let block_count = load!(u64, reader)?;
1103        let header_count = load!(u64, reader)?;
1104        let tip_hashes = load!(Vec<RpcHash>, reader)?;
1105        let difficulty = load!(f64, reader)?;
1106        let past_median_time = load!(u64, reader)?;
1107        let virtual_parent_hashes = load!(Vec<RpcHash>, reader)?;
1108        let pruning_point_hash = load!(RpcHash, reader)?;
1109        let virtual_daa_score = load!(u64, reader)?;
1110        let sink = load!(RpcHash, reader)?;
1111
1112        Ok(Self {
1113            network,
1114            block_count,
1115            header_count,
1116            tip_hashes,
1117            difficulty,
1118            past_median_time,
1119            virtual_parent_hashes,
1120            pruning_point_hash,
1121            virtual_daa_score,
1122            sink,
1123        })
1124    }
1125}
1126
1127#[derive(Clone, Debug, Serialize, Deserialize)]
1128#[serde(rename_all = "camelCase")]
1129pub struct ResolveFinalityConflictRequest {
1130    pub finality_block_hash: RpcHash,
1131}
1132
1133impl ResolveFinalityConflictRequest {
1134    pub fn new(finality_block_hash: RpcHash) -> Self {
1135        Self { finality_block_hash }
1136    }
1137}
1138
1139impl Serializer for ResolveFinalityConflictRequest {
1140    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1141        store!(u16, &1, writer)?;
1142        store!(RpcHash, &self.finality_block_hash, writer)?;
1143
1144        Ok(())
1145    }
1146}
1147
1148impl Deserializer for ResolveFinalityConflictRequest {
1149    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1150        let _version = load!(u16, reader)?;
1151        let finality_block_hash = load!(RpcHash, reader)?;
1152
1153        Ok(Self { finality_block_hash })
1154    }
1155}
1156
1157#[derive(Clone, Debug, Serialize, Deserialize)]
1158#[serde(rename_all = "camelCase")]
1159pub struct ResolveFinalityConflictResponse {}
1160
1161impl Serializer for ResolveFinalityConflictResponse {
1162    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1163        store!(u16, &1, writer)?;
1164        Ok(())
1165    }
1166}
1167
1168impl Deserializer for ResolveFinalityConflictResponse {
1169    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1170        let _version = load!(u16, reader)?;
1171        Ok(Self {})
1172    }
1173}
1174
1175#[derive(Clone, Debug, Serialize, Deserialize)]
1176#[serde(rename_all = "camelCase")]
1177pub struct ShutdownRequest {}
1178
1179impl Serializer for ShutdownRequest {
1180    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1181        store!(u16, &1, writer)?;
1182        Ok(())
1183    }
1184}
1185
1186impl Deserializer for ShutdownRequest {
1187    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1188        let _version = load!(u16, reader)?;
1189        Ok(Self {})
1190    }
1191}
1192
1193#[derive(Clone, Debug, Serialize, Deserialize)]
1194#[serde(rename_all = "camelCase")]
1195pub struct ShutdownResponse {}
1196
1197impl Serializer for ShutdownResponse {
1198    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1199        store!(u16, &1, writer)?;
1200        Ok(())
1201    }
1202}
1203
1204impl Deserializer for ShutdownResponse {
1205    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1206        let _version = load!(u16, reader)?;
1207        Ok(Self {})
1208    }
1209}
1210
1211#[derive(Clone, Debug, Serialize, Deserialize)]
1212#[serde(rename_all = "camelCase")]
1213pub struct GetHeadersRequest {
1214    pub start_hash: RpcHash,
1215    pub limit: u64,
1216    pub is_ascending: bool,
1217}
1218
1219impl GetHeadersRequest {
1220    pub fn new(start_hash: RpcHash, limit: u64, is_ascending: bool) -> Self {
1221        Self { start_hash, limit, is_ascending }
1222    }
1223}
1224
1225impl Serializer for GetHeadersRequest {
1226    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1227        store!(u16, &1, writer)?;
1228        store!(RpcHash, &self.start_hash, writer)?;
1229        store!(u64, &self.limit, writer)?;
1230        store!(bool, &self.is_ascending, writer)?;
1231
1232        Ok(())
1233    }
1234}
1235
1236impl Deserializer for GetHeadersRequest {
1237    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1238        let _version = load!(u16, reader)?;
1239        let start_hash = load!(RpcHash, reader)?;
1240        let limit = load!(u64, reader)?;
1241        let is_ascending = load!(bool, reader)?;
1242
1243        Ok(Self { start_hash, limit, is_ascending })
1244    }
1245}
1246
1247#[derive(Clone, Debug, Serialize, Deserialize)]
1248#[serde(rename_all = "camelCase")]
1249pub struct GetHeadersResponse {
1250    pub headers: Vec<RpcHeader>,
1251}
1252
1253impl GetHeadersResponse {
1254    pub fn new(headers: Vec<RpcHeader>) -> Self {
1255        Self { headers }
1256    }
1257}
1258
1259impl Serializer for GetHeadersResponse {
1260    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1261        store!(u16, &1, writer)?;
1262        store!(Vec<RpcHeader>, &self.headers, writer)?;
1263
1264        Ok(())
1265    }
1266}
1267
1268impl Deserializer for GetHeadersResponse {
1269    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1270        let _version = load!(u16, reader)?;
1271        let headers = load!(Vec<RpcHeader>, reader)?;
1272
1273        Ok(Self { headers })
1274    }
1275}
1276
1277#[derive(Clone, Debug, Serialize, Deserialize)]
1278#[serde(rename_all = "camelCase")]
1279pub struct GetBalanceByAddressRequest {
1280    pub address: RpcAddress,
1281}
1282
1283impl GetBalanceByAddressRequest {
1284    pub fn new(address: RpcAddress) -> Self {
1285        Self { address }
1286    }
1287}
1288
1289impl Serializer for GetBalanceByAddressRequest {
1290    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1291        store!(u16, &1, writer)?;
1292        store!(RpcAddress, &self.address, writer)?;
1293
1294        Ok(())
1295    }
1296}
1297
1298impl Deserializer for GetBalanceByAddressRequest {
1299    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1300        let _version = load!(u16, reader)?;
1301        let address = load!(RpcAddress, reader)?;
1302
1303        Ok(Self { address })
1304    }
1305}
1306
1307#[derive(Clone, Debug, Serialize, Deserialize)]
1308#[serde(rename_all = "camelCase")]
1309pub struct GetBalanceByAddressResponse {
1310    pub balance: u64,
1311}
1312
1313impl GetBalanceByAddressResponse {
1314    pub fn new(balance: u64) -> Self {
1315        Self { balance }
1316    }
1317}
1318
1319impl Serializer for GetBalanceByAddressResponse {
1320    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1321        store!(u16, &1, writer)?;
1322        store!(u64, &self.balance, writer)?;
1323
1324        Ok(())
1325    }
1326}
1327
1328impl Deserializer for GetBalanceByAddressResponse {
1329    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1330        let _version = load!(u16, reader)?;
1331        let balance = load!(u64, reader)?;
1332
1333        Ok(Self { balance })
1334    }
1335}
1336
1337#[derive(Clone, Debug, Serialize, Deserialize)]
1338#[serde(rename_all = "camelCase")]
1339pub struct GetBalancesByAddressesRequest {
1340    pub addresses: Vec<RpcAddress>,
1341}
1342
1343impl GetBalancesByAddressesRequest {
1344    pub fn new(addresses: Vec<RpcAddress>) -> Self {
1345        Self { addresses }
1346    }
1347}
1348
1349impl Serializer for GetBalancesByAddressesRequest {
1350    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1351        store!(u16, &1, writer)?;
1352        store!(Vec<RpcAddress>, &self.addresses, writer)?;
1353
1354        Ok(())
1355    }
1356}
1357
1358impl Deserializer for GetBalancesByAddressesRequest {
1359    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1360        let _version = load!(u16, reader)?;
1361        let addresses = load!(Vec<RpcAddress>, reader)?;
1362
1363        Ok(Self { addresses })
1364    }
1365}
1366
1367#[derive(Clone, Debug, Serialize, Deserialize)]
1368#[serde(rename_all = "camelCase")]
1369pub struct GetBalancesByAddressesResponse {
1370    pub entries: Vec<RpcBalancesByAddressesEntry>,
1371}
1372
1373impl GetBalancesByAddressesResponse {
1374    pub fn new(entries: Vec<RpcBalancesByAddressesEntry>) -> Self {
1375        Self { entries }
1376    }
1377}
1378
1379impl Serializer for GetBalancesByAddressesResponse {
1380    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1381        store!(u16, &1, writer)?;
1382        serialize!(Vec<RpcBalancesByAddressesEntry>, &self.entries, writer)?;
1383
1384        Ok(())
1385    }
1386}
1387
1388impl Deserializer for GetBalancesByAddressesResponse {
1389    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1390        let _version = load!(u16, reader)?;
1391        let entries = deserialize!(Vec<RpcBalancesByAddressesEntry>, reader)?;
1392
1393        Ok(Self { entries })
1394    }
1395}
1396
1397#[derive(Clone, Debug, Serialize, Deserialize)]
1398#[serde(rename_all = "camelCase")]
1399pub struct GetSinkBlueScoreRequest {}
1400
1401impl Serializer for GetSinkBlueScoreRequest {
1402    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1403        store!(u16, &1, writer)?;
1404        Ok(())
1405    }
1406}
1407
1408impl Deserializer for GetSinkBlueScoreRequest {
1409    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1410        let _version = load!(u16, reader)?;
1411        Ok(Self {})
1412    }
1413}
1414
1415#[derive(Clone, Debug, Serialize, Deserialize)]
1416#[serde(rename_all = "camelCase")]
1417pub struct GetSinkBlueScoreResponse {
1418    pub blue_score: u64,
1419}
1420
1421impl GetSinkBlueScoreResponse {
1422    pub fn new(blue_score: u64) -> Self {
1423        Self { blue_score }
1424    }
1425}
1426
1427impl Serializer for GetSinkBlueScoreResponse {
1428    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1429        store!(u16, &1, writer)?;
1430        store!(u64, &self.blue_score, writer)?;
1431
1432        Ok(())
1433    }
1434}
1435
1436impl Deserializer for GetSinkBlueScoreResponse {
1437    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1438        let _version = load!(u16, reader)?;
1439        let blue_score = load!(u64, reader)?;
1440
1441        Ok(Self { blue_score })
1442    }
1443}
1444
1445#[derive(Clone, Debug, Serialize, Deserialize)]
1446#[serde(rename_all = "camelCase")]
1447pub struct GetUtxosByAddressesRequest {
1448    pub addresses: Vec<RpcAddress>,
1449}
1450
1451impl GetUtxosByAddressesRequest {
1452    pub fn new(addresses: Vec<RpcAddress>) -> Self {
1453        Self { addresses }
1454    }
1455}
1456
1457impl Serializer for GetUtxosByAddressesRequest {
1458    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1459        store!(u16, &1, writer)?;
1460        store!(Vec<RpcAddress>, &self.addresses, writer)?;
1461
1462        Ok(())
1463    }
1464}
1465
1466impl Deserializer for GetUtxosByAddressesRequest {
1467    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1468        let _version = load!(u16, reader)?;
1469        let addresses = load!(Vec<RpcAddress>, reader)?;
1470
1471        Ok(Self { addresses })
1472    }
1473}
1474
1475#[derive(Clone, Debug, Serialize, Deserialize)]
1476#[serde(rename_all = "camelCase")]
1477pub struct GetUtxosByAddressesResponse {
1478    pub entries: Vec<RpcUtxosByAddressesEntry>,
1479}
1480
1481impl GetUtxosByAddressesResponse {
1482    pub fn new(entries: Vec<RpcUtxosByAddressesEntry>) -> Self {
1483        Self { entries }
1484    }
1485}
1486
1487impl Serializer for GetUtxosByAddressesResponse {
1488    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1489        store!(u16, &1, writer)?;
1490        serialize!(Vec<RpcUtxosByAddressesEntry>, &self.entries, writer)?;
1491
1492        Ok(())
1493    }
1494}
1495
1496impl Deserializer for GetUtxosByAddressesResponse {
1497    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1498        let _version = load!(u16, reader)?;
1499        let entries = deserialize!(Vec<RpcUtxosByAddressesEntry>, reader)?;
1500
1501        Ok(Self { entries })
1502    }
1503}
1504
1505#[derive(Clone, Debug, Serialize, Deserialize)]
1506#[serde(rename_all = "camelCase")]
1507pub struct BanRequest {
1508    pub ip: RpcIpAddress,
1509}
1510
1511impl BanRequest {
1512    pub fn new(ip: RpcIpAddress) -> Self {
1513        Self { ip }
1514    }
1515}
1516
1517impl Serializer for BanRequest {
1518    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1519        store!(u16, &1, writer)?;
1520        store!(RpcIpAddress, &self.ip, writer)?;
1521
1522        Ok(())
1523    }
1524}
1525
1526impl Deserializer for BanRequest {
1527    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1528        let _version = load!(u16, reader)?;
1529        let ip = load!(RpcIpAddress, reader)?;
1530
1531        Ok(Self { ip })
1532    }
1533}
1534
1535#[derive(Clone, Debug, Serialize, Deserialize)]
1536#[serde(rename_all = "camelCase")]
1537pub struct BanResponse {}
1538
1539impl Serializer for BanResponse {
1540    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1541        store!(u16, &1, writer)?;
1542        Ok(())
1543    }
1544}
1545
1546impl Deserializer for BanResponse {
1547    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1548        let _version = load!(u16, reader)?;
1549        Ok(Self {})
1550    }
1551}
1552
1553#[derive(Clone, Debug, Serialize, Deserialize)]
1554#[serde(rename_all = "camelCase")]
1555pub struct UnbanRequest {
1556    pub ip: RpcIpAddress,
1557}
1558
1559impl UnbanRequest {
1560    pub fn new(ip: RpcIpAddress) -> Self {
1561        Self { ip }
1562    }
1563}
1564
1565impl Serializer for UnbanRequest {
1566    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1567        store!(u16, &1, writer)?;
1568        store!(RpcIpAddress, &self.ip, writer)?;
1569
1570        Ok(())
1571    }
1572}
1573
1574impl Deserializer for UnbanRequest {
1575    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1576        let _version = load!(u16, reader)?;
1577        let ip = load!(RpcIpAddress, reader)?;
1578
1579        Ok(Self { ip })
1580    }
1581}
1582
1583#[derive(Clone, Debug, Serialize, Deserialize)]
1584#[serde(rename_all = "camelCase")]
1585pub struct UnbanResponse {}
1586
1587impl Serializer for UnbanResponse {
1588    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1589        store!(u16, &1, writer)?;
1590        Ok(())
1591    }
1592}
1593
1594impl Deserializer for UnbanResponse {
1595    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1596        let _version = load!(u16, reader)?;
1597        Ok(Self {})
1598    }
1599}
1600
1601#[derive(Clone, Debug, Serialize, Deserialize)]
1602#[serde(rename_all = "camelCase")]
1603pub struct EstimateNetworkHashesPerSecondRequest {
1604    pub window_size: u32,
1605    pub start_hash: Option<RpcHash>,
1606}
1607
1608impl EstimateNetworkHashesPerSecondRequest {
1609    pub fn new(window_size: u32, start_hash: Option<RpcHash>) -> Self {
1610        Self { window_size, start_hash }
1611    }
1612}
1613
1614impl Serializer for EstimateNetworkHashesPerSecondRequest {
1615    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1616        store!(u16, &1, writer)?;
1617        store!(u32, &self.window_size, writer)?;
1618        store!(Option<RpcHash>, &self.start_hash, writer)?;
1619
1620        Ok(())
1621    }
1622}
1623
1624impl Deserializer for EstimateNetworkHashesPerSecondRequest {
1625    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1626        let _version = load!(u16, reader)?;
1627        let window_size = load!(u32, reader)?;
1628        let start_hash = load!(Option<RpcHash>, reader)?;
1629
1630        Ok(Self { window_size, start_hash })
1631    }
1632}
1633
1634#[derive(Clone, Debug, Serialize, Deserialize)]
1635#[serde(rename_all = "camelCase")]
1636pub struct EstimateNetworkHashesPerSecondResponse {
1637    pub network_hashes_per_second: u64,
1638}
1639
1640impl EstimateNetworkHashesPerSecondResponse {
1641    pub fn new(network_hashes_per_second: u64) -> Self {
1642        Self { network_hashes_per_second }
1643    }
1644}
1645
1646impl Serializer for EstimateNetworkHashesPerSecondResponse {
1647    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1648        store!(u16, &1, writer)?;
1649        store!(u64, &self.network_hashes_per_second, writer)?;
1650
1651        Ok(())
1652    }
1653}
1654
1655impl Deserializer for EstimateNetworkHashesPerSecondResponse {
1656    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1657        let _version = load!(u16, reader)?;
1658        let network_hashes_per_second = load!(u64, reader)?;
1659
1660        Ok(Self { network_hashes_per_second })
1661    }
1662}
1663
1664#[derive(Clone, Debug, Serialize, Deserialize)]
1665#[serde(rename_all = "camelCase")]
1666pub struct GetMempoolEntriesByAddressesRequest {
1667    pub addresses: Vec<RpcAddress>,
1668    pub include_orphan_pool: bool,
1669    pub filter_transaction_pool: bool,
1671}
1672
1673impl GetMempoolEntriesByAddressesRequest {
1674    pub fn new(addresses: Vec<RpcAddress>, include_orphan_pool: bool, filter_transaction_pool: bool) -> Self {
1675        Self { addresses, include_orphan_pool, filter_transaction_pool }
1676    }
1677}
1678
1679impl Serializer for GetMempoolEntriesByAddressesRequest {
1680    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1681        store!(u16, &1, writer)?;
1682        store!(Vec<RpcAddress>, &self.addresses, writer)?;
1683        store!(bool, &self.include_orphan_pool, writer)?;
1684        store!(bool, &self.filter_transaction_pool, writer)?;
1685
1686        Ok(())
1687    }
1688}
1689
1690impl Deserializer for GetMempoolEntriesByAddressesRequest {
1691    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1692        let _version = load!(u16, reader)?;
1693        let addresses = load!(Vec<RpcAddress>, reader)?;
1694        let include_orphan_pool = load!(bool, reader)?;
1695        let filter_transaction_pool = load!(bool, reader)?;
1696
1697        Ok(Self { addresses, include_orphan_pool, filter_transaction_pool })
1698    }
1699}
1700
1701#[derive(Clone, Debug, Serialize, Deserialize)]
1702#[serde(rename_all = "camelCase")]
1703pub struct GetMempoolEntriesByAddressesResponse {
1704    pub entries: Vec<RpcMempoolEntryByAddress>,
1705}
1706
1707impl GetMempoolEntriesByAddressesResponse {
1708    pub fn new(entries: Vec<RpcMempoolEntryByAddress>) -> Self {
1709        Self { entries }
1710    }
1711}
1712
1713impl Serializer for GetMempoolEntriesByAddressesResponse {
1714    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1715        store!(u16, &1, writer)?;
1716        serialize!(Vec<RpcMempoolEntryByAddress>, &self.entries, writer)?;
1717
1718        Ok(())
1719    }
1720}
1721
1722impl Deserializer for GetMempoolEntriesByAddressesResponse {
1723    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1724        let _version = load!(u16, reader)?;
1725        let entries = deserialize!(Vec<RpcMempoolEntryByAddress>, reader)?;
1726
1727        Ok(Self { entries })
1728    }
1729}
1730
1731#[derive(Clone, Debug, Serialize, Deserialize)]
1732#[serde(rename_all = "camelCase")]
1733pub struct GetCoinSupplyRequest {}
1734
1735impl Serializer for GetCoinSupplyRequest {
1736    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1737        store!(u16, &1, writer)?;
1738        Ok(())
1739    }
1740}
1741
1742impl Deserializer for GetCoinSupplyRequest {
1743    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1744        let _version = load!(u16, reader)?;
1745        Ok(Self {})
1746    }
1747}
1748
1749#[derive(Clone, Debug, Serialize, Deserialize)]
1750#[serde(rename_all = "camelCase")]
1751pub struct GetCoinSupplyResponse {
1752    pub max_sompi: u64,
1753    pub circulating_sompi: u64,
1754}
1755
1756impl GetCoinSupplyResponse {
1757    pub fn new(max_sompi: u64, circulating_sompi: u64) -> Self {
1758        Self { max_sompi, circulating_sompi }
1759    }
1760}
1761
1762impl Serializer for GetCoinSupplyResponse {
1763    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1764        store!(u16, &1, writer)?;
1765        store!(u64, &self.max_sompi, writer)?;
1766        store!(u64, &self.circulating_sompi, writer)?;
1767
1768        Ok(())
1769    }
1770}
1771
1772impl Deserializer for GetCoinSupplyResponse {
1773    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1774        let _version = load!(u16, reader)?;
1775        let max_sompi = load!(u64, reader)?;
1776        let circulating_sompi = load!(u64, reader)?;
1777
1778        Ok(Self { max_sompi, circulating_sompi })
1779    }
1780}
1781
1782#[derive(Clone, Debug, Serialize, Deserialize)]
1783#[serde(rename_all = "camelCase")]
1784pub struct PingRequest {}
1785
1786impl Serializer for PingRequest {
1787    fn serialize<W: std::io::Write>(&self, _writer: &mut W) -> std::io::Result<()> {
1788        Ok(())
1789    }
1790}
1791
1792impl Deserializer for PingRequest {
1793    fn deserialize<R: std::io::Read>(_reader: &mut R) -> std::io::Result<Self> {
1794        Ok(Self {})
1795    }
1796}
1797
1798#[derive(Clone, Debug, Serialize, Deserialize)]
1799#[serde(rename_all = "camelCase")]
1800pub struct PingResponse {}
1801
1802impl Serializer for PingResponse {
1803    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1804        store!(u8, &1, writer)?;
1805        Ok(())
1806    }
1807}
1808
1809impl Deserializer for PingResponse {
1810    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1811        let _version = load!(u8, reader)?;
1812        Ok(Self {})
1813    }
1814}
1815
1816#[derive(Clone, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
1817#[serde(rename_all = "camelCase")]
1818pub struct ConnectionsProfileData {
1819    pub cpu_usage: f32,
1820    pub memory_usage: u64,
1821}
1822
1823#[derive(Clone, Debug, Serialize, Deserialize)]
1824#[serde(rename_all = "camelCase")]
1825pub struct GetConnectionsRequest {
1826    pub include_profile_data: bool,
1827}
1828
1829impl Serializer for GetConnectionsRequest {
1830    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1831        store!(u8, &1, writer)?;
1832        store!(bool, &self.include_profile_data, writer)?;
1833        Ok(())
1834    }
1835}
1836
1837impl Deserializer for GetConnectionsRequest {
1838    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1839        let _version = load!(u8, reader)?;
1840        let include_profile_data = load!(bool, reader)?;
1841        Ok(Self { include_profile_data })
1842    }
1843}
1844
1845#[derive(Clone, Debug, Serialize, Deserialize)]
1846#[serde(rename_all = "camelCase")]
1847pub struct GetConnectionsResponse {
1848    pub clients: u32,
1849    pub peers: u16,
1850    pub profile_data: Option<ConnectionsProfileData>,
1851}
1852
1853impl Serializer for GetConnectionsResponse {
1854    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1855        store!(u16, &1, writer)?;
1856        store!(u32, &self.clients, writer)?;
1857        store!(u16, &self.peers, writer)?;
1858        store!(Option<ConnectionsProfileData>, &self.profile_data, writer)?;
1859        Ok(())
1860    }
1861}
1862
1863impl Deserializer for GetConnectionsResponse {
1864    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1865        let _version = load!(u16, reader)?;
1866        let clients = load!(u32, reader)?;
1867        let peers = load!(u16, reader)?;
1868        let extra = load!(Option<ConnectionsProfileData>, reader)?;
1869        Ok(Self { clients, peers, profile_data: extra })
1870    }
1871}
1872
1873#[derive(Clone, Debug, Serialize, Deserialize)]
1874#[serde(rename_all = "camelCase")]
1875pub struct GetSystemInfoRequest {}
1876
1877impl Serializer for GetSystemInfoRequest {
1878    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1879        store!(u16, &1, writer)?;
1880
1881        Ok(())
1882    }
1883}
1884
1885impl Deserializer for GetSystemInfoRequest {
1886    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1887        let _version = load!(u16, reader)?;
1888
1889        Ok(Self {})
1890    }
1891}
1892
1893#[derive(Clone, Serialize, Deserialize)]
1894#[serde(rename_all = "camelCase")]
1895pub struct GetSystemInfoResponse {
1896    pub version: String,
1897    pub system_id: Option<Vec<u8>>,
1898    pub git_hash: Option<Vec<u8>>,
1899    pub cpu_physical_cores: u16,
1900    pub total_memory: u64,
1901    pub fd_limit: u32,
1902    pub proxy_socket_limit_per_cpu_core: Option<u32>,
1903}
1904
1905impl std::fmt::Debug for GetSystemInfoResponse {
1906    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1907        f.debug_struct("GetSystemInfoResponse")
1908            .field("version", &self.version)
1909            .field("system_id", &self.system_id.as_ref().map(|id| id.to_hex()))
1910            .field("git_hash", &self.git_hash.as_ref().map(|hash| hash.to_hex()))
1911            .field("cpu_physical_cores", &self.cpu_physical_cores)
1912            .field("total_memory", &self.total_memory)
1913            .field("fd_limit", &self.fd_limit)
1914            .field("proxy_socket_limit_per_cpu_core", &self.proxy_socket_limit_per_cpu_core)
1915            .finish()
1916    }
1917}
1918
1919impl Serializer for GetSystemInfoResponse {
1920    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1921        store!(u16, &2, writer)?;
1922        store!(String, &self.version, writer)?;
1923        store!(Option<Vec<u8>>, &self.system_id, writer)?;
1924        store!(Option<Vec<u8>>, &self.git_hash, writer)?;
1925        store!(u16, &self.cpu_physical_cores, writer)?;
1926        store!(u64, &self.total_memory, writer)?;
1927        store!(u32, &self.fd_limit, writer)?;
1928        store!(Option<u32>, &self.proxy_socket_limit_per_cpu_core, writer)?;
1929
1930        Ok(())
1931    }
1932}
1933
1934impl Deserializer for GetSystemInfoResponse {
1935    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1936        let payload_version = load!(u16, reader)?;
1937        let version = load!(String, reader)?;
1938        let system_id = load!(Option<Vec<u8>>, reader)?;
1939        let git_hash = load!(Option<Vec<u8>>, reader)?;
1940        let cpu_physical_cores = load!(u16, reader)?;
1941        let total_memory = load!(u64, reader)?;
1942        let fd_limit = load!(u32, reader)?;
1943
1944        let proxy_socket_limit_per_cpu_core = if payload_version > 1 { load!(Option<u32>, reader)? } else { None };
1945
1946        Ok(Self { version, system_id, git_hash, cpu_physical_cores, total_memory, fd_limit, proxy_socket_limit_per_cpu_core })
1947    }
1948}
1949
1950#[derive(Clone, Debug, Serialize, Deserialize)]
1951#[serde(rename_all = "camelCase")]
1952pub struct GetMetricsRequest {
1953    pub process_metrics: bool,
1954    pub connection_metrics: bool,
1955    pub bandwidth_metrics: bool,
1956    pub consensus_metrics: bool,
1957    pub storage_metrics: bool,
1958    pub custom_metrics: bool,
1959}
1960
1961impl Serializer for GetMetricsRequest {
1962    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
1963        store!(u16, &1, writer)?;
1964        store!(bool, &self.process_metrics, writer)?;
1965        store!(bool, &self.connection_metrics, writer)?;
1966        store!(bool, &self.bandwidth_metrics, writer)?;
1967        store!(bool, &self.consensus_metrics, writer)?;
1968        store!(bool, &self.storage_metrics, writer)?;
1969        store!(bool, &self.custom_metrics, writer)?;
1970
1971        Ok(())
1972    }
1973}
1974
1975impl Deserializer for GetMetricsRequest {
1976    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
1977        let _version = load!(u16, reader)?;
1978        let process_metrics = load!(bool, reader)?;
1979        let connection_metrics = load!(bool, reader)?;
1980        let bandwidth_metrics = load!(bool, reader)?;
1981        let consensus_metrics = load!(bool, reader)?;
1982        let storage_metrics = load!(bool, reader)?;
1983        let custom_metrics = load!(bool, reader)?;
1984
1985        Ok(Self { process_metrics, connection_metrics, bandwidth_metrics, consensus_metrics, storage_metrics, custom_metrics })
1986    }
1987}
1988
1989#[derive(Default, Clone, Debug, Serialize, Deserialize)]
1990#[serde(rename_all = "camelCase")]
1991pub struct ProcessMetrics {
1992    pub resident_set_size: u64,
1993    pub virtual_memory_size: u64,
1994    pub core_num: u32,
1995    pub cpu_usage: f32,
1996    pub fd_num: u32,
1997    pub disk_io_read_bytes: u64,
1998    pub disk_io_write_bytes: u64,
1999    pub disk_io_read_per_sec: f32,
2000    pub disk_io_write_per_sec: f32,
2001}
2002
2003impl Serializer for ProcessMetrics {
2004    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2005        store!(u16, &1, writer)?;
2006        store!(u64, &self.resident_set_size, writer)?;
2007        store!(u64, &self.virtual_memory_size, writer)?;
2008        store!(u32, &self.core_num, writer)?;
2009        store!(f32, &self.cpu_usage, writer)?;
2010        store!(u32, &self.fd_num, writer)?;
2011        store!(u64, &self.disk_io_read_bytes, writer)?;
2012        store!(u64, &self.disk_io_write_bytes, writer)?;
2013        store!(f32, &self.disk_io_read_per_sec, writer)?;
2014        store!(f32, &self.disk_io_write_per_sec, writer)?;
2015
2016        Ok(())
2017    }
2018}
2019
2020impl Deserializer for ProcessMetrics {
2021    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2022        let _version = load!(u16, reader)?;
2023        let resident_set_size = load!(u64, reader)?;
2024        let virtual_memory_size = load!(u64, reader)?;
2025        let core_num = load!(u32, reader)?;
2026        let cpu_usage = load!(f32, reader)?;
2027        let fd_num = load!(u32, reader)?;
2028        let disk_io_read_bytes = load!(u64, reader)?;
2029        let disk_io_write_bytes = load!(u64, reader)?;
2030        let disk_io_read_per_sec = load!(f32, reader)?;
2031        let disk_io_write_per_sec = load!(f32, reader)?;
2032
2033        Ok(Self {
2034            resident_set_size,
2035            virtual_memory_size,
2036            core_num,
2037            cpu_usage,
2038            fd_num,
2039            disk_io_read_bytes,
2040            disk_io_write_bytes,
2041            disk_io_read_per_sec,
2042            disk_io_write_per_sec,
2043        })
2044    }
2045}
2046
2047#[derive(Default, Clone, Debug, Serialize, Deserialize)]
2048#[serde(rename_all = "camelCase")]
2049pub struct ConnectionMetrics {
2050    pub borsh_live_connections: u32,
2051    pub borsh_connection_attempts: u64,
2052    pub borsh_handshake_failures: u64,
2053    pub json_live_connections: u32,
2054    pub json_connection_attempts: u64,
2055    pub json_handshake_failures: u64,
2056
2057    pub active_peers: u32,
2058}
2059
2060impl Serializer for ConnectionMetrics {
2061    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2062        store!(u16, &1, writer)?;
2063        store!(u32, &self.borsh_live_connections, writer)?;
2064        store!(u64, &self.borsh_connection_attempts, writer)?;
2065        store!(u64, &self.borsh_handshake_failures, writer)?;
2066        store!(u32, &self.json_live_connections, writer)?;
2067        store!(u64, &self.json_connection_attempts, writer)?;
2068        store!(u64, &self.json_handshake_failures, writer)?;
2069        store!(u32, &self.active_peers, writer)?;
2070
2071        Ok(())
2072    }
2073}
2074
2075impl Deserializer for ConnectionMetrics {
2076    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2077        let _version = load!(u16, reader)?;
2078        let borsh_live_connections = load!(u32, reader)?;
2079        let borsh_connection_attempts = load!(u64, reader)?;
2080        let borsh_handshake_failures = load!(u64, reader)?;
2081        let json_live_connections = load!(u32, reader)?;
2082        let json_connection_attempts = load!(u64, reader)?;
2083        let json_handshake_failures = load!(u64, reader)?;
2084        let active_peers = load!(u32, reader)?;
2085
2086        Ok(Self {
2087            borsh_live_connections,
2088            borsh_connection_attempts,
2089            borsh_handshake_failures,
2090            json_live_connections,
2091            json_connection_attempts,
2092            json_handshake_failures,
2093            active_peers,
2094        })
2095    }
2096}
2097
2098#[derive(Default, Clone, Debug, Serialize, Deserialize)]
2099#[serde(rename_all = "camelCase")]
2100pub struct BandwidthMetrics {
2101    pub borsh_bytes_tx: u64,
2102    pub borsh_bytes_rx: u64,
2103    pub json_bytes_tx: u64,
2104    pub json_bytes_rx: u64,
2105    pub p2p_bytes_tx: u64,
2106    pub p2p_bytes_rx: u64,
2107    pub grpc_bytes_tx: u64,
2108    pub grpc_bytes_rx: u64,
2109}
2110
2111impl Serializer for BandwidthMetrics {
2112    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2113        store!(u16, &1, writer)?;
2114        store!(u64, &self.borsh_bytes_tx, writer)?;
2115        store!(u64, &self.borsh_bytes_rx, writer)?;
2116        store!(u64, &self.json_bytes_tx, writer)?;
2117        store!(u64, &self.json_bytes_rx, writer)?;
2118        store!(u64, &self.p2p_bytes_tx, writer)?;
2119        store!(u64, &self.p2p_bytes_rx, writer)?;
2120        store!(u64, &self.grpc_bytes_tx, writer)?;
2121        store!(u64, &self.grpc_bytes_rx, writer)?;
2122
2123        Ok(())
2124    }
2125}
2126
2127impl Deserializer for BandwidthMetrics {
2128    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2129        let _version = load!(u16, reader)?;
2130        let borsh_bytes_tx = load!(u64, reader)?;
2131        let borsh_bytes_rx = load!(u64, reader)?;
2132        let json_bytes_tx = load!(u64, reader)?;
2133        let json_bytes_rx = load!(u64, reader)?;
2134        let p2p_bytes_tx = load!(u64, reader)?;
2135        let p2p_bytes_rx = load!(u64, reader)?;
2136        let grpc_bytes_tx = load!(u64, reader)?;
2137        let grpc_bytes_rx = load!(u64, reader)?;
2138
2139        Ok(Self {
2140            borsh_bytes_tx,
2141            borsh_bytes_rx,
2142            json_bytes_tx,
2143            json_bytes_rx,
2144            p2p_bytes_tx,
2145            p2p_bytes_rx,
2146            grpc_bytes_tx,
2147            grpc_bytes_rx,
2148        })
2149    }
2150}
2151
2152#[derive(Default, Clone, Debug, Serialize, Deserialize)]
2153#[serde(rename_all = "camelCase")]
2154pub struct ConsensusMetrics {
2155    pub node_blocks_submitted_count: u64,
2156    pub node_headers_processed_count: u64,
2157    pub node_dependencies_processed_count: u64,
2158    pub node_bodies_processed_count: u64,
2159    pub node_transactions_processed_count: u64,
2160    pub node_chain_blocks_processed_count: u64,
2161    pub node_mass_processed_count: u64,
2162
2163    pub node_database_blocks_count: u64,
2164    pub node_database_headers_count: u64,
2165
2166    pub network_mempool_size: u64,
2167    pub network_tip_hashes_count: u32,
2168    pub network_difficulty: f64,
2169    pub network_past_median_time: u64,
2170    pub network_virtual_parent_hashes_count: u32,
2171    pub network_virtual_daa_score: u64,
2172}
2173
2174impl Serializer for ConsensusMetrics {
2175    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2176        store!(u16, &1, writer)?;
2177        store!(u64, &self.node_blocks_submitted_count, writer)?;
2178        store!(u64, &self.node_headers_processed_count, writer)?;
2179        store!(u64, &self.node_dependencies_processed_count, writer)?;
2180        store!(u64, &self.node_bodies_processed_count, writer)?;
2181        store!(u64, &self.node_transactions_processed_count, writer)?;
2182        store!(u64, &self.node_chain_blocks_processed_count, writer)?;
2183        store!(u64, &self.node_mass_processed_count, writer)?;
2184        store!(u64, &self.node_database_blocks_count, writer)?;
2185        store!(u64, &self.node_database_headers_count, writer)?;
2186        store!(u64, &self.network_mempool_size, writer)?;
2187        store!(u32, &self.network_tip_hashes_count, writer)?;
2188        store!(f64, &self.network_difficulty, writer)?;
2189        store!(u64, &self.network_past_median_time, writer)?;
2190        store!(u32, &self.network_virtual_parent_hashes_count, writer)?;
2191        store!(u64, &self.network_virtual_daa_score, writer)?;
2192
2193        Ok(())
2194    }
2195}
2196
2197impl Deserializer for ConsensusMetrics {
2198    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2199        let _version = load!(u16, reader)?;
2200        let node_blocks_submitted_count = load!(u64, reader)?;
2201        let node_headers_processed_count = load!(u64, reader)?;
2202        let node_dependencies_processed_count = load!(u64, reader)?;
2203        let node_bodies_processed_count = load!(u64, reader)?;
2204        let node_transactions_processed_count = load!(u64, reader)?;
2205        let node_chain_blocks_processed_count = load!(u64, reader)?;
2206        let node_mass_processed_count = load!(u64, reader)?;
2207        let node_database_blocks_count = load!(u64, reader)?;
2208        let node_database_headers_count = load!(u64, reader)?;
2209        let network_mempool_size = load!(u64, reader)?;
2210        let network_tip_hashes_count = load!(u32, reader)?;
2211        let network_difficulty = load!(f64, reader)?;
2212        let network_past_median_time = load!(u64, reader)?;
2213        let network_virtual_parent_hashes_count = load!(u32, reader)?;
2214        let network_virtual_daa_score = load!(u64, reader)?;
2215
2216        Ok(Self {
2217            node_blocks_submitted_count,
2218            node_headers_processed_count,
2219            node_dependencies_processed_count,
2220            node_bodies_processed_count,
2221            node_transactions_processed_count,
2222            node_chain_blocks_processed_count,
2223            node_mass_processed_count,
2224            node_database_blocks_count,
2225            node_database_headers_count,
2226            network_mempool_size,
2227            network_tip_hashes_count,
2228            network_difficulty,
2229            network_past_median_time,
2230            network_virtual_parent_hashes_count,
2231            network_virtual_daa_score,
2232        })
2233    }
2234}
2235
2236#[derive(Default, Clone, Debug, Serialize, Deserialize)]
2237#[serde(rename_all = "camelCase")]
2238pub struct StorageMetrics {
2239    pub storage_size_bytes: u64,
2240}
2241
2242impl Serializer for StorageMetrics {
2243    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2244        store!(u16, &1, writer)?;
2245        store!(u64, &self.storage_size_bytes, writer)?;
2246
2247        Ok(())
2248    }
2249}
2250
2251impl Deserializer for StorageMetrics {
2252    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2253        let _version = load!(u16, reader)?;
2254        let storage_size_bytes = load!(u64, reader)?;
2255
2256        Ok(Self { storage_size_bytes })
2257    }
2258}
2259
2260#[derive(Clone, Debug, Serialize, Deserialize)]
2262pub enum CustomMetricValue {
2263    Placeholder,
2264}
2265
2266impl Serializer for CustomMetricValue {
2267    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2268        store!(u16, &1, writer)?;
2269
2270        Ok(())
2271    }
2272}
2273
2274impl Deserializer for CustomMetricValue {
2275    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2276        let _version = load!(u16, reader)?;
2277
2278        Ok(CustomMetricValue::Placeholder)
2279    }
2280}
2281
2282#[derive(Clone, Debug, Serialize, Deserialize)]
2283#[serde(rename_all = "camelCase")]
2284pub struct GetMetricsResponse {
2285    pub server_time: u64,
2286    pub process_metrics: Option<ProcessMetrics>,
2287    pub connection_metrics: Option<ConnectionMetrics>,
2288    pub bandwidth_metrics: Option<BandwidthMetrics>,
2289    pub consensus_metrics: Option<ConsensusMetrics>,
2290    pub storage_metrics: Option<StorageMetrics>,
2291    pub custom_metrics: Option<HashMap<String, CustomMetricValue>>,
2293}
2294
2295impl GetMetricsResponse {
2296    pub fn new(
2297        server_time: u64,
2298        process_metrics: Option<ProcessMetrics>,
2299        connection_metrics: Option<ConnectionMetrics>,
2300        bandwidth_metrics: Option<BandwidthMetrics>,
2301        consensus_metrics: Option<ConsensusMetrics>,
2302        storage_metrics: Option<StorageMetrics>,
2303        custom_metrics: Option<HashMap<String, CustomMetricValue>>,
2304    ) -> Self {
2305        Self {
2306            process_metrics,
2307            connection_metrics,
2308            bandwidth_metrics,
2309            consensus_metrics,
2310            storage_metrics,
2311            server_time,
2312            custom_metrics,
2313        }
2314    }
2315}
2316
2317impl Serializer for GetMetricsResponse {
2318    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2319        store!(u16, &1, writer)?;
2320        store!(u64, &self.server_time, writer)?;
2321        serialize!(Option<ProcessMetrics>, &self.process_metrics, writer)?;
2322        serialize!(Option<ConnectionMetrics>, &self.connection_metrics, writer)?;
2323        serialize!(Option<BandwidthMetrics>, &self.bandwidth_metrics, writer)?;
2324        serialize!(Option<ConsensusMetrics>, &self.consensus_metrics, writer)?;
2325        serialize!(Option<StorageMetrics>, &self.storage_metrics, writer)?;
2326        serialize!(Option<HashMap<String, CustomMetricValue>>, &self.custom_metrics, writer)?;
2327
2328        Ok(())
2329    }
2330}
2331
2332impl Deserializer for GetMetricsResponse {
2333    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2334        let _version = load!(u16, reader)?;
2335        let server_time = load!(u64, reader)?;
2336        let process_metrics = deserialize!(Option<ProcessMetrics>, reader)?;
2337        let connection_metrics = deserialize!(Option<ConnectionMetrics>, reader)?;
2338        let bandwidth_metrics = deserialize!(Option<BandwidthMetrics>, reader)?;
2339        let consensus_metrics = deserialize!(Option<ConsensusMetrics>, reader)?;
2340        let storage_metrics = deserialize!(Option<StorageMetrics>, reader)?;
2341        let custom_metrics = deserialize!(Option<HashMap<String, CustomMetricValue>>, reader)?;
2342
2343        Ok(Self {
2344            server_time,
2345            process_metrics,
2346            connection_metrics,
2347            bandwidth_metrics,
2348            consensus_metrics,
2349            storage_metrics,
2350            custom_metrics,
2351        })
2352    }
2353}
2354
2355#[derive(Clone, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
2356#[serde(rename_all = "camelCase")]
2357#[borsh(use_discriminant = true)]
2358pub enum RpcCaps {
2359    Full = 0,
2360    Blocks,
2361    UtxoIndex,
2362    Mempool,
2363    Metrics,
2364    Visualizer,
2365    Mining,
2366}
2367
2368#[derive(Clone, Debug, Serialize, Deserialize)]
2369#[serde(rename_all = "camelCase")]
2370pub struct GetServerInfoRequest {}
2371
2372impl Serializer for GetServerInfoRequest {
2373    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2374        store!(u16, &1, writer)?;
2375        Ok(())
2376    }
2377}
2378
2379impl Deserializer for GetServerInfoRequest {
2380    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2381        let _version = load!(u16, reader)?;
2382        Ok(Self {})
2383    }
2384}
2385
2386#[derive(Clone, Debug, Serialize, Deserialize)]
2387#[serde(rename_all = "camelCase")]
2388pub struct GetServerInfoResponse {
2389    pub rpc_api_version: u16,
2390    pub rpc_api_revision: u16,
2391    pub server_version: String,
2392    pub network_id: RpcNetworkId,
2393    pub has_utxo_index: bool,
2394    pub is_synced: bool,
2395    pub virtual_daa_score: u64,
2396}
2397
2398impl Serializer for GetServerInfoResponse {
2399    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2400        store!(u16, &1, writer)?;
2401
2402        store!(u16, &self.rpc_api_version, writer)?;
2403        store!(u16, &self.rpc_api_revision, writer)?;
2404
2405        store!(String, &self.server_version, writer)?;
2406        store!(RpcNetworkId, &self.network_id, writer)?;
2407        store!(bool, &self.has_utxo_index, writer)?;
2408        store!(bool, &self.is_synced, writer)?;
2409        store!(u64, &self.virtual_daa_score, writer)?;
2410
2411        Ok(())
2412    }
2413}
2414
2415impl Deserializer for GetServerInfoResponse {
2416    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2417        let _version = load!(u16, reader)?;
2418
2419        let rpc_api_version = load!(u16, reader)?;
2420        let rpc_api_revision = load!(u16, reader)?;
2421
2422        let server_version = load!(String, reader)?;
2423        let network_id = load!(RpcNetworkId, reader)?;
2424        let has_utxo_index = load!(bool, reader)?;
2425        let is_synced = load!(bool, reader)?;
2426        let virtual_daa_score = load!(u64, reader)?;
2427
2428        Ok(Self { rpc_api_version, rpc_api_revision, server_version, network_id, has_utxo_index, is_synced, virtual_daa_score })
2429    }
2430}
2431
2432#[derive(Clone, Debug, Serialize, Deserialize)]
2433#[serde(rename_all = "camelCase")]
2434pub struct GetSyncStatusRequest {}
2435
2436impl Serializer for GetSyncStatusRequest {
2437    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2438        store!(u16, &1, writer)?;
2439        Ok(())
2440    }
2441}
2442
2443impl Deserializer for GetSyncStatusRequest {
2444    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2445        let _version = load!(u16, reader)?;
2446        Ok(Self {})
2447    }
2448}
2449
2450#[derive(Clone, Debug, Serialize, Deserialize)]
2451#[serde(rename_all = "camelCase")]
2452pub struct GetSyncStatusResponse {
2453    pub is_synced: bool,
2454}
2455
2456impl Serializer for GetSyncStatusResponse {
2457    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2458        store!(u16, &1, writer)?;
2459        store!(bool, &self.is_synced, writer)?;
2460        Ok(())
2461    }
2462}
2463
2464impl Deserializer for GetSyncStatusResponse {
2465    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2466        let _version = load!(u16, reader)?;
2467        let is_synced = load!(bool, reader)?;
2468        Ok(Self { is_synced })
2469    }
2470}
2471
2472#[derive(Clone, Debug, Serialize, Deserialize)]
2473#[serde(rename_all = "camelCase")]
2474pub struct GetDaaScoreTimestampEstimateRequest {
2475    pub daa_scores: Vec<u64>,
2476}
2477
2478impl GetDaaScoreTimestampEstimateRequest {
2479    pub fn new(daa_scores: Vec<u64>) -> Self {
2480        Self { daa_scores }
2481    }
2482}
2483
2484impl Serializer for GetDaaScoreTimestampEstimateRequest {
2485    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2486        store!(u16, &1, writer)?;
2487        store!(Vec<u64>, &self.daa_scores, writer)?;
2488        Ok(())
2489    }
2490}
2491
2492impl Deserializer for GetDaaScoreTimestampEstimateRequest {
2493    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2494        let _version = load!(u16, reader)?;
2495        let daa_scores = load!(Vec<u64>, reader)?;
2496        Ok(Self { daa_scores })
2497    }
2498}
2499
2500#[derive(Clone, Debug, Serialize, Deserialize)]
2501#[serde(rename_all = "camelCase")]
2502pub struct GetDaaScoreTimestampEstimateResponse {
2503    pub timestamps: Vec<u64>,
2504}
2505
2506impl GetDaaScoreTimestampEstimateResponse {
2507    pub fn new(timestamps: Vec<u64>) -> Self {
2508        Self { timestamps }
2509    }
2510}
2511
2512impl Serializer for GetDaaScoreTimestampEstimateResponse {
2513    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2514        store!(u16, &1, writer)?;
2515        store!(Vec<u64>, &self.timestamps, writer)?;
2516        Ok(())
2517    }
2518}
2519
2520impl Deserializer for GetDaaScoreTimestampEstimateResponse {
2521    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2522        let _version = load!(u16, reader)?;
2523        let timestamps = load!(Vec<u64>, reader)?;
2524        Ok(Self { timestamps })
2525    }
2526}
2527
2528#[derive(Clone, Debug, Serialize, Deserialize)]
2532#[serde(rename_all = "camelCase")]
2533pub struct GetFeeEstimateRequest {}
2534
2535impl Serializer for GetFeeEstimateRequest {
2536    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2537        store!(u16, &1, writer)?;
2538        Ok(())
2539    }
2540}
2541
2542impl Deserializer for GetFeeEstimateRequest {
2543    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2544        let _version = load!(u16, reader)?;
2545        Ok(Self {})
2546    }
2547}
2548
2549#[derive(Clone, Debug, Serialize, Deserialize)]
2550#[serde(rename_all = "camelCase")]
2551pub struct GetFeeEstimateResponse {
2552    pub estimate: RpcFeeEstimate,
2553}
2554
2555impl Serializer for GetFeeEstimateResponse {
2556    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2557        store!(u16, &1, writer)?;
2558        serialize!(RpcFeeEstimate, &self.estimate, writer)?;
2559        Ok(())
2560    }
2561}
2562
2563impl Deserializer for GetFeeEstimateResponse {
2564    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2565        let _version = load!(u16, reader)?;
2566        let estimate = deserialize!(RpcFeeEstimate, reader)?;
2567        Ok(Self { estimate })
2568    }
2569}
2570
2571#[derive(Clone, Debug, Serialize, Deserialize)]
2572#[serde(rename_all = "camelCase")]
2573pub struct GetFeeEstimateExperimentalRequest {
2574    pub verbose: bool,
2575}
2576
2577impl Serializer for GetFeeEstimateExperimentalRequest {
2578    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2579        store!(u16, &1, writer)?;
2580        store!(bool, &self.verbose, writer)?;
2581        Ok(())
2582    }
2583}
2584
2585impl Deserializer for GetFeeEstimateExperimentalRequest {
2586    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2587        let _version = load!(u16, reader)?;
2588        let verbose = load!(bool, reader)?;
2589        Ok(Self { verbose })
2590    }
2591}
2592
2593#[derive(Clone, Debug, Serialize, Deserialize)]
2594#[serde(rename_all = "camelCase")]
2595pub struct GetFeeEstimateExperimentalResponse {
2596    pub estimate: RpcFeeEstimate,
2598
2599    pub verbose: Option<RpcFeeEstimateVerboseExperimentalData>,
2601}
2602
2603impl Serializer for GetFeeEstimateExperimentalResponse {
2604    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2605        store!(u16, &1, writer)?;
2606        serialize!(RpcFeeEstimate, &self.estimate, writer)?;
2607        serialize!(Option<RpcFeeEstimateVerboseExperimentalData>, &self.verbose, writer)?;
2608        Ok(())
2609    }
2610}
2611
2612impl Deserializer for GetFeeEstimateExperimentalResponse {
2613    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2614        let _version = load!(u16, reader)?;
2615        let estimate = deserialize!(RpcFeeEstimate, reader)?;
2616        let verbose = deserialize!(Option<RpcFeeEstimateVerboseExperimentalData>, reader)?;
2617        Ok(Self { estimate, verbose })
2618    }
2619}
2620
2621#[derive(Clone, Debug, Serialize, Deserialize)]
2622#[serde(rename_all = "camelCase")]
2623pub struct GetCurrentBlockColorRequest {
2624    pub hash: RpcHash,
2625}
2626
2627impl Serializer for GetCurrentBlockColorRequest {
2628    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2629        store!(u16, &1, writer)?;
2630        store!(RpcHash, &self.hash, writer)?;
2631
2632        Ok(())
2633    }
2634}
2635
2636impl Deserializer for GetCurrentBlockColorRequest {
2637    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2638        let _version = load!(u16, reader)?;
2639        let hash = load!(RpcHash, reader)?;
2640
2641        Ok(Self { hash })
2642    }
2643}
2644
2645#[derive(Clone, Debug, Serialize, Deserialize)]
2646#[serde(rename_all = "camelCase")]
2647pub struct GetCurrentBlockColorResponse {
2648    pub blue: bool,
2649}
2650
2651impl Serializer for GetCurrentBlockColorResponse {
2652    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2653        store!(u16, &1, writer)?;
2654        store!(bool, &self.blue, writer)?;
2655
2656        Ok(())
2657    }
2658}
2659
2660impl Deserializer for GetCurrentBlockColorResponse {
2661    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2662        let _version = load!(u16, reader)?;
2663        let blue = load!(bool, reader)?;
2664
2665        Ok(Self { blue })
2666    }
2667}
2668
2669#[derive(Clone, Debug, Serialize, Deserialize)]
2680#[serde(rename_all = "camelCase")]
2681pub struct NotifyBlockAddedRequest {
2682    pub command: Command,
2683}
2684impl NotifyBlockAddedRequest {
2685    pub fn new(command: Command) -> Self {
2686        Self { command }
2687    }
2688}
2689
2690impl Serializer for NotifyBlockAddedRequest {
2691    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2692        store!(u16, &1, writer)?;
2693        store!(Command, &self.command, writer)?;
2694        Ok(())
2695    }
2696}
2697
2698impl Deserializer for NotifyBlockAddedRequest {
2699    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2700        let _version = load!(u16, reader)?;
2701        let command = load!(Command, reader)?;
2702        Ok(Self { command })
2703    }
2704}
2705
2706#[derive(Clone, Debug, Serialize, Deserialize)]
2707#[serde(rename_all = "camelCase")]
2708pub struct NotifyBlockAddedResponse {}
2709
2710impl Serializer for NotifyBlockAddedResponse {
2711    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2712        store!(u16, &1, writer)?;
2713        Ok(())
2714    }
2715}
2716
2717impl Deserializer for NotifyBlockAddedResponse {
2718    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2719        let _version = load!(u16, reader)?;
2720        Ok(Self {})
2721    }
2722}
2723
2724#[derive(Clone, Debug, Serialize, Deserialize)]
2729#[serde(rename_all = "camelCase")]
2730pub struct BlockAddedNotification {
2731    pub block: Arc<RpcBlock>,
2732}
2733
2734impl Serializer for BlockAddedNotification {
2735    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2736        store!(u16, &1, writer)?;
2737        serialize!(RpcBlock, &self.block, writer)?;
2738        Ok(())
2739    }
2740}
2741
2742impl Deserializer for BlockAddedNotification {
2743    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2744        let _version = load!(u16, reader)?;
2745        let block = deserialize!(RpcBlock, reader)?;
2746        Ok(Self { block: block.into() })
2747    }
2748}
2749
2750#[derive(Clone, Debug, Serialize, Deserialize)]
2758#[serde(rename_all = "camelCase")]
2759pub struct NotifyVirtualChainChangedRequest {
2760    pub include_accepted_transaction_ids: bool,
2761    pub command: Command,
2762}
2763
2764impl NotifyVirtualChainChangedRequest {
2765    pub fn new(include_accepted_transaction_ids: bool, command: Command) -> Self {
2766        Self { include_accepted_transaction_ids, command }
2767    }
2768}
2769
2770impl Serializer for NotifyVirtualChainChangedRequest {
2771    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2772        store!(u16, &1, writer)?;
2773        store!(bool, &self.include_accepted_transaction_ids, writer)?;
2774        store!(Command, &self.command, writer)?;
2775        Ok(())
2776    }
2777}
2778
2779impl Deserializer for NotifyVirtualChainChangedRequest {
2780    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2781        let _version = load!(u16, reader)?;
2782        let include_accepted_transaction_ids = load!(bool, reader)?;
2783        let command = load!(Command, reader)?;
2784        Ok(Self { include_accepted_transaction_ids, command })
2785    }
2786}
2787
2788#[derive(Clone, Debug, Serialize, Deserialize)]
2789#[serde(rename_all = "camelCase")]
2790pub struct NotifyVirtualChainChangedResponse {}
2791
2792impl Serializer for NotifyVirtualChainChangedResponse {
2793    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2794        store!(u16, &1, writer)?;
2795        Ok(())
2796    }
2797}
2798
2799impl Deserializer for NotifyVirtualChainChangedResponse {
2800    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2801        let _version = load!(u16, reader)?;
2802        Ok(Self {})
2803    }
2804}
2805
2806#[derive(Clone, Debug, Serialize, Deserialize)]
2811#[serde(rename_all = "camelCase")]
2812pub struct VirtualChainChangedNotification {
2813    pub removed_chain_block_hashes: Arc<Vec<RpcHash>>,
2814    pub added_chain_block_hashes: Arc<Vec<RpcHash>>,
2815    pub accepted_transaction_ids: Arc<Vec<RpcAcceptedTransactionIds>>,
2816}
2817
2818impl Serializer for VirtualChainChangedNotification {
2819    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2820        store!(u16, &1, writer)?;
2821        store!(Vec<RpcHash>, &self.removed_chain_block_hashes, writer)?;
2822        store!(Vec<RpcHash>, &self.added_chain_block_hashes, writer)?;
2823        store!(Vec<RpcAcceptedTransactionIds>, &self.accepted_transaction_ids, writer)?;
2824        Ok(())
2825    }
2826}
2827
2828impl Deserializer for VirtualChainChangedNotification {
2829    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2830        let _version = load!(u16, reader)?;
2831        let removed_chain_block_hashes = load!(Vec<RpcHash>, reader)?;
2832        let added_chain_block_hashes = load!(Vec<RpcHash>, reader)?;
2833        let accepted_transaction_ids = load!(Vec<RpcAcceptedTransactionIds>, reader)?;
2834        Ok(Self {
2835            removed_chain_block_hashes: removed_chain_block_hashes.into(),
2836            added_chain_block_hashes: added_chain_block_hashes.into(),
2837            accepted_transaction_ids: accepted_transaction_ids.into(),
2838        })
2839    }
2840}
2841
2842#[derive(Clone, Debug, Serialize, Deserialize)]
2846#[serde(rename_all = "camelCase")]
2847pub struct NotifyFinalityConflictRequest {
2848    pub command: Command,
2849}
2850
2851impl NotifyFinalityConflictRequest {
2852    pub fn new(command: Command) -> Self {
2853        Self { command }
2854    }
2855}
2856
2857impl Serializer for NotifyFinalityConflictRequest {
2858    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2859        store!(u16, &1, writer)?;
2860        store!(Command, &self.command, writer)?;
2861        Ok(())
2862    }
2863}
2864
2865impl Deserializer for NotifyFinalityConflictRequest {
2866    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2867        let _version = load!(u16, reader)?;
2868        let command = load!(Command, reader)?;
2869        Ok(Self { command })
2870    }
2871}
2872
2873#[derive(Clone, Debug, Serialize, Deserialize)]
2874#[serde(rename_all = "camelCase")]
2875pub struct NotifyFinalityConflictResponse {}
2876
2877impl Serializer for NotifyFinalityConflictResponse {
2878    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2879        store!(u16, &1, writer)?;
2880        Ok(())
2881    }
2882}
2883
2884impl Deserializer for NotifyFinalityConflictResponse {
2885    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2886        let _version = load!(u16, reader)?;
2887        Ok(Self {})
2888    }
2889}
2890
2891#[derive(Clone, Debug, Serialize, Deserialize)]
2892#[serde(rename_all = "camelCase")]
2893pub struct FinalityConflictNotification {
2894    pub violating_block_hash: RpcHash,
2895}
2896
2897impl Serializer for FinalityConflictNotification {
2898    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2899        store!(u16, &1, writer)?;
2900        store!(RpcHash, &self.violating_block_hash, writer)?;
2901        Ok(())
2902    }
2903}
2904
2905impl Deserializer for FinalityConflictNotification {
2906    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2907        let _version = load!(u16, reader)?;
2908        let violating_block_hash = load!(RpcHash, reader)?;
2909        Ok(Self { violating_block_hash })
2910    }
2911}
2912
2913#[derive(Clone, Debug, Serialize, Deserialize)]
2917#[serde(rename_all = "camelCase")]
2918pub struct NotifyFinalityConflictResolvedRequest {
2919    pub command: Command,
2920}
2921
2922impl NotifyFinalityConflictResolvedRequest {
2923    pub fn new(command: Command) -> Self {
2924        Self { command }
2925    }
2926}
2927
2928impl Serializer for NotifyFinalityConflictResolvedRequest {
2929    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2930        store!(u16, &1, writer)?;
2931        store!(Command, &self.command, writer)?;
2932        Ok(())
2933    }
2934}
2935
2936impl Deserializer for NotifyFinalityConflictResolvedRequest {
2937    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2938        let _version = load!(u16, reader)?;
2939        let command = load!(Command, reader)?;
2940        Ok(Self { command })
2941    }
2942}
2943
2944#[derive(Clone, Debug, Serialize, Deserialize)]
2945#[serde(rename_all = "camelCase")]
2946pub struct NotifyFinalityConflictResolvedResponse {}
2947
2948impl Serializer for NotifyFinalityConflictResolvedResponse {
2949    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2950        store!(u16, &1, writer)?;
2951        Ok(())
2952    }
2953}
2954
2955impl Deserializer for NotifyFinalityConflictResolvedResponse {
2956    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2957        let _version = load!(u16, reader)?;
2958        Ok(Self {})
2959    }
2960}
2961
2962#[derive(Clone, Debug, Serialize, Deserialize)]
2963#[serde(rename_all = "camelCase")]
2964pub struct FinalityConflictResolvedNotification {
2965    pub finality_block_hash: RpcHash,
2966}
2967
2968impl Serializer for FinalityConflictResolvedNotification {
2969    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
2970        store!(u16, &1, writer)?;
2971        store!(RpcHash, &self.finality_block_hash, writer)?;
2972        Ok(())
2973    }
2974}
2975
2976impl Deserializer for FinalityConflictResolvedNotification {
2977    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
2978        let _version = load!(u16, reader)?;
2979        let finality_block_hash = load!(RpcHash, reader)?;
2980        Ok(Self { finality_block_hash })
2981    }
2982}
2983
2984#[derive(Clone, Debug, Serialize, Deserialize)]
2997#[serde(rename_all = "camelCase")]
2998pub struct NotifyUtxosChangedRequest {
2999    pub addresses: Vec<RpcAddress>,
3000    pub command: Command,
3001}
3002
3003impl NotifyUtxosChangedRequest {
3004    pub fn new(addresses: Vec<RpcAddress>, command: Command) -> Self {
3005        Self { addresses, command }
3006    }
3007}
3008
3009impl Serializer for NotifyUtxosChangedRequest {
3010    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3011        store!(u16, &1, writer)?;
3012        store!(Vec<RpcAddress>, &self.addresses, writer)?;
3013        store!(Command, &self.command, writer)?;
3014        Ok(())
3015    }
3016}
3017
3018impl Deserializer for NotifyUtxosChangedRequest {
3019    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3020        let _version = load!(u16, reader)?;
3021        let addresses = load!(Vec<RpcAddress>, reader)?;
3022        let command = load!(Command, reader)?;
3023        Ok(Self { addresses, command })
3024    }
3025}
3026
3027#[derive(Clone, Debug, Serialize, Deserialize)]
3028#[serde(rename_all = "camelCase")]
3029pub struct NotifyUtxosChangedResponse {}
3030
3031impl Serializer for NotifyUtxosChangedResponse {
3032    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3033        store!(u16, &1, writer)?;
3034        Ok(())
3035    }
3036}
3037
3038impl Deserializer for NotifyUtxosChangedResponse {
3039    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3040        let _version = load!(u16, reader)?;
3041        Ok(Self {})
3042    }
3043}
3044
3045#[derive(Clone, Debug, Default, Serialize, Deserialize)]
3049#[serde(rename_all = "camelCase")]
3050pub struct UtxosChangedNotification {
3051    pub added: Arc<Vec<RpcUtxosByAddressesEntry>>,
3052    pub removed: Arc<Vec<RpcUtxosByAddressesEntry>>,
3053}
3054
3055impl UtxosChangedNotification {
3056    pub(crate) fn apply_utxos_changed_subscription(
3057        &self,
3058        subscription: &UtxosChangedSubscription,
3059        context: &SubscriptionContext,
3060    ) -> Option<Self> {
3061        if subscription.to_all() {
3062            Some(self.clone())
3063        } else {
3064            let added = Self::filter_utxos(&self.added, subscription, context);
3065            let removed = Self::filter_utxos(&self.removed, subscription, context);
3066            if added.is_empty() && removed.is_empty() {
3067                None
3068            } else {
3069                debug!("CRPC, Creating UtxosChanged notifications with {} added and {} removed utxos", added.len(), removed.len());
3070                Some(Self { added: Arc::new(added), removed: Arc::new(removed) })
3071            }
3072        }
3073    }
3074
3075    fn filter_utxos(
3076        utxo_set: &[RpcUtxosByAddressesEntry],
3077        subscription: &UtxosChangedSubscription,
3078        context: &SubscriptionContext,
3079    ) -> Vec<RpcUtxosByAddressesEntry> {
3080        let subscription_data = subscription.data();
3081        utxo_set.iter().filter(|x| subscription_data.contains(&x.utxo_entry.script_public_key, context)).cloned().collect()
3082    }
3083}
3084
3085impl Serializer for UtxosChangedNotification {
3086    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3087        store!(u16, &1, writer)?;
3088        serialize!(Vec<RpcUtxosByAddressesEntry>, &self.added, writer)?;
3089        serialize!(Vec<RpcUtxosByAddressesEntry>, &self.removed, writer)?;
3090        Ok(())
3091    }
3092}
3093
3094impl Deserializer for UtxosChangedNotification {
3095    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3096        let _version = load!(u16, reader)?;
3097        let added = deserialize!(Vec<RpcUtxosByAddressesEntry>, reader)?;
3098        let removed = deserialize!(Vec<RpcUtxosByAddressesEntry>, reader)?;
3099        Ok(Self { added: added.into(), removed: removed.into() })
3100    }
3101}
3102
3103#[derive(Clone, Debug, Serialize, Deserialize)]
3111#[serde(rename_all = "camelCase")]
3112pub struct NotifySinkBlueScoreChangedRequest {
3113    pub command: Command,
3114}
3115
3116impl NotifySinkBlueScoreChangedRequest {
3117    pub fn new(command: Command) -> Self {
3118        Self { command }
3119    }
3120}
3121
3122impl Serializer for NotifySinkBlueScoreChangedRequest {
3123    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3124        store!(u16, &1, writer)?;
3125        store!(Command, &self.command, writer)?;
3126        Ok(())
3127    }
3128}
3129
3130impl Deserializer for NotifySinkBlueScoreChangedRequest {
3131    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3132        let _version = load!(u16, reader)?;
3133        let command = load!(Command, reader)?;
3134        Ok(Self { command })
3135    }
3136}
3137
3138#[derive(Clone, Debug, Serialize, Deserialize)]
3139#[serde(rename_all = "camelCase")]
3140pub struct NotifySinkBlueScoreChangedResponse {}
3141
3142impl Serializer for NotifySinkBlueScoreChangedResponse {
3143    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3144        store!(u16, &1, writer)?;
3145        Ok(())
3146    }
3147}
3148
3149impl Deserializer for NotifySinkBlueScoreChangedResponse {
3150    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3151        let _version = load!(u16, reader)?;
3152        Ok(Self {})
3153    }
3154}
3155
3156#[derive(Clone, Debug, Serialize, Deserialize)]
3161#[serde(rename_all = "camelCase")]
3162pub struct SinkBlueScoreChangedNotification {
3163    pub sink_blue_score: u64,
3164}
3165
3166impl Serializer for SinkBlueScoreChangedNotification {
3167    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3168        store!(u16, &1, writer)?;
3169        store!(u64, &self.sink_blue_score, writer)?;
3170        Ok(())
3171    }
3172}
3173
3174impl Deserializer for SinkBlueScoreChangedNotification {
3175    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3176        let _version = load!(u16, reader)?;
3177        let sink_blue_score = load!(u64, reader)?;
3178        Ok(Self { sink_blue_score })
3179    }
3180}
3181
3182#[derive(Clone, Debug, Serialize, Deserialize)]
3190#[serde(rename_all = "camelCase")]
3191pub struct NotifyVirtualDaaScoreChangedRequest {
3192    pub command: Command,
3193}
3194
3195impl NotifyVirtualDaaScoreChangedRequest {
3196    pub fn new(command: Command) -> Self {
3197        Self { command }
3198    }
3199}
3200
3201impl Serializer for NotifyVirtualDaaScoreChangedRequest {
3202    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3203        store!(u16, &1, writer)?;
3204        store!(Command, &self.command, writer)?;
3205        Ok(())
3206    }
3207}
3208
3209impl Deserializer for NotifyVirtualDaaScoreChangedRequest {
3210    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3211        let _version = load!(u16, reader)?;
3212        let command = load!(Command, reader)?;
3213        Ok(Self { command })
3214    }
3215}
3216
3217#[derive(Clone, Debug, Serialize, Deserialize)]
3218#[serde(rename_all = "camelCase")]
3219pub struct NotifyVirtualDaaScoreChangedResponse {}
3220
3221impl Serializer for NotifyVirtualDaaScoreChangedResponse {
3222    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3223        store!(u16, &1, writer)?;
3224        Ok(())
3225    }
3226}
3227
3228impl Deserializer for NotifyVirtualDaaScoreChangedResponse {
3229    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3230        let _version = load!(u16, reader)?;
3231        Ok(Self {})
3232    }
3233}
3234
3235#[derive(Clone, Debug, Serialize, Deserialize)]
3240#[serde(rename_all = "camelCase")]
3241pub struct VirtualDaaScoreChangedNotification {
3242    pub virtual_daa_score: u64,
3243}
3244
3245impl Serializer for VirtualDaaScoreChangedNotification {
3246    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3247        store!(u16, &1, writer)?;
3248        store!(u64, &self.virtual_daa_score, writer)?;
3249        Ok(())
3250    }
3251}
3252
3253impl Deserializer for VirtualDaaScoreChangedNotification {
3254    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3255        let _version = load!(u16, reader)?;
3256        let virtual_daa_score = load!(u64, reader)?;
3257        Ok(Self { virtual_daa_score })
3258    }
3259}
3260
3261#[derive(Clone, Debug, Serialize, Deserialize)]
3265#[serde(rename_all = "camelCase")]
3266pub struct NotifyPruningPointUtxoSetOverrideRequest {
3267    pub command: Command,
3268}
3269
3270impl NotifyPruningPointUtxoSetOverrideRequest {
3271    pub fn new(command: Command) -> Self {
3272        Self { command }
3273    }
3274}
3275
3276impl Serializer for NotifyPruningPointUtxoSetOverrideRequest {
3277    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3278        store!(u16, &1, writer)?;
3279        store!(Command, &self.command, writer)?;
3280        Ok(())
3281    }
3282}
3283
3284impl Deserializer for NotifyPruningPointUtxoSetOverrideRequest {
3285    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3286        let _version = load!(u16, reader)?;
3287        let command = load!(Command, reader)?;
3288        Ok(Self { command })
3289    }
3290}
3291
3292#[derive(Clone, Debug, Serialize, Deserialize)]
3293#[serde(rename_all = "camelCase")]
3294pub struct NotifyPruningPointUtxoSetOverrideResponse {}
3295
3296impl Serializer for NotifyPruningPointUtxoSetOverrideResponse {
3297    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3298        store!(u16, &1, writer)?;
3299        Ok(())
3300    }
3301}
3302
3303impl Deserializer for NotifyPruningPointUtxoSetOverrideResponse {
3304    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3305        let _version = load!(u16, reader)?;
3306        Ok(Self {})
3307    }
3308}
3309
3310#[derive(Clone, Debug, Serialize, Deserialize)]
3311#[serde(rename_all = "camelCase")]
3312pub struct PruningPointUtxoSetOverrideNotification {}
3313
3314impl Serializer for PruningPointUtxoSetOverrideNotification {
3315    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3316        store!(u16, &1, writer)?;
3317        Ok(())
3318    }
3319}
3320
3321impl Deserializer for PruningPointUtxoSetOverrideNotification {
3322    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3323        let _version = load!(u16, reader)?;
3324        Ok(Self {})
3325    }
3326}
3327
3328#[derive(Clone, Debug, Serialize, Deserialize)]
3335#[serde(rename_all = "camelCase")]
3336pub struct NotifyNewBlockTemplateRequest {
3337    pub command: Command,
3338}
3339impl NotifyNewBlockTemplateRequest {
3340    pub fn new(command: Command) -> Self {
3341        Self { command }
3342    }
3343}
3344
3345impl Serializer for NotifyNewBlockTemplateRequest {
3346    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3347        store!(u16, &1, writer)?;
3348        store!(Command, &self.command, writer)?;
3349        Ok(())
3350    }
3351}
3352
3353impl Deserializer for NotifyNewBlockTemplateRequest {
3354    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3355        let _version = load!(u16, reader)?;
3356        let command = load!(Command, reader)?;
3357        Ok(Self { command })
3358    }
3359}
3360
3361#[derive(Clone, Debug, Serialize, Deserialize)]
3362#[serde(rename_all = "camelCase")]
3363pub struct NotifyNewBlockTemplateResponse {}
3364
3365impl Serializer for NotifyNewBlockTemplateResponse {
3366    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3367        store!(u16, &1, writer)?;
3368        Ok(())
3369    }
3370}
3371
3372impl Deserializer for NotifyNewBlockTemplateResponse {
3373    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3374        let _version = load!(u16, reader)?;
3375        Ok(Self {})
3376    }
3377}
3378
3379#[derive(Clone, Debug, Serialize, Deserialize)]
3384#[serde(rename_all = "camelCase")]
3385pub struct NewBlockTemplateNotification {}
3386
3387impl Serializer for NewBlockTemplateNotification {
3388    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3389        store!(u16, &1, writer)?;
3390        Ok(())
3391    }
3392}
3393
3394impl Deserializer for NewBlockTemplateNotification {
3395    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3396        let _version = load!(u16, reader)?;
3397        Ok(Self {})
3398    }
3399}
3400
3401#[derive(Clone, Debug, Serialize, Deserialize)]
3405#[serde(rename_all = "camelCase")]
3406pub struct SubscribeResponse {
3407    id: u64,
3408}
3409
3410impl SubscribeResponse {
3411    pub fn new(id: u64) -> Self {
3412        Self { id }
3413    }
3414}
3415
3416impl Serializer for SubscribeResponse {
3417    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3418        store!(u16, &1, writer)?;
3419        store!(u64, &self.id, writer)?;
3420        Ok(())
3421    }
3422}
3423
3424impl Deserializer for SubscribeResponse {
3425    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3426        let _version = load!(u16, reader)?;
3427        let id = load!(u64, reader)?;
3428        Ok(Self { id })
3429    }
3430}
3431
3432#[derive(Clone, Debug, Serialize, Deserialize)]
3436#[serde(rename_all = "camelCase")]
3437pub struct UnsubscribeResponse {}
3438
3439impl Serializer for UnsubscribeResponse {
3440    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
3441        store!(u16, &1, writer)
3442    }
3443}
3444
3445impl Deserializer for UnsubscribeResponse {
3446    fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
3447        let _version = load!(u16, reader);
3448        Ok(Self {})
3449    }
3450}