kaspa_rpc_core/convert/
scope.rs

1//! Conversion of Notification Scope related types
2
3use crate::{
4    NotifyBlockAddedRequest, NotifyFinalityConflictRequest, NotifyNewBlockTemplateRequest, NotifyPruningPointUtxoSetOverrideRequest,
5    NotifySinkBlueScoreChangedRequest, NotifyUtxosChangedRequest, NotifyVirtualChainChangedRequest,
6    NotifyVirtualDaaScoreChangedRequest,
7};
8use kaspa_notify::scope::*;
9
10macro_rules! into_scope {
11    ($variant:tt) => {
12        paste::paste! {
13                impl From<[<Notify $variant Request>]> for Scope {
14                fn from (item: [<Notify $variant Request>]) -> Self {
15                    [<$variant Scope>]::from(item).into()
16                }
17            }
18        }
19    };
20}
21
22macro_rules! from {
23    // Structure with fields, requiring explicit conversion logic
24    ($name:ident : $variant:tt, $body:block) => {
25        paste::paste! {
26            impl From<[<Notify $variant Request>]> for [<$variant Scope>] {
27                fn from($name: [<Notify $variant Request>]) -> Self {
28                    $body
29                }
30            }
31            into_scope!($variant);
32        }
33    };
34
35    // Structure without field
36    ($variant:tt) => {
37        paste::paste! {
38            impl From<[<Notify $variant Request>]> for [<$variant Scope>] {
39                fn from(_: [<Notify $variant Request>]) -> Self {
40                    Self {}
41                }
42            }
43            into_scope!($variant);
44        }
45    };
46}
47
48from!(BlockAdded);
49from!(item: VirtualChainChanged, {
50    Self::new(item.include_accepted_transaction_ids)
51});
52from!(FinalityConflict);
53impl From<&NotifyFinalityConflictRequest> for FinalityConflictResolvedScope {
54    fn from(_: &NotifyFinalityConflictRequest) -> Self {
55        Self::default()
56    }
57}
58from!(item: UtxosChanged, {
59    Self::new(item.addresses.clone())
60});
61from!(SinkBlueScoreChanged);
62from!(VirtualDaaScoreChanged);
63from!(PruningPointUtxoSetOverride);
64from!(NewBlockTemplate);