1use super::events::EventType;
2use borsh::{BorshDeserialize, BorshSerialize};
3use derive_more::Display;
4use kaspa_addresses::Address;
5use serde::{Deserialize, Serialize};
6use workflow_serializer::prelude::*;
7
8macro_rules! scope_enum {
9 ($(#[$meta:meta])* $vis:vis enum $name:ident {
10 $($(#[$variant_meta:meta])* $variant_name:ident,)*
11 }) => {
12 paste::paste! {
13 $(#[$meta])*
14 $vis enum $name {
15 $($(#[$variant_meta])* $variant_name([<$variant_name Scope>])),*
16 }
17
18 impl std::convert::From<EventType> for $name {
19 fn from(value: EventType) -> Self {
20 match value {
21 $(EventType::$variant_name => $name::$variant_name(kaspa_notify::scope::[<$variant_name Scope>]::default())),*
22 }
23 }
24 }
25
26 $(impl std::convert::From<[<$variant_name Scope>]> for Scope {
27 fn from(value: [<$variant_name Scope>]) -> Self {
28 Scope::$variant_name(value)
29 }
30 })*
31 }
32 }
33}
34
35scope_enum! {
36#[derive(Clone, Display, Debug, PartialEq, Eq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
38pub enum Scope {
39 BlockAdded,
40 VirtualChainChanged,
41 FinalityConflict,
42 FinalityConflictResolved,
43 UtxosChanged,
44 SinkBlueScoreChanged,
45 VirtualDaaScoreChanged,
46 PruningPointUtxoSetOverride,
47 NewBlockTemplate,
48}
49}
50
51impl Scope {
52 pub fn event_type(&self) -> EventType {
53 self.into()
54 }
55}
56
57impl Serializer for Scope {
58 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
59 store!(u16, &1, writer)?;
60 store!(Scope, self, writer)?;
61 Ok(())
62 }
63}
64
65impl Deserializer for Scope {
66 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
67 let _version = load!(u16, reader)?;
68 load!(Scope, reader)
69 }
70}
71
72#[derive(Clone, Display, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
73pub struct BlockAddedScope {}
74
75impl Serializer for BlockAddedScope {
76 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
77 store!(u16, &1, writer)?;
78 Ok(())
79 }
80}
81
82impl Deserializer for BlockAddedScope {
83 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
84 let _version = load!(u16, reader)?;
85 Ok(Self {})
86 }
87}
88
89#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
90pub struct VirtualChainChangedScope {
91 pub include_accepted_transaction_ids: bool,
92}
93
94impl VirtualChainChangedScope {
95 pub fn new(include_accepted_transaction_ids: bool) -> Self {
96 Self { include_accepted_transaction_ids }
97 }
98}
99
100impl std::fmt::Display for VirtualChainChangedScope {
101 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
102 write!(f, "VirtualChainChangedScope{}", if self.include_accepted_transaction_ids { " with accepted transactions" } else { "" })
103 }
104}
105
106impl Serializer for VirtualChainChangedScope {
107 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
108 store!(u16, &1, writer)?;
109 store!(bool, &self.include_accepted_transaction_ids, writer)?;
110 Ok(())
111 }
112}
113
114impl Deserializer for VirtualChainChangedScope {
115 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
116 let _version = load!(u16, reader)?;
117 let include_accepted_transaction_ids = load!(bool, reader)?;
118 Ok(Self { include_accepted_transaction_ids })
119 }
120}
121
122#[derive(Clone, Display, Debug, PartialEq, Eq, Default, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
123pub struct FinalityConflictScope {}
124
125impl Serializer for FinalityConflictScope {
126 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
127 store!(u16, &1, writer)?;
128 Ok(())
129 }
130}
131
132impl Deserializer for FinalityConflictScope {
133 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
134 let _version = load!(u16, reader)?;
135 Ok(Self {})
136 }
137}
138
139#[derive(Clone, Display, Debug, PartialEq, Eq, Default, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
140pub struct FinalityConflictResolvedScope {}
141
142impl Serializer for FinalityConflictResolvedScope {
143 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
144 store!(u16, &1, writer)?;
145 Ok(())
146 }
147}
148
149impl Deserializer for FinalityConflictResolvedScope {
150 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
151 let _version = load!(u16, reader)?;
152 Ok(Self {})
153 }
154}
155
156#[derive(Clone, Debug, Default, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
157pub struct UtxosChangedScope {
158 pub addresses: Vec<Address>,
159}
160
161impl std::fmt::Display for UtxosChangedScope {
162 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
163 let addresses = match self.addresses.len() {
164 0 => "all".to_string(),
165 1 => format!("{}", self.addresses[0]),
166 n => format!("{} addresses", n),
167 };
168 write!(f, "UtxosChangedScope ({})", addresses)
169 }
170}
171
172impl PartialEq for UtxosChangedScope {
173 fn eq(&self, other: &Self) -> bool {
174 self.addresses.len() == other.addresses.len() && self.addresses.iter().all(|x| other.addresses.contains(x))
175 }
176}
177
178impl Eq for UtxosChangedScope {}
179
180impl UtxosChangedScope {
181 pub fn new(addresses: Vec<Address>) -> Self {
182 Self { addresses }
183 }
184}
185
186impl Serializer for UtxosChangedScope {
187 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
188 store!(u16, &1, writer)?;
189 store!(Vec<Address>, &self.addresses, writer)?;
190 Ok(())
191 }
192}
193
194impl Deserializer for UtxosChangedScope {
195 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
196 let _version = load!(u16, reader)?;
197 let addresses = load!(Vec<Address>, reader)?;
198 Ok(Self { addresses })
199 }
200}
201
202#[derive(Clone, Display, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
203pub struct SinkBlueScoreChangedScope {}
204
205impl Serializer for SinkBlueScoreChangedScope {
206 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
207 store!(u16, &1, writer)?;
208 Ok(())
209 }
210}
211
212impl Deserializer for SinkBlueScoreChangedScope {
213 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
214 let _version = load!(u16, reader)?;
215 Ok(Self {})
216 }
217}
218
219#[derive(Clone, Display, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
220pub struct VirtualDaaScoreChangedScope {}
221
222impl Serializer for VirtualDaaScoreChangedScope {
223 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
224 store!(u16, &1, writer)?;
225 Ok(())
226 }
227}
228
229impl Deserializer for VirtualDaaScoreChangedScope {
230 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
231 let _version = load!(u16, reader)?;
232 Ok(Self {})
233 }
234}
235
236#[derive(Clone, Display, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
237pub struct PruningPointUtxoSetOverrideScope {}
238
239impl Serializer for PruningPointUtxoSetOverrideScope {
240 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
241 store!(u16, &1, writer)?;
242 Ok(())
243 }
244}
245
246impl Deserializer for PruningPointUtxoSetOverrideScope {
247 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
248 let _version = load!(u16, reader)?;
249 Ok(Self {})
250 }
251}
252
253#[derive(Clone, Display, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)]
254pub struct NewBlockTemplateScope {}
255
256impl Serializer for NewBlockTemplateScope {
257 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
258 store!(u16, &1, writer)?;
259 Ok(())
260 }
261}
262
263impl Deserializer for NewBlockTemplateScope {
264 fn deserialize<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
265 let _version = load!(u16, reader)?;
266 Ok(Self {})
267 }
268}