node/
action_kind.rs

1// DO NOT EDIT. GENERATED BY `node/build.rs`
2//
3// This file includes the [ActionKindGet] trait implementation for all action variants.
4// It also defines the [ActionKind] enum that consolidates all action types.
5//
6// Why? As a substitute of the derive macro provided by the [enum-kinds](https://crates.io/crates/enum-kinds).
7//
8// This arrangement helps eliminate macro overhead while also enabling us to aggregate multiple action types
9// into an single [ActionKind] enum.
10// That enables uncoupling through the partitioning of actions into multiple types that get combined by a
11// top-level [Action] type in a way that helps the compiler avoid the recompilation of all the actions
12// related code for every single change.
13
14use num_enum::TryFromPrimitive;
15use serde::{Deserialize, Serialize};
16use strum_macros::VariantArray;
17
18use crate::{
19    block_producer::{vrf_evaluator::BlockProducerVrfEvaluatorAction, BlockProducerAction},
20    block_producer_effectful::{
21        vrf_evaluator_effectful::BlockProducerVrfEvaluatorEffectfulAction,
22        BlockProducerEffectfulAction,
23    },
24    event_source::EventSourceAction,
25    external_snark_worker::ExternalSnarkWorkerAction,
26    external_snark_worker_effectful::ExternalSnarkWorkerEffectfulAction,
27    ledger::{read::LedgerReadAction, write::LedgerWriteAction, LedgerAction},
28    ledger_effectful::LedgerEffectfulAction,
29    p2p::{
30        callbacks::P2pCallbacksAction,
31        channels::{
32            best_tip::P2pChannelsBestTipAction,
33            rpc::P2pChannelsRpcAction,
34            signaling::{
35                discovery::P2pChannelsSignalingDiscoveryAction,
36                exchange::P2pChannelsSignalingExchangeAction,
37            },
38            snark::P2pChannelsSnarkAction,
39            snark_job_commitment::P2pChannelsSnarkJobCommitmentAction,
40            streaming_rpc::P2pChannelsStreamingRpcAction,
41            transaction::P2pChannelsTransactionAction,
42            P2pChannelsAction, P2pChannelsEffectfulAction, P2pChannelsMessageReceivedAction,
43        },
44        connection::{
45            incoming::P2pConnectionIncomingAction,
46            incoming_effectful::P2pConnectionIncomingEffectfulAction,
47            outgoing::P2pConnectionOutgoingAction,
48            outgoing_effectful::P2pConnectionOutgoingEffectfulAction, P2pConnectionAction,
49            P2pConnectionEffectfulAction,
50        },
51        disconnection::P2pDisconnectionAction,
52        disconnection_effectful::P2pDisconnectionEffectfulAction,
53        identify::P2pIdentifyAction,
54        network::{
55            identify::{
56                stream::P2pNetworkIdentifyStreamAction,
57                stream_effectful::P2pNetworkIdentifyStreamEffectfulAction,
58                P2pNetworkIdentifyAction, P2pNetworkIdentifyEffectfulAction,
59            },
60            kad::{
61                bootstrap::P2pNetworkKadBootstrapAction,
62                kad_effectful::P2pNetworkKadEffectfulAction, request::P2pNetworkKadRequestAction,
63                stream::P2pNetworkKademliaStreamAction, P2pNetworkKadAction,
64                P2pNetworkKademliaAction,
65            },
66            noise::P2pNetworkNoiseAction,
67            pnet::P2pNetworkPnetAction,
68            pnet_effectful::P2pNetworkPnetEffectfulAction,
69            pubsub::{pubsub_effectful::P2pNetworkPubsubEffectfulAction, P2pNetworkPubsubAction},
70            rpc::P2pNetworkRpcAction,
71            scheduler::P2pNetworkSchedulerAction,
72            scheduler_effectful::P2pNetworkSchedulerEffectfulAction,
73            select::P2pNetworkSelectAction,
74            yamux::P2pNetworkYamuxAction,
75            P2pNetworkAction, P2pNetworkEffectfulAction,
76        },
77        peer::P2pPeerAction,
78        P2pAction, P2pEffectfulAction, P2pInitializeAction,
79    },
80    rpc::RpcAction,
81    rpc_effectful::RpcEffectfulAction,
82    snark::{
83        block_verify::SnarkBlockVerifyAction,
84        block_verify_effectful::SnarkBlockVerifyEffectfulAction,
85        user_command_verify::SnarkUserCommandVerifyAction,
86        user_command_verify_effectful::SnarkUserCommandVerifyEffectfulAction,
87        work_verify::SnarkWorkVerifyAction, work_verify_effectful::SnarkWorkVerifyEffectfulAction,
88        SnarkAction,
89    },
90    snark_pool::{candidate::SnarkPoolCandidateAction, SnarkPoolAction, SnarkPoolEffectfulAction},
91    transaction_pool::{
92        candidate::TransactionPoolCandidateAction, TransactionPoolAction,
93        TransactionPoolEffectfulAction,
94    },
95    transition_frontier::{
96        candidate::TransitionFrontierCandidateAction,
97        genesis::TransitionFrontierGenesisAction,
98        genesis_effectful::TransitionFrontierGenesisEffectfulAction,
99        sync::{
100            ledger::{
101                snarked::TransitionFrontierSyncLedgerSnarkedAction,
102                staged::TransitionFrontierSyncLedgerStagedAction,
103                TransitionFrontierSyncLedgerAction,
104            },
105            TransitionFrontierSyncAction,
106        },
107        TransitionFrontierAction,
108    },
109    watched_accounts::WatchedAccountsAction,
110    Action, ActionKindGet, CheckTimeoutsAction,
111};
112
113/// Unified kind enum for all action types
114#[derive(
115    Serialize,
116    Deserialize,
117    VariantArray,
118    TryFromPrimitive,
119    Debug,
120    Ord,
121    PartialOrd,
122    Eq,
123    PartialEq,
124    Clone,
125    Copy,
126)]
127#[repr(u16)]
128pub enum ActionKind {
129    None,
130    BlockProducerBestTipUpdate,
131    BlockProducerBlockInject,
132    BlockProducerBlockInjected,
133    BlockProducerBlockProduced,
134    BlockProducerBlockProveInit,
135    BlockProducerBlockProvePending,
136    BlockProducerBlockProveSuccess,
137    BlockProducerBlockUnprovenBuild,
138    BlockProducerStagedLedgerDiffCreateInit,
139    BlockProducerStagedLedgerDiffCreatePending,
140    BlockProducerStagedLedgerDiffCreateSuccess,
141    BlockProducerWonSlot,
142    BlockProducerWonSlotDiscard,
143    BlockProducerWonSlotProduceInit,
144    BlockProducerWonSlotSearch,
145    BlockProducerWonSlotTransactionsGet,
146    BlockProducerWonSlotTransactionsSuccess,
147    BlockProducerWonSlotWait,
148    BlockProducerEffectfulBlockProduced,
149    BlockProducerEffectfulBlockProveInit,
150    BlockProducerEffectfulBlockProveSuccess,
151    BlockProducerEffectfulBlockUnprovenBuild,
152    BlockProducerEffectfulStagedLedgerDiffCreateInit,
153    BlockProducerEffectfulStagedLedgerDiffCreateSuccess,
154    BlockProducerEffectfulWonSlot,
155    BlockProducerEffectfulWonSlotDiscard,
156    BlockProducerVrfEvaluatorBeginDelegatorTableConstruction,
157    BlockProducerVrfEvaluatorBeginEpochEvaluation,
158    BlockProducerVrfEvaluatorCheckEpochBounds,
159    BlockProducerVrfEvaluatorCheckEpochEvaluability,
160    BlockProducerVrfEvaluatorCleanupOldSlots,
161    BlockProducerVrfEvaluatorContinueEpochEvaluation,
162    BlockProducerVrfEvaluatorEvaluateSlot,
163    BlockProducerVrfEvaluatorFinalizeDelegatorTableConstruction,
164    BlockProducerVrfEvaluatorFinalizeEvaluatorInitialization,
165    BlockProducerVrfEvaluatorFinishEpochEvaluation,
166    BlockProducerVrfEvaluatorInitializeEpochEvaluation,
167    BlockProducerVrfEvaluatorInitializeEvaluator,
168    BlockProducerVrfEvaluatorInterruptEpochEvaluation,
169    BlockProducerVrfEvaluatorProcessSlotEvaluationSuccess,
170    BlockProducerVrfEvaluatorSelectInitialSlot,
171    BlockProducerVrfEvaluatorWaitForNextEvaluation,
172    BlockProducerVrfEvaluatorEffectfulEvaluateSlot,
173    BlockProducerVrfEvaluatorEffectfulInitializeStats,
174    BlockProducerVrfEvaluatorEffectfulSlotEvaluated,
175    CheckTimeouts,
176    EventSourceNewEvent,
177    EventSourceProcessEvents,
178    EventSourceWaitForEvents,
179    EventSourceWaitTimeout,
180    ExternalSnarkWorkerCancelWork,
181    ExternalSnarkWorkerError,
182    ExternalSnarkWorkerKill,
183    ExternalSnarkWorkerKilled,
184    ExternalSnarkWorkerPruneWork,
185    ExternalSnarkWorkerStart,
186    ExternalSnarkWorkerStartTimeout,
187    ExternalSnarkWorkerStarted,
188    ExternalSnarkWorkerSubmitWork,
189    ExternalSnarkWorkerWorkCancelled,
190    ExternalSnarkWorkerWorkError,
191    ExternalSnarkWorkerWorkResult,
192    ExternalSnarkWorkerWorkTimeout,
193    ExternalSnarkWorkerEffectfulCancelWork,
194    ExternalSnarkWorkerEffectfulKill,
195    ExternalSnarkWorkerEffectfulStart,
196    ExternalSnarkWorkerEffectfulSubmitWork,
197    LedgerEffectfulReadInit,
198    LedgerEffectfulWriteInit,
199    LedgerReadFindTodos,
200    LedgerReadInit,
201    LedgerReadPending,
202    LedgerReadPrune,
203    LedgerReadSuccess,
204    LedgerWriteInit,
205    LedgerWritePending,
206    LedgerWriteSuccess,
207    P2pCallbacksP2pChannelsRpcReady,
208    P2pCallbacksP2pChannelsRpcRequestReceived,
209    P2pCallbacksP2pChannelsRpcResponseReceived,
210    P2pCallbacksP2pChannelsRpcTimeout,
211    P2pCallbacksP2pChannelsStreamingRpcReady,
212    P2pCallbacksP2pChannelsStreamingRpcResponseReceived,
213    P2pCallbacksP2pChannelsStreamingRpcTimeout,
214    P2pCallbacksP2pDisconnection,
215    P2pCallbacksP2pPubsubValidateMessage,
216    P2pCallbacksRpcRespondBestTip,
217    P2pChannelsBestTipInit,
218    P2pChannelsBestTipPending,
219    P2pChannelsBestTipReady,
220    P2pChannelsBestTipReceived,
221    P2pChannelsBestTipRequestReceived,
222    P2pChannelsBestTipRequestSend,
223    P2pChannelsBestTipResponseSend,
224    P2pChannelsEffectfulInitChannel,
225    P2pChannelsEffectfulMessageSend,
226    P2pChannelsEffectfulSignalingDiscoveryAnswerDecrypt,
227    P2pChannelsEffectfulSignalingDiscoveryOfferEncryptAndSend,
228    P2pChannelsEffectfulSignalingExchangeAnswerEncryptAndSend,
229    P2pChannelsEffectfulSignalingExchangeOfferDecrypt,
230    P2pChannelsMessageReceived,
231    P2pChannelsRpcInit,
232    P2pChannelsRpcPending,
233    P2pChannelsRpcReady,
234    P2pChannelsRpcRequestReceived,
235    P2pChannelsRpcRequestSend,
236    P2pChannelsRpcResponsePending,
237    P2pChannelsRpcResponseReceived,
238    P2pChannelsRpcResponseSend,
239    P2pChannelsRpcTimeout,
240    P2pChannelsSignalingDiscoveryAnswerDecrypted,
241    P2pChannelsSignalingDiscoveryAnswerReceived,
242    P2pChannelsSignalingDiscoveryAnswerSend,
243    P2pChannelsSignalingDiscoveryDiscoveredAccept,
244    P2pChannelsSignalingDiscoveryDiscoveredAcceptReceived,
245    P2pChannelsSignalingDiscoveryDiscoveredReceived,
246    P2pChannelsSignalingDiscoveryDiscoveredReject,
247    P2pChannelsSignalingDiscoveryDiscoveredRejectReceived,
248    P2pChannelsSignalingDiscoveryDiscoveredSend,
249    P2pChannelsSignalingDiscoveryDiscoveryRequestReceived,
250    P2pChannelsSignalingDiscoveryDiscoveryRequestSend,
251    P2pChannelsSignalingDiscoveryInit,
252    P2pChannelsSignalingDiscoveryPending,
253    P2pChannelsSignalingDiscoveryReady,
254    P2pChannelsSignalingDiscoveryRequestReceived,
255    P2pChannelsSignalingDiscoveryRequestSend,
256    P2pChannelsSignalingExchangeAnswerReceived,
257    P2pChannelsSignalingExchangeAnswerSend,
258    P2pChannelsSignalingExchangeInit,
259    P2pChannelsSignalingExchangeOfferDecryptError,
260    P2pChannelsSignalingExchangeOfferDecryptSuccess,
261    P2pChannelsSignalingExchangeOfferReceived,
262    P2pChannelsSignalingExchangeOfferSend,
263    P2pChannelsSignalingExchangePending,
264    P2pChannelsSignalingExchangeReady,
265    P2pChannelsSignalingExchangeRequestReceived,
266    P2pChannelsSignalingExchangeRequestSend,
267    P2pChannelsSnarkInit,
268    P2pChannelsSnarkLibp2pBroadcast,
269    P2pChannelsSnarkLibp2pReceived,
270    P2pChannelsSnarkPending,
271    P2pChannelsSnarkPromiseReceived,
272    P2pChannelsSnarkReady,
273    P2pChannelsSnarkReceived,
274    P2pChannelsSnarkRequestReceived,
275    P2pChannelsSnarkRequestSend,
276    P2pChannelsSnarkResponseSend,
277    P2pChannelsSnarkJobCommitmentInit,
278    P2pChannelsSnarkJobCommitmentPending,
279    P2pChannelsSnarkJobCommitmentPromiseReceived,
280    P2pChannelsSnarkJobCommitmentReady,
281    P2pChannelsSnarkJobCommitmentReceived,
282    P2pChannelsSnarkJobCommitmentRequestReceived,
283    P2pChannelsSnarkJobCommitmentRequestSend,
284    P2pChannelsSnarkJobCommitmentResponseSend,
285    P2pChannelsStreamingRpcInit,
286    P2pChannelsStreamingRpcPending,
287    P2pChannelsStreamingRpcReady,
288    P2pChannelsStreamingRpcRequestReceived,
289    P2pChannelsStreamingRpcRequestSend,
290    P2pChannelsStreamingRpcResponseNextPartGet,
291    P2pChannelsStreamingRpcResponsePartNextSend,
292    P2pChannelsStreamingRpcResponsePartReceived,
293    P2pChannelsStreamingRpcResponsePartSend,
294    P2pChannelsStreamingRpcResponsePending,
295    P2pChannelsStreamingRpcResponseReceived,
296    P2pChannelsStreamingRpcResponseSendInit,
297    P2pChannelsStreamingRpcResponseSent,
298    P2pChannelsStreamingRpcTimeout,
299    P2pChannelsTransactionInit,
300    P2pChannelsTransactionLibp2pBroadcast,
301    P2pChannelsTransactionLibp2pReceived,
302    P2pChannelsTransactionPending,
303    P2pChannelsTransactionPromiseReceived,
304    P2pChannelsTransactionReady,
305    P2pChannelsTransactionReceived,
306    P2pChannelsTransactionRequestReceived,
307    P2pChannelsTransactionRequestSend,
308    P2pChannelsTransactionResponseSend,
309    P2pConnectionIncomingAnswerReady,
310    P2pConnectionIncomingAnswerSdpCreateError,
311    P2pConnectionIncomingAnswerSdpCreatePending,
312    P2pConnectionIncomingAnswerSdpCreateSuccess,
313    P2pConnectionIncomingAnswerSendSuccess,
314    P2pConnectionIncomingError,
315    P2pConnectionIncomingFinalizeError,
316    P2pConnectionIncomingFinalizePending,
317    P2pConnectionIncomingFinalizePendingLibp2p,
318    P2pConnectionIncomingFinalizeSuccess,
319    P2pConnectionIncomingInit,
320    P2pConnectionIncomingLibp2pReceived,
321    P2pConnectionIncomingSuccess,
322    P2pConnectionIncomingTimeout,
323    P2pConnectionIncomingEffectfulConnectionAuthorizationDecryptAndCheck,
324    P2pConnectionIncomingEffectfulConnectionAuthorizationEncryptAndSend,
325    P2pConnectionIncomingEffectfulInit,
326    P2pConnectionOutgoingAnswerRecvError,
327    P2pConnectionOutgoingAnswerRecvPending,
328    P2pConnectionOutgoingAnswerRecvSuccess,
329    P2pConnectionOutgoingError,
330    P2pConnectionOutgoingFinalizeError,
331    P2pConnectionOutgoingFinalizePending,
332    P2pConnectionOutgoingFinalizeSuccess,
333    P2pConnectionOutgoingInit,
334    P2pConnectionOutgoingOfferReady,
335    P2pConnectionOutgoingOfferSdpCreateError,
336    P2pConnectionOutgoingOfferSdpCreatePending,
337    P2pConnectionOutgoingOfferSdpCreateSuccess,
338    P2pConnectionOutgoingOfferSendSuccess,
339    P2pConnectionOutgoingRandomInit,
340    P2pConnectionOutgoingReconnect,
341    P2pConnectionOutgoingSuccess,
342    P2pConnectionOutgoingTimeout,
343    P2pConnectionOutgoingEffectfulAnswerSet,
344    P2pConnectionOutgoingEffectfulConnectionAuthorizationDecryptAndCheck,
345    P2pConnectionOutgoingEffectfulConnectionAuthorizationEncryptAndSend,
346    P2pConnectionOutgoingEffectfulInit,
347    P2pConnectionOutgoingEffectfulOfferSend,
348    P2pConnectionOutgoingEffectfulRandomInit,
349    P2pDisconnectionFailedCleanup,
350    P2pDisconnectionFinish,
351    P2pDisconnectionInit,
352    P2pDisconnectionPeerClosed,
353    P2pDisconnectionRandomTry,
354    P2pDisconnectionEffectfulInit,
355    P2pEffectfulInitialize,
356    P2pIdentifyNewRequest,
357    P2pIdentifyUpdatePeerInformation,
358    P2pInitializeInitialize,
359    P2pNetworkIdentifyStreamClose,
360    P2pNetworkIdentifyStreamIncomingData,
361    P2pNetworkIdentifyStreamNew,
362    P2pNetworkIdentifyStreamPrune,
363    P2pNetworkIdentifyStreamRemoteClose,
364    P2pNetworkIdentifyStreamSendIdentify,
365    P2pNetworkIdentifyStreamEffectfulGetListenAddresses,
366    P2pNetworkKadBootstrapAppendRequest,
367    P2pNetworkKadBootstrapCreateRequests,
368    P2pNetworkKadBootstrapFinalizeRequests,
369    P2pNetworkKadBootstrapRequestDone,
370    P2pNetworkKadBootstrapRequestError,
371    P2pNetworkKadEffectfulDiscovered,
372    P2pNetworkKadEffectfulMakeRequest,
373    P2pNetworkKadRequestError,
374    P2pNetworkKadRequestMuxReady,
375    P2pNetworkKadRequestNew,
376    P2pNetworkKadRequestPeerIsConnecting,
377    P2pNetworkKadRequestPrune,
378    P2pNetworkKadRequestReplyReceived,
379    P2pNetworkKadRequestRequestSent,
380    P2pNetworkKadRequestStreamIsCreating,
381    P2pNetworkKadRequestStreamReady,
382    P2pNetworkKademliaAnswerFindNodeRequest,
383    P2pNetworkKademliaBootstrapFinished,
384    P2pNetworkKademliaStartBootstrap,
385    P2pNetworkKademliaUpdateFindNodeRequest,
386    P2pNetworkKademliaUpdateRoutingTable,
387    P2pNetworkKademliaStreamClose,
388    P2pNetworkKademliaStreamIncomingData,
389    P2pNetworkKademliaStreamNew,
390    P2pNetworkKademliaStreamOutgoingDataReady,
391    P2pNetworkKademliaStreamPrune,
392    P2pNetworkKademliaStreamRemoteClose,
393    P2pNetworkKademliaStreamSendRequest,
394    P2pNetworkKademliaStreamSendResponse,
395    P2pNetworkKademliaStreamWaitIncoming,
396    P2pNetworkKademliaStreamWaitOutgoing,
397    P2pNetworkNoiseDecryptedData,
398    P2pNetworkNoiseHandshakeDone,
399    P2pNetworkNoiseIncomingChunk,
400    P2pNetworkNoiseIncomingData,
401    P2pNetworkNoiseInit,
402    P2pNetworkNoiseOutgoingChunk,
403    P2pNetworkNoiseOutgoingChunkSelectMux,
404    P2pNetworkNoiseOutgoingData,
405    P2pNetworkNoiseOutgoingDataSelectMux,
406    P2pNetworkPnetIncomingData,
407    P2pNetworkPnetOutgoingData,
408    P2pNetworkPnetSetupNonce,
409    P2pNetworkPnetTimeout,
410    P2pNetworkPnetEffectfulOutgoingData,
411    P2pNetworkPnetEffectfulSetupNonce,
412    P2pNetworkPubsubBroadcast,
413    P2pNetworkPubsubBroadcastSigned,
414    P2pNetworkPubsubBroadcastValidatedMessage,
415    P2pNetworkPubsubGraft,
416    P2pNetworkPubsubHandleIncomingMessage,
417    P2pNetworkPubsubIgnoreMessage,
418    P2pNetworkPubsubIncomingData,
419    P2pNetworkPubsubIncomingMessage,
420    P2pNetworkPubsubIncomingMessageCleanup,
421    P2pNetworkPubsubNewStream,
422    P2pNetworkPubsubOutgoingData,
423    P2pNetworkPubsubOutgoingMessage,
424    P2pNetworkPubsubOutgoingMessageClear,
425    P2pNetworkPubsubOutgoingMessageError,
426    P2pNetworkPubsubPrune,
427    P2pNetworkPubsubPruneMessages,
428    P2pNetworkPubsubRejectMessage,
429    P2pNetworkPubsubSign,
430    P2pNetworkPubsubSignError,
431    P2pNetworkPubsubValidateIncomingMessage,
432    P2pNetworkPubsubValidateIncomingMessages,
433    P2pNetworkPubsubWebRtcRebroadcast,
434    P2pNetworkPubsubEffectfulSign,
435    P2pNetworkPubsubEffectfulValidateIncomingMessages,
436    P2pNetworkRpcHeartbeatSend,
437    P2pNetworkRpcIncomingData,
438    P2pNetworkRpcIncomingMessage,
439    P2pNetworkRpcInit,
440    P2pNetworkRpcOutgoingData,
441    P2pNetworkRpcOutgoingQuery,
442    P2pNetworkRpcOutgoingResponse,
443    P2pNetworkRpcPrunePending,
444    P2pNetworkSchedulerDisconnect,
445    P2pNetworkSchedulerDisconnected,
446    P2pNetworkSchedulerError,
447    P2pNetworkSchedulerIncomingConnectionIsReady,
448    P2pNetworkSchedulerIncomingDataDidReceive,
449    P2pNetworkSchedulerIncomingDataIsReady,
450    P2pNetworkSchedulerIncomingDidAccept,
451    P2pNetworkSchedulerInterfaceDetected,
452    P2pNetworkSchedulerInterfaceExpired,
453    P2pNetworkSchedulerListenerError,
454    P2pNetworkSchedulerListenerReady,
455    P2pNetworkSchedulerOutgoingConnect,
456    P2pNetworkSchedulerOutgoingDidConnect,
457    P2pNetworkSchedulerPrune,
458    P2pNetworkSchedulerPruneStream,
459    P2pNetworkSchedulerSelectDone,
460    P2pNetworkSchedulerSelectError,
461    P2pNetworkSchedulerYamuxDidInit,
462    P2pNetworkSchedulerEffectfulDisconnect,
463    P2pNetworkSchedulerEffectfulIncomingConnectionIsReady,
464    P2pNetworkSchedulerEffectfulIncomingDataIsReady,
465    P2pNetworkSchedulerEffectfulIncomingDidAccept,
466    P2pNetworkSchedulerEffectfulInterfaceDetected,
467    P2pNetworkSchedulerEffectfulNoiseSelectDone,
468    P2pNetworkSchedulerEffectfulOutgoingConnect,
469    P2pNetworkSchedulerEffectfulOutgoingDidConnect,
470    P2pNetworkSelectIncomingData,
471    P2pNetworkSelectIncomingDataAuth,
472    P2pNetworkSelectIncomingDataMux,
473    P2pNetworkSelectIncomingPayload,
474    P2pNetworkSelectIncomingPayloadAuth,
475    P2pNetworkSelectIncomingPayloadMux,
476    P2pNetworkSelectIncomingToken,
477    P2pNetworkSelectInit,
478    P2pNetworkSelectOutgoingTokens,
479    P2pNetworkSelectTimeout,
480    P2pNetworkYamuxIncomingData,
481    P2pNetworkYamuxIncomingFrame,
482    P2pNetworkYamuxOpenStream,
483    P2pNetworkYamuxOutgoingData,
484    P2pNetworkYamuxOutgoingFrame,
485    P2pNetworkYamuxPingStream,
486    P2pPeerBestTipUpdate,
487    P2pPeerDiscovered,
488    P2pPeerReady,
489    P2pPeerRemove,
490    RpcActionStatsGet,
491    RpcBestChain,
492    RpcBlockGet,
493    RpcBlockProducerStatsGet,
494    RpcConsensusConstantsGet,
495    RpcConsensusTimeGet,
496    RpcDiscoveryBoostrapStats,
497    RpcDiscoveryRoutingTable,
498    RpcFinish,
499    RpcGenesisBlock,
500    RpcGlobalStateGet,
501    RpcHealthCheck,
502    RpcHeartbeatGet,
503    RpcLedgerAccountDelegatorsGetInit,
504    RpcLedgerAccountDelegatorsGetPending,
505    RpcLedgerAccountDelegatorsGetSuccess,
506    RpcLedgerAccountsGetInit,
507    RpcLedgerAccountsGetPending,
508    RpcLedgerAccountsGetSuccess,
509    RpcLedgerStatusGetInit,
510    RpcLedgerStatusGetPending,
511    RpcLedgerStatusGetSuccess,
512    RpcMessageProgressGet,
513    RpcP2pConnectionIncomingAnswerReady,
514    RpcP2pConnectionIncomingError,
515    RpcP2pConnectionIncomingInit,
516    RpcP2pConnectionIncomingPending,
517    RpcP2pConnectionIncomingRespond,
518    RpcP2pConnectionIncomingSuccess,
519    RpcP2pConnectionOutgoingError,
520    RpcP2pConnectionOutgoingInit,
521    RpcP2pConnectionOutgoingPending,
522    RpcP2pConnectionOutgoingSuccess,
523    RpcPeersGet,
524    RpcPooledUserCommands,
525    RpcPooledZkappCommands,
526    RpcReadinessCheck,
527    RpcScanStateSummaryGetInit,
528    RpcScanStateSummaryGetPending,
529    RpcScanStateSummaryGetSuccess,
530    RpcScanStateSummaryLedgerGetInit,
531    RpcSnarkPoolAvailableJobsGet,
532    RpcSnarkPoolCompletedJobsGet,
533    RpcSnarkPoolJobGet,
534    RpcSnarkPoolPendingJobsGet,
535    RpcSnarkerConfigGet,
536    RpcSnarkerJobCommit,
537    RpcSnarkerJobSpec,
538    RpcSnarkerWorkersGet,
539    RpcStatusGet,
540    RpcSyncStatsGet,
541    RpcTransactionInjectFailure,
542    RpcTransactionInjectInit,
543    RpcTransactionInjectPending,
544    RpcTransactionInjectRejected,
545    RpcTransactionInjectSuccess,
546    RpcTransactionPool,
547    RpcTransactionStatusGet,
548    RpcTransitionFrontierUserCommandsGet,
549    RpcEffectfulActionStatsGet,
550    RpcEffectfulBestChain,
551    RpcEffectfulBlockGet,
552    RpcEffectfulBlockProducerStatsGet,
553    RpcEffectfulConsensusConstantsGet,
554    RpcEffectfulConsensusTimeGet,
555    RpcEffectfulDiscoveryBoostrapStats,
556    RpcEffectfulDiscoveryRoutingTable,
557    RpcEffectfulGenesisBlock,
558    RpcEffectfulGlobalStateGet,
559    RpcEffectfulHealthCheck,
560    RpcEffectfulHeartbeatGet,
561    RpcEffectfulLedgerAccountDelegatorsGetSuccess,
562    RpcEffectfulLedgerAccountsGetSuccess,
563    RpcEffectfulLedgerStatusGetSuccess,
564    RpcEffectfulMessageProgressGet,
565    RpcEffectfulP2pConnectionIncomingError,
566    RpcEffectfulP2pConnectionIncomingRespond,
567    RpcEffectfulP2pConnectionIncomingSuccess,
568    RpcEffectfulP2pConnectionOutgoingError,
569    RpcEffectfulP2pConnectionOutgoingSuccess,
570    RpcEffectfulPeersGet,
571    RpcEffectfulPooledUserCommands,
572    RpcEffectfulPooledZkappCommands,
573    RpcEffectfulReadinessCheck,
574    RpcEffectfulScanStateSummaryGetSuccess,
575    RpcEffectfulSnarkPoolAvailableJobsGet,
576    RpcEffectfulSnarkPoolCompletedJobsGet,
577    RpcEffectfulSnarkPoolJobGet,
578    RpcEffectfulSnarkPoolPendingJobsGet,
579    RpcEffectfulSnarkerConfigGet,
580    RpcEffectfulSnarkerJobCommit,
581    RpcEffectfulSnarkerJobSpec,
582    RpcEffectfulSnarkerWorkersGet,
583    RpcEffectfulStatusGet,
584    RpcEffectfulSyncStatsGet,
585    RpcEffectfulTransactionInjectFailure,
586    RpcEffectfulTransactionInjectRejected,
587    RpcEffectfulTransactionInjectSuccess,
588    RpcEffectfulTransactionPool,
589    RpcEffectfulTransactionStatusGet,
590    RpcEffectfulTransitionFrontierUserCommandsGet,
591    SnarkBlockVerifyError,
592    SnarkBlockVerifyFinish,
593    SnarkBlockVerifyInit,
594    SnarkBlockVerifyPending,
595    SnarkBlockVerifySuccess,
596    SnarkBlockVerifyEffectfulInit,
597    SnarkPoolAutoCreateCommitment,
598    SnarkPoolCheckTimeouts,
599    SnarkPoolCommitmentAdd,
600    SnarkPoolCommitmentCreate,
601    SnarkPoolCommitmentCreateMany,
602    SnarkPoolJobCommitmentTimeout,
603    SnarkPoolJobsUpdate,
604    SnarkPoolP2pSend,
605    SnarkPoolP2pSendAll,
606    SnarkPoolWorkAdd,
607    SnarkPoolCandidateInfoReceived,
608    SnarkPoolCandidatePeerPrune,
609    SnarkPoolCandidateWorkFetchAll,
610    SnarkPoolCandidateWorkFetchError,
611    SnarkPoolCandidateWorkFetchInit,
612    SnarkPoolCandidateWorkFetchPending,
613    SnarkPoolCandidateWorkFetchSuccess,
614    SnarkPoolCandidateWorkVerifyError,
615    SnarkPoolCandidateWorkVerifyNext,
616    SnarkPoolCandidateWorkVerifyPending,
617    SnarkPoolCandidateWorkVerifySuccess,
618    SnarkPoolEffectfulSnarkPoolJobsRandomChoose,
619    SnarkUserCommandVerifyError,
620    SnarkUserCommandVerifyFinish,
621    SnarkUserCommandVerifyInit,
622    SnarkUserCommandVerifyPending,
623    SnarkUserCommandVerifySuccess,
624    SnarkUserCommandVerifyEffectfulInit,
625    SnarkWorkVerifyError,
626    SnarkWorkVerifyFinish,
627    SnarkWorkVerifyInit,
628    SnarkWorkVerifyPending,
629    SnarkWorkVerifySuccess,
630    SnarkWorkVerifyEffectfulInit,
631    TransactionPoolApplyTransitionFrontierDiff,
632    TransactionPoolApplyTransitionFrontierDiffWithAccounts,
633    TransactionPoolApplyVerifiedDiff,
634    TransactionPoolApplyVerifiedDiffWithAccounts,
635    TransactionPoolBestTipChanged,
636    TransactionPoolBestTipChangedWithAccounts,
637    TransactionPoolCollectTransactionsByFee,
638    TransactionPoolP2pSend,
639    TransactionPoolP2pSendAll,
640    TransactionPoolRebroadcast,
641    TransactionPoolStartVerify,
642    TransactionPoolStartVerifyWithAccounts,
643    TransactionPoolVerifyError,
644    TransactionPoolVerifySuccess,
645    TransactionPoolCandidateFetchAll,
646    TransactionPoolCandidateFetchError,
647    TransactionPoolCandidateFetchInit,
648    TransactionPoolCandidateFetchPending,
649    TransactionPoolCandidateFetchSuccess,
650    TransactionPoolCandidateInfoReceived,
651    TransactionPoolCandidateLibp2pTransactionsReceived,
652    TransactionPoolCandidatePeerPrune,
653    TransactionPoolCandidateVerifyError,
654    TransactionPoolCandidateVerifyNext,
655    TransactionPoolCandidateVerifyPending,
656    TransactionPoolCandidateVerifySuccess,
657    TransactionPoolEffectfulFetchAccounts,
658    TransitionFrontierGenesisInject,
659    TransitionFrontierGenesisProvenInject,
660    TransitionFrontierSyncFailed,
661    TransitionFrontierSynced,
662    TransitionFrontierCandidateBlockChainProofUpdate,
663    TransitionFrontierCandidateBlockPrevalidateError,
664    TransitionFrontierCandidateBlockPrevalidateSuccess,
665    TransitionFrontierCandidateBlockReceived,
666    TransitionFrontierCandidateBlockSnarkVerifyError,
667    TransitionFrontierCandidateBlockSnarkVerifyPending,
668    TransitionFrontierCandidateBlockSnarkVerifySuccess,
669    TransitionFrontierCandidateP2pBestTipUpdate,
670    TransitionFrontierCandidatePrune,
671    TransitionFrontierCandidateTransitionFrontierSyncTargetUpdate,
672    TransitionFrontierGenesisLedgerLoadInit,
673    TransitionFrontierGenesisLedgerLoadPending,
674    TransitionFrontierGenesisLedgerLoadSuccess,
675    TransitionFrontierGenesisProduce,
676    TransitionFrontierGenesisProveInit,
677    TransitionFrontierGenesisProvePending,
678    TransitionFrontierGenesisProveSuccess,
679    TransitionFrontierGenesisEffectfulLedgerLoadInit,
680    TransitionFrontierGenesisEffectfulProveInit,
681    TransitionFrontierSyncBestTipUpdate,
682    TransitionFrontierSyncBlocksFetchSuccess,
683    TransitionFrontierSyncBlocksNextApplyError,
684    TransitionFrontierSyncBlocksNextApplyInit,
685    TransitionFrontierSyncBlocksNextApplyPending,
686    TransitionFrontierSyncBlocksNextApplySuccess,
687    TransitionFrontierSyncBlocksPeerQueryError,
688    TransitionFrontierSyncBlocksPeerQueryInit,
689    TransitionFrontierSyncBlocksPeerQueryPending,
690    TransitionFrontierSyncBlocksPeerQueryRetry,
691    TransitionFrontierSyncBlocksPeerQuerySuccess,
692    TransitionFrontierSyncBlocksPeersQuery,
693    TransitionFrontierSyncBlocksPending,
694    TransitionFrontierSyncBlocksSendToArchive,
695    TransitionFrontierSyncBlocksSuccess,
696    TransitionFrontierSyncCommitInit,
697    TransitionFrontierSyncCommitPending,
698    TransitionFrontierSyncCommitSuccess,
699    TransitionFrontierSyncInit,
700    TransitionFrontierSyncLedgerNextEpochPending,
701    TransitionFrontierSyncLedgerNextEpochSuccess,
702    TransitionFrontierSyncLedgerRootPending,
703    TransitionFrontierSyncLedgerRootSuccess,
704    TransitionFrontierSyncLedgerStakingPending,
705    TransitionFrontierSyncLedgerStakingSuccess,
706    TransitionFrontierSyncLedgerInit,
707    TransitionFrontierSyncLedgerSuccess,
708    TransitionFrontierSyncLedgerSnarkedChildAccountsAccepted,
709    TransitionFrontierSyncLedgerSnarkedChildAccountsReceived,
710    TransitionFrontierSyncLedgerSnarkedChildAccountsRejected,
711    TransitionFrontierSyncLedgerSnarkedChildHashesAccepted,
712    TransitionFrontierSyncLedgerSnarkedChildHashesReceived,
713    TransitionFrontierSyncLedgerSnarkedChildHashesRejected,
714    TransitionFrontierSyncLedgerSnarkedMerkleTreeSyncPending,
715    TransitionFrontierSyncLedgerSnarkedMerkleTreeSyncSuccess,
716    TransitionFrontierSyncLedgerSnarkedNumAccountsAccepted,
717    TransitionFrontierSyncLedgerSnarkedNumAccountsReceived,
718    TransitionFrontierSyncLedgerSnarkedNumAccountsRejected,
719    TransitionFrontierSyncLedgerSnarkedNumAccountsSuccess,
720    TransitionFrontierSyncLedgerSnarkedPeerQueryAddressError,
721    TransitionFrontierSyncLedgerSnarkedPeerQueryAddressInit,
722    TransitionFrontierSyncLedgerSnarkedPeerQueryAddressPending,
723    TransitionFrontierSyncLedgerSnarkedPeerQueryAddressRetry,
724    TransitionFrontierSyncLedgerSnarkedPeerQueryAddressSuccess,
725    TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsError,
726    TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsInit,
727    TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsPending,
728    TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsRetry,
729    TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsSuccess,
730    TransitionFrontierSyncLedgerSnarkedPeersQuery,
731    TransitionFrontierSyncLedgerSnarkedPending,
732    TransitionFrontierSyncLedgerSnarkedSuccess,
733    TransitionFrontierSyncLedgerStagedPartsFetchPending,
734    TransitionFrontierSyncLedgerStagedPartsFetchSuccess,
735    TransitionFrontierSyncLedgerStagedPartsPeerFetchError,
736    TransitionFrontierSyncLedgerStagedPartsPeerFetchInit,
737    TransitionFrontierSyncLedgerStagedPartsPeerFetchPending,
738    TransitionFrontierSyncLedgerStagedPartsPeerFetchSuccess,
739    TransitionFrontierSyncLedgerStagedPartsPeerInvalid,
740    TransitionFrontierSyncLedgerStagedPartsPeerValid,
741    TransitionFrontierSyncLedgerStagedReconstructEmpty,
742    TransitionFrontierSyncLedgerStagedReconstructError,
743    TransitionFrontierSyncLedgerStagedReconstructInit,
744    TransitionFrontierSyncLedgerStagedReconstructPending,
745    TransitionFrontierSyncLedgerStagedReconstructSuccess,
746    TransitionFrontierSyncLedgerStagedSuccess,
747    WatchedAccountsAdd,
748    WatchedAccountsBlockLedgerQueryInit,
749    WatchedAccountsBlockLedgerQueryPending,
750    WatchedAccountsBlockLedgerQuerySuccess,
751    WatchedAccountsLedgerInitialStateGetError,
752    WatchedAccountsLedgerInitialStateGetInit,
753    WatchedAccountsLedgerInitialStateGetPending,
754    WatchedAccountsLedgerInitialStateGetRetry,
755    WatchedAccountsLedgerInitialStateGetSuccess,
756    WatchedAccountsTransactionsIncludedInBlock,
757}
758
759impl ActionKind {
760    pub const COUNT: u16 = 628;
761}
762
763impl std::fmt::Display for ActionKind {
764    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
765        write!(f, "{self:?}")
766    }
767}
768
769impl ActionKindGet for Action {
770    fn kind(&self) -> ActionKind {
771        match self {
772            Self::CheckTimeouts(a) => a.kind(),
773            Self::EventSource(a) => a.kind(),
774            Self::P2p(a) => a.kind(),
775            Self::P2pEffectful(a) => a.kind(),
776            Self::P2pCallbacks(a) => a.kind(),
777            Self::Ledger(a) => a.kind(),
778            Self::LedgerEffects(a) => a.kind(),
779            Self::Snark(a) => a.kind(),
780            Self::TransitionFrontier(a) => a.kind(),
781            Self::SnarkPool(a) => a.kind(),
782            Self::SnarkPoolEffect(a) => a.kind(),
783            Self::TransactionPool(a) => a.kind(),
784            Self::TransactionPoolEffect(a) => a.kind(),
785            Self::ExternalSnarkWorker(a) => a.kind(),
786            Self::ExternalSnarkWorkerEffects(a) => a.kind(),
787            Self::BlockProducer(a) => a.kind(),
788            Self::BlockProducerEffectful(a) => a.kind(),
789            Self::Rpc(a) => a.kind(),
790            Self::RpcEffectful(a) => a.kind(),
791            Self::WatchedAccounts(a) => a.kind(),
792        }
793    }
794}
795
796impl ActionKindGet for CheckTimeoutsAction {
797    fn kind(&self) -> ActionKind {
798        ActionKind::CheckTimeouts
799    }
800}
801
802impl ActionKindGet for EventSourceAction {
803    fn kind(&self) -> ActionKind {
804        match self {
805            Self::ProcessEvents => ActionKind::EventSourceProcessEvents,
806            Self::NewEvent { .. } => ActionKind::EventSourceNewEvent,
807            Self::WaitForEvents => ActionKind::EventSourceWaitForEvents,
808            Self::WaitTimeout => ActionKind::EventSourceWaitTimeout,
809        }
810    }
811}
812
813impl ActionKindGet for P2pAction {
814    fn kind(&self) -> ActionKind {
815        match self {
816            Self::Initialization(a) => a.kind(),
817            Self::Connection(a) => a.kind(),
818            Self::Disconnection(a) => a.kind(),
819            Self::Identify(a) => a.kind(),
820            Self::Channels(a) => a.kind(),
821            Self::Peer(a) => a.kind(),
822            Self::Network(a) => a.kind(),
823        }
824    }
825}
826
827impl ActionKindGet for P2pEffectfulAction {
828    fn kind(&self) -> ActionKind {
829        match self {
830            Self::Channels(a) => a.kind(),
831            Self::Connection(a) => a.kind(),
832            Self::Disconnection(a) => a.kind(),
833            Self::Network(a) => a.kind(),
834            Self::Initialize => ActionKind::P2pEffectfulInitialize,
835        }
836    }
837}
838
839impl ActionKindGet for P2pCallbacksAction {
840    fn kind(&self) -> ActionKind {
841        match self {
842            Self::P2pChannelsRpcReady { .. } => ActionKind::P2pCallbacksP2pChannelsRpcReady,
843            Self::P2pChannelsRpcTimeout { .. } => ActionKind::P2pCallbacksP2pChannelsRpcTimeout,
844            Self::P2pChannelsRpcResponseReceived { .. } => {
845                ActionKind::P2pCallbacksP2pChannelsRpcResponseReceived
846            }
847            Self::P2pChannelsRpcRequestReceived { .. } => {
848                ActionKind::P2pCallbacksP2pChannelsRpcRequestReceived
849            }
850            Self::P2pChannelsStreamingRpcReady => {
851                ActionKind::P2pCallbacksP2pChannelsStreamingRpcReady
852            }
853            Self::P2pChannelsStreamingRpcTimeout { .. } => {
854                ActionKind::P2pCallbacksP2pChannelsStreamingRpcTimeout
855            }
856            Self::P2pChannelsStreamingRpcResponseReceived { .. } => {
857                ActionKind::P2pCallbacksP2pChannelsStreamingRpcResponseReceived
858            }
859            Self::P2pDisconnection { .. } => ActionKind::P2pCallbacksP2pDisconnection,
860            Self::RpcRespondBestTip { .. } => ActionKind::P2pCallbacksRpcRespondBestTip,
861            Self::P2pPubsubValidateMessage { .. } => {
862                ActionKind::P2pCallbacksP2pPubsubValidateMessage
863            }
864        }
865    }
866}
867
868impl ActionKindGet for LedgerAction {
869    fn kind(&self) -> ActionKind {
870        match self {
871            Self::Write(a) => a.kind(),
872            Self::Read(a) => a.kind(),
873        }
874    }
875}
876
877impl ActionKindGet for LedgerEffectfulAction {
878    fn kind(&self) -> ActionKind {
879        match self {
880            Self::WriteInit { .. } => ActionKind::LedgerEffectfulWriteInit,
881            Self::ReadInit { .. } => ActionKind::LedgerEffectfulReadInit,
882        }
883    }
884}
885
886impl ActionKindGet for SnarkAction {
887    fn kind(&self) -> ActionKind {
888        match self {
889            Self::BlockVerify(a) => a.kind(),
890            Self::BlockVerifyEffect(a) => a.kind(),
891            Self::WorkVerify(a) => a.kind(),
892            Self::WorkVerifyEffect(a) => a.kind(),
893            Self::UserCommandVerify(a) => a.kind(),
894            Self::UserCommandVerifyEffect(a) => a.kind(),
895        }
896    }
897}
898
899impl ActionKindGet for TransitionFrontierAction {
900    fn kind(&self) -> ActionKind {
901        match self {
902            Self::Genesis(a) => a.kind(),
903            Self::GenesisEffect(a) => a.kind(),
904            Self::Candidate(a) => a.kind(),
905            Self::Sync(a) => a.kind(),
906            Self::GenesisInject => ActionKind::TransitionFrontierGenesisInject,
907            Self::GenesisProvenInject => ActionKind::TransitionFrontierGenesisProvenInject,
908            Self::Synced { .. } => ActionKind::TransitionFrontierSynced,
909            Self::SyncFailed { .. } => ActionKind::TransitionFrontierSyncFailed,
910        }
911    }
912}
913
914impl ActionKindGet for SnarkPoolAction {
915    fn kind(&self) -> ActionKind {
916        match self {
917            Self::Candidate(a) => a.kind(),
918            Self::JobsUpdate { .. } => ActionKind::SnarkPoolJobsUpdate,
919            Self::AutoCreateCommitment => ActionKind::SnarkPoolAutoCreateCommitment,
920            Self::CommitmentCreateMany { .. } => ActionKind::SnarkPoolCommitmentCreateMany,
921            Self::CommitmentCreate { .. } => ActionKind::SnarkPoolCommitmentCreate,
922            Self::CommitmentAdd { .. } => ActionKind::SnarkPoolCommitmentAdd,
923            Self::WorkAdd { .. } => ActionKind::SnarkPoolWorkAdd,
924            Self::P2pSendAll => ActionKind::SnarkPoolP2pSendAll,
925            Self::P2pSend { .. } => ActionKind::SnarkPoolP2pSend,
926            Self::CheckTimeouts => ActionKind::SnarkPoolCheckTimeouts,
927            Self::JobCommitmentTimeout { .. } => ActionKind::SnarkPoolJobCommitmentTimeout,
928        }
929    }
930}
931
932impl ActionKindGet for SnarkPoolEffectfulAction {
933    fn kind(&self) -> ActionKind {
934        match self {
935            Self::SnarkPoolJobsRandomChoose { .. } => {
936                ActionKind::SnarkPoolEffectfulSnarkPoolJobsRandomChoose
937            }
938        }
939    }
940}
941
942impl ActionKindGet for TransactionPoolAction {
943    fn kind(&self) -> ActionKind {
944        match self {
945            Self::Candidate(a) => a.kind(),
946            Self::StartVerify { .. } => ActionKind::TransactionPoolStartVerify,
947            Self::StartVerifyWithAccounts { .. } => {
948                ActionKind::TransactionPoolStartVerifyWithAccounts
949            }
950            Self::VerifySuccess { .. } => ActionKind::TransactionPoolVerifySuccess,
951            Self::VerifyError { .. } => ActionKind::TransactionPoolVerifyError,
952            Self::BestTipChanged { .. } => ActionKind::TransactionPoolBestTipChanged,
953            Self::BestTipChangedWithAccounts { .. } => {
954                ActionKind::TransactionPoolBestTipChangedWithAccounts
955            }
956            Self::ApplyVerifiedDiff { .. } => ActionKind::TransactionPoolApplyVerifiedDiff,
957            Self::ApplyVerifiedDiffWithAccounts { .. } => {
958                ActionKind::TransactionPoolApplyVerifiedDiffWithAccounts
959            }
960            Self::ApplyTransitionFrontierDiff { .. } => {
961                ActionKind::TransactionPoolApplyTransitionFrontierDiff
962            }
963            Self::ApplyTransitionFrontierDiffWithAccounts { .. } => {
964                ActionKind::TransactionPoolApplyTransitionFrontierDiffWithAccounts
965            }
966            Self::Rebroadcast { .. } => ActionKind::TransactionPoolRebroadcast,
967            Self::CollectTransactionsByFee => ActionKind::TransactionPoolCollectTransactionsByFee,
968            Self::P2pSendAll => ActionKind::TransactionPoolP2pSendAll,
969            Self::P2pSend { .. } => ActionKind::TransactionPoolP2pSend,
970        }
971    }
972}
973
974impl ActionKindGet for TransactionPoolEffectfulAction {
975    fn kind(&self) -> ActionKind {
976        match self {
977            Self::FetchAccounts { .. } => ActionKind::TransactionPoolEffectfulFetchAccounts,
978        }
979    }
980}
981
982impl ActionKindGet for ExternalSnarkWorkerAction {
983    fn kind(&self) -> ActionKind {
984        match self {
985            Self::Start => ActionKind::ExternalSnarkWorkerStart,
986            Self::Started => ActionKind::ExternalSnarkWorkerStarted,
987            Self::StartTimeout { .. } => ActionKind::ExternalSnarkWorkerStartTimeout,
988            Self::Kill => ActionKind::ExternalSnarkWorkerKill,
989            Self::Killed => ActionKind::ExternalSnarkWorkerKilled,
990            Self::SubmitWork { .. } => ActionKind::ExternalSnarkWorkerSubmitWork,
991            Self::WorkResult { .. } => ActionKind::ExternalSnarkWorkerWorkResult,
992            Self::WorkError { .. } => ActionKind::ExternalSnarkWorkerWorkError,
993            Self::WorkTimeout { .. } => ActionKind::ExternalSnarkWorkerWorkTimeout,
994            Self::CancelWork => ActionKind::ExternalSnarkWorkerCancelWork,
995            Self::WorkCancelled => ActionKind::ExternalSnarkWorkerWorkCancelled,
996            Self::PruneWork => ActionKind::ExternalSnarkWorkerPruneWork,
997            Self::Error { .. } => ActionKind::ExternalSnarkWorkerError,
998        }
999    }
1000}
1001
1002impl ActionKindGet for ExternalSnarkWorkerEffectfulAction {
1003    fn kind(&self) -> ActionKind {
1004        match self {
1005            Self::Start { .. } => ActionKind::ExternalSnarkWorkerEffectfulStart,
1006            Self::Kill => ActionKind::ExternalSnarkWorkerEffectfulKill,
1007            Self::SubmitWork { .. } => ActionKind::ExternalSnarkWorkerEffectfulSubmitWork,
1008            Self::CancelWork => ActionKind::ExternalSnarkWorkerEffectfulCancelWork,
1009        }
1010    }
1011}
1012
1013impl ActionKindGet for BlockProducerAction {
1014    fn kind(&self) -> ActionKind {
1015        match self {
1016            Self::VrfEvaluator(a) => a.kind(),
1017            Self::BestTipUpdate { .. } => ActionKind::BlockProducerBestTipUpdate,
1018            Self::WonSlotSearch => ActionKind::BlockProducerWonSlotSearch,
1019            Self::WonSlot { .. } => ActionKind::BlockProducerWonSlot,
1020            Self::WonSlotDiscard { .. } => ActionKind::BlockProducerWonSlotDiscard,
1021            Self::WonSlotWait => ActionKind::BlockProducerWonSlotWait,
1022            Self::WonSlotTransactionsGet => ActionKind::BlockProducerWonSlotTransactionsGet,
1023            Self::WonSlotTransactionsSuccess { .. } => {
1024                ActionKind::BlockProducerWonSlotTransactionsSuccess
1025            }
1026            Self::WonSlotProduceInit => ActionKind::BlockProducerWonSlotProduceInit,
1027            Self::StagedLedgerDiffCreateInit => ActionKind::BlockProducerStagedLedgerDiffCreateInit,
1028            Self::StagedLedgerDiffCreatePending => {
1029                ActionKind::BlockProducerStagedLedgerDiffCreatePending
1030            }
1031            Self::StagedLedgerDiffCreateSuccess { .. } => {
1032                ActionKind::BlockProducerStagedLedgerDiffCreateSuccess
1033            }
1034            Self::BlockUnprovenBuild => ActionKind::BlockProducerBlockUnprovenBuild,
1035            Self::BlockProveInit => ActionKind::BlockProducerBlockProveInit,
1036            Self::BlockProvePending => ActionKind::BlockProducerBlockProvePending,
1037            Self::BlockProveSuccess { .. } => ActionKind::BlockProducerBlockProveSuccess,
1038            Self::BlockProduced => ActionKind::BlockProducerBlockProduced,
1039            Self::BlockInject => ActionKind::BlockProducerBlockInject,
1040            Self::BlockInjected => ActionKind::BlockProducerBlockInjected,
1041        }
1042    }
1043}
1044
1045impl ActionKindGet for BlockProducerEffectfulAction {
1046    fn kind(&self) -> ActionKind {
1047        match self {
1048            Self::VrfEvaluator(a) => a.kind(),
1049            Self::WonSlot { .. } => ActionKind::BlockProducerEffectfulWonSlot,
1050            Self::WonSlotDiscard { .. } => ActionKind::BlockProducerEffectfulWonSlotDiscard,
1051            Self::StagedLedgerDiffCreateInit => {
1052                ActionKind::BlockProducerEffectfulStagedLedgerDiffCreateInit
1053            }
1054            Self::StagedLedgerDiffCreateSuccess => {
1055                ActionKind::BlockProducerEffectfulStagedLedgerDiffCreateSuccess
1056            }
1057            Self::BlockUnprovenBuild => ActionKind::BlockProducerEffectfulBlockUnprovenBuild,
1058            Self::BlockProveInit => ActionKind::BlockProducerEffectfulBlockProveInit,
1059            Self::BlockProveSuccess => ActionKind::BlockProducerEffectfulBlockProveSuccess,
1060            Self::BlockProduced { .. } => ActionKind::BlockProducerEffectfulBlockProduced,
1061        }
1062    }
1063}
1064
1065impl ActionKindGet for RpcAction {
1066    fn kind(&self) -> ActionKind {
1067        match self {
1068            Self::GlobalStateGet { .. } => ActionKind::RpcGlobalStateGet,
1069            Self::StatusGet { .. } => ActionKind::RpcStatusGet,
1070            Self::HeartbeatGet { .. } => ActionKind::RpcHeartbeatGet,
1071            Self::ActionStatsGet { .. } => ActionKind::RpcActionStatsGet,
1072            Self::SyncStatsGet { .. } => ActionKind::RpcSyncStatsGet,
1073            Self::BlockProducerStatsGet { .. } => ActionKind::RpcBlockProducerStatsGet,
1074            Self::MessageProgressGet { .. } => ActionKind::RpcMessageProgressGet,
1075            Self::PeersGet { .. } => ActionKind::RpcPeersGet,
1076            Self::P2pConnectionOutgoingInit { .. } => ActionKind::RpcP2pConnectionOutgoingInit,
1077            Self::P2pConnectionOutgoingPending { .. } => {
1078                ActionKind::RpcP2pConnectionOutgoingPending
1079            }
1080            Self::P2pConnectionOutgoingError { .. } => ActionKind::RpcP2pConnectionOutgoingError,
1081            Self::P2pConnectionOutgoingSuccess { .. } => {
1082                ActionKind::RpcP2pConnectionOutgoingSuccess
1083            }
1084            Self::P2pConnectionIncomingInit { .. } => ActionKind::RpcP2pConnectionIncomingInit,
1085            Self::P2pConnectionIncomingPending { .. } => {
1086                ActionKind::RpcP2pConnectionIncomingPending
1087            }
1088            Self::P2pConnectionIncomingRespond { .. } => {
1089                ActionKind::RpcP2pConnectionIncomingRespond
1090            }
1091            Self::P2pConnectionIncomingAnswerReady { .. } => {
1092                ActionKind::RpcP2pConnectionIncomingAnswerReady
1093            }
1094            Self::P2pConnectionIncomingError { .. } => ActionKind::RpcP2pConnectionIncomingError,
1095            Self::P2pConnectionIncomingSuccess { .. } => {
1096                ActionKind::RpcP2pConnectionIncomingSuccess
1097            }
1098            Self::ScanStateSummaryGetInit { .. } => ActionKind::RpcScanStateSummaryGetInit,
1099            Self::ScanStateSummaryLedgerGetInit { .. } => {
1100                ActionKind::RpcScanStateSummaryLedgerGetInit
1101            }
1102            Self::ScanStateSummaryGetPending { .. } => ActionKind::RpcScanStateSummaryGetPending,
1103            Self::ScanStateSummaryGetSuccess { .. } => ActionKind::RpcScanStateSummaryGetSuccess,
1104            Self::SnarkPoolAvailableJobsGet { .. } => ActionKind::RpcSnarkPoolAvailableJobsGet,
1105            Self::SnarkPoolJobGet { .. } => ActionKind::RpcSnarkPoolJobGet,
1106            Self::SnarkPoolCompletedJobsGet { .. } => ActionKind::RpcSnarkPoolCompletedJobsGet,
1107            Self::SnarkPoolPendingJobsGet { .. } => ActionKind::RpcSnarkPoolPendingJobsGet,
1108            Self::SnarkerConfigGet { .. } => ActionKind::RpcSnarkerConfigGet,
1109            Self::SnarkerJobCommit { .. } => ActionKind::RpcSnarkerJobCommit,
1110            Self::SnarkerJobSpec { .. } => ActionKind::RpcSnarkerJobSpec,
1111            Self::SnarkerWorkersGet { .. } => ActionKind::RpcSnarkerWorkersGet,
1112            Self::HealthCheck { .. } => ActionKind::RpcHealthCheck,
1113            Self::ReadinessCheck { .. } => ActionKind::RpcReadinessCheck,
1114            Self::DiscoveryRoutingTable { .. } => ActionKind::RpcDiscoveryRoutingTable,
1115            Self::DiscoveryBoostrapStats { .. } => ActionKind::RpcDiscoveryBoostrapStats,
1116            Self::TransactionPool { .. } => ActionKind::RpcTransactionPool,
1117            Self::LedgerAccountsGetInit { .. } => ActionKind::RpcLedgerAccountsGetInit,
1118            Self::LedgerAccountsGetPending { .. } => ActionKind::RpcLedgerAccountsGetPending,
1119            Self::LedgerAccountsGetSuccess { .. } => ActionKind::RpcLedgerAccountsGetSuccess,
1120            Self::TransactionInjectInit { .. } => ActionKind::RpcTransactionInjectInit,
1121            Self::TransactionInjectPending { .. } => ActionKind::RpcTransactionInjectPending,
1122            Self::TransactionInjectSuccess { .. } => ActionKind::RpcTransactionInjectSuccess,
1123            Self::TransactionInjectRejected { .. } => ActionKind::RpcTransactionInjectRejected,
1124            Self::TransactionInjectFailure { .. } => ActionKind::RpcTransactionInjectFailure,
1125            Self::TransitionFrontierUserCommandsGet { .. } => {
1126                ActionKind::RpcTransitionFrontierUserCommandsGet
1127            }
1128            Self::BestChain { .. } => ActionKind::RpcBestChain,
1129            Self::ConsensusConstantsGet { .. } => ActionKind::RpcConsensusConstantsGet,
1130            Self::TransactionStatusGet { .. } => ActionKind::RpcTransactionStatusGet,
1131            Self::BlockGet { .. } => ActionKind::RpcBlockGet,
1132            Self::ConsensusTimeGet { .. } => ActionKind::RpcConsensusTimeGet,
1133            Self::LedgerStatusGetInit { .. } => ActionKind::RpcLedgerStatusGetInit,
1134            Self::LedgerStatusGetPending { .. } => ActionKind::RpcLedgerStatusGetPending,
1135            Self::LedgerStatusGetSuccess { .. } => ActionKind::RpcLedgerStatusGetSuccess,
1136            Self::LedgerAccountDelegatorsGetInit { .. } => {
1137                ActionKind::RpcLedgerAccountDelegatorsGetInit
1138            }
1139            Self::LedgerAccountDelegatorsGetPending { .. } => {
1140                ActionKind::RpcLedgerAccountDelegatorsGetPending
1141            }
1142            Self::LedgerAccountDelegatorsGetSuccess { .. } => {
1143                ActionKind::RpcLedgerAccountDelegatorsGetSuccess
1144            }
1145            Self::PooledUserCommands { .. } => ActionKind::RpcPooledUserCommands,
1146            Self::PooledZkappCommands { .. } => ActionKind::RpcPooledZkappCommands,
1147            Self::GenesisBlock { .. } => ActionKind::RpcGenesisBlock,
1148            Self::Finish { .. } => ActionKind::RpcFinish,
1149        }
1150    }
1151}
1152
1153impl ActionKindGet for RpcEffectfulAction {
1154    fn kind(&self) -> ActionKind {
1155        match self {
1156            Self::GlobalStateGet { .. } => ActionKind::RpcEffectfulGlobalStateGet,
1157            Self::StatusGet { .. } => ActionKind::RpcEffectfulStatusGet,
1158            Self::HeartbeatGet { .. } => ActionKind::RpcEffectfulHeartbeatGet,
1159            Self::ActionStatsGet { .. } => ActionKind::RpcEffectfulActionStatsGet,
1160            Self::SyncStatsGet { .. } => ActionKind::RpcEffectfulSyncStatsGet,
1161            Self::BlockProducerStatsGet { .. } => ActionKind::RpcEffectfulBlockProducerStatsGet,
1162            Self::MessageProgressGet { .. } => ActionKind::RpcEffectfulMessageProgressGet,
1163            Self::PeersGet { .. } => ActionKind::RpcEffectfulPeersGet,
1164            Self::P2pConnectionOutgoingError { .. } => {
1165                ActionKind::RpcEffectfulP2pConnectionOutgoingError
1166            }
1167            Self::P2pConnectionOutgoingSuccess { .. } => {
1168                ActionKind::RpcEffectfulP2pConnectionOutgoingSuccess
1169            }
1170            Self::P2pConnectionIncomingRespond { .. } => {
1171                ActionKind::RpcEffectfulP2pConnectionIncomingRespond
1172            }
1173            Self::P2pConnectionIncomingError { .. } => {
1174                ActionKind::RpcEffectfulP2pConnectionIncomingError
1175            }
1176            Self::P2pConnectionIncomingSuccess { .. } => {
1177                ActionKind::RpcEffectfulP2pConnectionIncomingSuccess
1178            }
1179            Self::ScanStateSummaryGetSuccess { .. } => {
1180                ActionKind::RpcEffectfulScanStateSummaryGetSuccess
1181            }
1182            Self::SnarkPoolAvailableJobsGet { .. } => {
1183                ActionKind::RpcEffectfulSnarkPoolAvailableJobsGet
1184            }
1185            Self::SnarkPoolJobGet { .. } => ActionKind::RpcEffectfulSnarkPoolJobGet,
1186            Self::SnarkPoolCompletedJobsGet { .. } => {
1187                ActionKind::RpcEffectfulSnarkPoolCompletedJobsGet
1188            }
1189            Self::SnarkPoolPendingJobsGet { .. } => ActionKind::RpcEffectfulSnarkPoolPendingJobsGet,
1190            Self::SnarkerConfigGet { .. } => ActionKind::RpcEffectfulSnarkerConfigGet,
1191            Self::SnarkerJobCommit { .. } => ActionKind::RpcEffectfulSnarkerJobCommit,
1192            Self::SnarkerJobSpec { .. } => ActionKind::RpcEffectfulSnarkerJobSpec,
1193            Self::SnarkerWorkersGet { .. } => ActionKind::RpcEffectfulSnarkerWorkersGet,
1194            Self::HealthCheck { .. } => ActionKind::RpcEffectfulHealthCheck,
1195            Self::ReadinessCheck { .. } => ActionKind::RpcEffectfulReadinessCheck,
1196            Self::DiscoveryRoutingTable { .. } => ActionKind::RpcEffectfulDiscoveryRoutingTable,
1197            Self::DiscoveryBoostrapStats { .. } => ActionKind::RpcEffectfulDiscoveryBoostrapStats,
1198            Self::TransactionPool { .. } => ActionKind::RpcEffectfulTransactionPool,
1199            Self::LedgerAccountsGetSuccess { .. } => {
1200                ActionKind::RpcEffectfulLedgerAccountsGetSuccess
1201            }
1202            Self::TransactionInjectSuccess { .. } => {
1203                ActionKind::RpcEffectfulTransactionInjectSuccess
1204            }
1205            Self::TransactionInjectRejected { .. } => {
1206                ActionKind::RpcEffectfulTransactionInjectRejected
1207            }
1208            Self::TransactionInjectFailure { .. } => {
1209                ActionKind::RpcEffectfulTransactionInjectFailure
1210            }
1211            Self::TransitionFrontierUserCommandsGet { .. } => {
1212                ActionKind::RpcEffectfulTransitionFrontierUserCommandsGet
1213            }
1214            Self::BestChain { .. } => ActionKind::RpcEffectfulBestChain,
1215            Self::ConsensusConstantsGet { .. } => ActionKind::RpcEffectfulConsensusConstantsGet,
1216            Self::TransactionStatusGet { .. } => ActionKind::RpcEffectfulTransactionStatusGet,
1217            Self::BlockGet { .. } => ActionKind::RpcEffectfulBlockGet,
1218            Self::PooledUserCommands { .. } => ActionKind::RpcEffectfulPooledUserCommands,
1219            Self::PooledZkappCommands { .. } => ActionKind::RpcEffectfulPooledZkappCommands,
1220            Self::GenesisBlock { .. } => ActionKind::RpcEffectfulGenesisBlock,
1221            Self::ConsensusTimeGet { .. } => ActionKind::RpcEffectfulConsensusTimeGet,
1222            Self::LedgerStatusGetSuccess { .. } => ActionKind::RpcEffectfulLedgerStatusGetSuccess,
1223            Self::LedgerAccountDelegatorsGetSuccess { .. } => {
1224                ActionKind::RpcEffectfulLedgerAccountDelegatorsGetSuccess
1225            }
1226        }
1227    }
1228}
1229
1230impl ActionKindGet for WatchedAccountsAction {
1231    fn kind(&self) -> ActionKind {
1232        match self {
1233            Self::Add { .. } => ActionKind::WatchedAccountsAdd,
1234            Self::LedgerInitialStateGetInit { .. } => {
1235                ActionKind::WatchedAccountsLedgerInitialStateGetInit
1236            }
1237            Self::LedgerInitialStateGetPending { .. } => {
1238                ActionKind::WatchedAccountsLedgerInitialStateGetPending
1239            }
1240            Self::LedgerInitialStateGetError { .. } => {
1241                ActionKind::WatchedAccountsLedgerInitialStateGetError
1242            }
1243            Self::LedgerInitialStateGetRetry { .. } => {
1244                ActionKind::WatchedAccountsLedgerInitialStateGetRetry
1245            }
1246            Self::LedgerInitialStateGetSuccess { .. } => {
1247                ActionKind::WatchedAccountsLedgerInitialStateGetSuccess
1248            }
1249            Self::TransactionsIncludedInBlock { .. } => {
1250                ActionKind::WatchedAccountsTransactionsIncludedInBlock
1251            }
1252            Self::BlockLedgerQueryInit { .. } => ActionKind::WatchedAccountsBlockLedgerQueryInit,
1253            Self::BlockLedgerQueryPending { .. } => {
1254                ActionKind::WatchedAccountsBlockLedgerQueryPending
1255            }
1256            Self::BlockLedgerQuerySuccess { .. } => {
1257                ActionKind::WatchedAccountsBlockLedgerQuerySuccess
1258            }
1259        }
1260    }
1261}
1262
1263impl ActionKindGet for P2pInitializeAction {
1264    fn kind(&self) -> ActionKind {
1265        match self {
1266            Self::Initialize { .. } => ActionKind::P2pInitializeInitialize,
1267        }
1268    }
1269}
1270
1271impl ActionKindGet for P2pConnectionAction {
1272    fn kind(&self) -> ActionKind {
1273        match self {
1274            Self::Outgoing(a) => a.kind(),
1275            Self::Incoming(a) => a.kind(),
1276        }
1277    }
1278}
1279
1280impl ActionKindGet for P2pDisconnectionAction {
1281    fn kind(&self) -> ActionKind {
1282        match self {
1283            Self::RandomTry => ActionKind::P2pDisconnectionRandomTry,
1284            Self::Init { .. } => ActionKind::P2pDisconnectionInit,
1285            Self::PeerClosed { .. } => ActionKind::P2pDisconnectionPeerClosed,
1286            Self::FailedCleanup { .. } => ActionKind::P2pDisconnectionFailedCleanup,
1287            Self::Finish { .. } => ActionKind::P2pDisconnectionFinish,
1288        }
1289    }
1290}
1291
1292impl ActionKindGet for P2pIdentifyAction {
1293    fn kind(&self) -> ActionKind {
1294        match self {
1295            Self::NewRequest { .. } => ActionKind::P2pIdentifyNewRequest,
1296            Self::UpdatePeerInformation { .. } => ActionKind::P2pIdentifyUpdatePeerInformation,
1297        }
1298    }
1299}
1300
1301impl ActionKindGet for P2pChannelsAction {
1302    fn kind(&self) -> ActionKind {
1303        match self {
1304            Self::MessageReceived(a) => a.kind(),
1305            Self::SignalingDiscovery(a) => a.kind(),
1306            Self::SignalingExchange(a) => a.kind(),
1307            Self::BestTip(a) => a.kind(),
1308            Self::Transaction(a) => a.kind(),
1309            Self::Snark(a) => a.kind(),
1310            Self::SnarkJobCommitment(a) => a.kind(),
1311            Self::Rpc(a) => a.kind(),
1312            Self::StreamingRpc(a) => a.kind(),
1313        }
1314    }
1315}
1316
1317impl ActionKindGet for P2pPeerAction {
1318    fn kind(&self) -> ActionKind {
1319        match self {
1320            Self::Discovered { .. } => ActionKind::P2pPeerDiscovered,
1321            Self::Ready { .. } => ActionKind::P2pPeerReady,
1322            Self::BestTipUpdate { .. } => ActionKind::P2pPeerBestTipUpdate,
1323            Self::Remove { .. } => ActionKind::P2pPeerRemove,
1324        }
1325    }
1326}
1327
1328impl ActionKindGet for P2pNetworkAction {
1329    fn kind(&self) -> ActionKind {
1330        match self {
1331            Self::Scheduler(a) => a.kind(),
1332            Self::Pnet(a) => a.kind(),
1333            Self::Select(a) => a.kind(),
1334            Self::Noise(a) => a.kind(),
1335            Self::Yamux(a) => a.kind(),
1336            Self::Identify(a) => a.kind(),
1337            Self::Kad(a) => a.kind(),
1338            Self::Pubsub(a) => a.kind(),
1339            Self::Rpc(a) => a.kind(),
1340        }
1341    }
1342}
1343
1344impl ActionKindGet for P2pChannelsEffectfulAction {
1345    fn kind(&self) -> ActionKind {
1346        match self {
1347            Self::InitChannel { .. } => ActionKind::P2pChannelsEffectfulInitChannel,
1348            Self::MessageSend { .. } => ActionKind::P2pChannelsEffectfulMessageSend,
1349            Self::SignalingDiscoveryAnswerDecrypt { .. } => {
1350                ActionKind::P2pChannelsEffectfulSignalingDiscoveryAnswerDecrypt
1351            }
1352            Self::SignalingDiscoveryOfferEncryptAndSend { .. } => {
1353                ActionKind::P2pChannelsEffectfulSignalingDiscoveryOfferEncryptAndSend
1354            }
1355            Self::SignalingExchangeOfferDecrypt { .. } => {
1356                ActionKind::P2pChannelsEffectfulSignalingExchangeOfferDecrypt
1357            }
1358            Self::SignalingExchangeAnswerEncryptAndSend { .. } => {
1359                ActionKind::P2pChannelsEffectfulSignalingExchangeAnswerEncryptAndSend
1360            }
1361        }
1362    }
1363}
1364
1365impl ActionKindGet for P2pConnectionEffectfulAction {
1366    fn kind(&self) -> ActionKind {
1367        match self {
1368            Self::Outgoing(a) => a.kind(),
1369            Self::Incoming(a) => a.kind(),
1370        }
1371    }
1372}
1373
1374impl ActionKindGet for P2pDisconnectionEffectfulAction {
1375    fn kind(&self) -> ActionKind {
1376        match self {
1377            Self::Init { .. } => ActionKind::P2pDisconnectionEffectfulInit,
1378        }
1379    }
1380}
1381
1382impl ActionKindGet for P2pNetworkEffectfulAction {
1383    fn kind(&self) -> ActionKind {
1384        match self {
1385            Self::Scheduler(a) => a.kind(),
1386            Self::Pnet(a) => a.kind(),
1387            Self::Pubsub(a) => a.kind(),
1388            Self::Identify(a) => a.kind(),
1389            Self::Kad(a) => a.kind(),
1390        }
1391    }
1392}
1393
1394impl ActionKindGet for LedgerWriteAction {
1395    fn kind(&self) -> ActionKind {
1396        match self {
1397            Self::Init { .. } => ActionKind::LedgerWriteInit,
1398            Self::Pending => ActionKind::LedgerWritePending,
1399            Self::Success { .. } => ActionKind::LedgerWriteSuccess,
1400        }
1401    }
1402}
1403
1404impl ActionKindGet for LedgerReadAction {
1405    fn kind(&self) -> ActionKind {
1406        match self {
1407            Self::FindTodos => ActionKind::LedgerReadFindTodos,
1408            Self::Init { .. } => ActionKind::LedgerReadInit,
1409            Self::Pending { .. } => ActionKind::LedgerReadPending,
1410            Self::Success { .. } => ActionKind::LedgerReadSuccess,
1411            Self::Prune { .. } => ActionKind::LedgerReadPrune,
1412        }
1413    }
1414}
1415
1416impl ActionKindGet for SnarkBlockVerifyAction {
1417    fn kind(&self) -> ActionKind {
1418        match self {
1419            Self::Init { .. } => ActionKind::SnarkBlockVerifyInit,
1420            Self::Pending { .. } => ActionKind::SnarkBlockVerifyPending,
1421            Self::Error { .. } => ActionKind::SnarkBlockVerifyError,
1422            Self::Success { .. } => ActionKind::SnarkBlockVerifySuccess,
1423            Self::Finish { .. } => ActionKind::SnarkBlockVerifyFinish,
1424        }
1425    }
1426}
1427
1428impl ActionKindGet for SnarkBlockVerifyEffectfulAction {
1429    fn kind(&self) -> ActionKind {
1430        match self {
1431            Self::Init { .. } => ActionKind::SnarkBlockVerifyEffectfulInit,
1432        }
1433    }
1434}
1435
1436impl ActionKindGet for SnarkWorkVerifyAction {
1437    fn kind(&self) -> ActionKind {
1438        match self {
1439            Self::Init { .. } => ActionKind::SnarkWorkVerifyInit,
1440            Self::Pending { .. } => ActionKind::SnarkWorkVerifyPending,
1441            Self::Error { .. } => ActionKind::SnarkWorkVerifyError,
1442            Self::Success { .. } => ActionKind::SnarkWorkVerifySuccess,
1443            Self::Finish { .. } => ActionKind::SnarkWorkVerifyFinish,
1444        }
1445    }
1446}
1447
1448impl ActionKindGet for SnarkWorkVerifyEffectfulAction {
1449    fn kind(&self) -> ActionKind {
1450        match self {
1451            Self::Init { .. } => ActionKind::SnarkWorkVerifyEffectfulInit,
1452        }
1453    }
1454}
1455
1456impl ActionKindGet for SnarkUserCommandVerifyAction {
1457    fn kind(&self) -> ActionKind {
1458        match self {
1459            Self::Init { .. } => ActionKind::SnarkUserCommandVerifyInit,
1460            Self::Pending { .. } => ActionKind::SnarkUserCommandVerifyPending,
1461            Self::Error { .. } => ActionKind::SnarkUserCommandVerifyError,
1462            Self::Success { .. } => ActionKind::SnarkUserCommandVerifySuccess,
1463            Self::Finish { .. } => ActionKind::SnarkUserCommandVerifyFinish,
1464        }
1465    }
1466}
1467
1468impl ActionKindGet for SnarkUserCommandVerifyEffectfulAction {
1469    fn kind(&self) -> ActionKind {
1470        match self {
1471            Self::Init { .. } => ActionKind::SnarkUserCommandVerifyEffectfulInit,
1472        }
1473    }
1474}
1475
1476impl ActionKindGet for TransitionFrontierGenesisAction {
1477    fn kind(&self) -> ActionKind {
1478        match self {
1479            Self::LedgerLoadInit => ActionKind::TransitionFrontierGenesisLedgerLoadInit,
1480            Self::LedgerLoadPending => ActionKind::TransitionFrontierGenesisLedgerLoadPending,
1481            Self::LedgerLoadSuccess { .. } => {
1482                ActionKind::TransitionFrontierGenesisLedgerLoadSuccess
1483            }
1484            Self::Produce => ActionKind::TransitionFrontierGenesisProduce,
1485            Self::ProveInit => ActionKind::TransitionFrontierGenesisProveInit,
1486            Self::ProvePending => ActionKind::TransitionFrontierGenesisProvePending,
1487            Self::ProveSuccess { .. } => ActionKind::TransitionFrontierGenesisProveSuccess,
1488        }
1489    }
1490}
1491
1492impl ActionKindGet for TransitionFrontierGenesisEffectfulAction {
1493    fn kind(&self) -> ActionKind {
1494        match self {
1495            Self::LedgerLoadInit { .. } => {
1496                ActionKind::TransitionFrontierGenesisEffectfulLedgerLoadInit
1497            }
1498            Self::ProveInit { .. } => ActionKind::TransitionFrontierGenesisEffectfulProveInit,
1499        }
1500    }
1501}
1502
1503impl ActionKindGet for TransitionFrontierCandidateAction {
1504    fn kind(&self) -> ActionKind {
1505        match self {
1506            Self::P2pBestTipUpdate { .. } => {
1507                ActionKind::TransitionFrontierCandidateP2pBestTipUpdate
1508            }
1509            Self::BlockReceived { .. } => ActionKind::TransitionFrontierCandidateBlockReceived,
1510            Self::BlockPrevalidateSuccess { .. } => {
1511                ActionKind::TransitionFrontierCandidateBlockPrevalidateSuccess
1512            }
1513            Self::BlockPrevalidateError { .. } => {
1514                ActionKind::TransitionFrontierCandidateBlockPrevalidateError
1515            }
1516            Self::BlockChainProofUpdate { .. } => {
1517                ActionKind::TransitionFrontierCandidateBlockChainProofUpdate
1518            }
1519            Self::BlockSnarkVerifyPending { .. } => {
1520                ActionKind::TransitionFrontierCandidateBlockSnarkVerifyPending
1521            }
1522            Self::BlockSnarkVerifySuccess { .. } => {
1523                ActionKind::TransitionFrontierCandidateBlockSnarkVerifySuccess
1524            }
1525            Self::BlockSnarkVerifyError { .. } => {
1526                ActionKind::TransitionFrontierCandidateBlockSnarkVerifyError
1527            }
1528            Self::TransitionFrontierSyncTargetUpdate => {
1529                ActionKind::TransitionFrontierCandidateTransitionFrontierSyncTargetUpdate
1530            }
1531            Self::Prune => ActionKind::TransitionFrontierCandidatePrune,
1532        }
1533    }
1534}
1535
1536impl ActionKindGet for TransitionFrontierSyncAction {
1537    fn kind(&self) -> ActionKind {
1538        match self {
1539            Self::Ledger(a) => a.kind(),
1540            Self::Init { .. } => ActionKind::TransitionFrontierSyncInit,
1541            Self::BestTipUpdate { .. } => ActionKind::TransitionFrontierSyncBestTipUpdate,
1542            Self::LedgerStakingPending => ActionKind::TransitionFrontierSyncLedgerStakingPending,
1543            Self::LedgerStakingSuccess => ActionKind::TransitionFrontierSyncLedgerStakingSuccess,
1544            Self::LedgerNextEpochPending => {
1545                ActionKind::TransitionFrontierSyncLedgerNextEpochPending
1546            }
1547            Self::LedgerNextEpochSuccess => {
1548                ActionKind::TransitionFrontierSyncLedgerNextEpochSuccess
1549            }
1550            Self::LedgerRootPending => ActionKind::TransitionFrontierSyncLedgerRootPending,
1551            Self::LedgerRootSuccess => ActionKind::TransitionFrontierSyncLedgerRootSuccess,
1552            Self::BlocksPending => ActionKind::TransitionFrontierSyncBlocksPending,
1553            Self::BlocksPeersQuery => ActionKind::TransitionFrontierSyncBlocksPeersQuery,
1554            Self::BlocksPeerQueryInit { .. } => {
1555                ActionKind::TransitionFrontierSyncBlocksPeerQueryInit
1556            }
1557            Self::BlocksPeerQueryRetry { .. } => {
1558                ActionKind::TransitionFrontierSyncBlocksPeerQueryRetry
1559            }
1560            Self::BlocksPeerQueryPending { .. } => {
1561                ActionKind::TransitionFrontierSyncBlocksPeerQueryPending
1562            }
1563            Self::BlocksPeerQueryError { .. } => {
1564                ActionKind::TransitionFrontierSyncBlocksPeerQueryError
1565            }
1566            Self::BlocksPeerQuerySuccess { .. } => {
1567                ActionKind::TransitionFrontierSyncBlocksPeerQuerySuccess
1568            }
1569            Self::BlocksFetchSuccess { .. } => ActionKind::TransitionFrontierSyncBlocksFetchSuccess,
1570            Self::BlocksNextApplyInit => ActionKind::TransitionFrontierSyncBlocksNextApplyInit,
1571            Self::BlocksNextApplyPending { .. } => {
1572                ActionKind::TransitionFrontierSyncBlocksNextApplyPending
1573            }
1574            Self::BlocksNextApplyError { .. } => {
1575                ActionKind::TransitionFrontierSyncBlocksNextApplyError
1576            }
1577            Self::BlocksNextApplySuccess { .. } => {
1578                ActionKind::TransitionFrontierSyncBlocksNextApplySuccess
1579            }
1580            Self::BlocksSendToArchive { .. } => {
1581                ActionKind::TransitionFrontierSyncBlocksSendToArchive
1582            }
1583            Self::BlocksSuccess => ActionKind::TransitionFrontierSyncBlocksSuccess,
1584            Self::CommitInit => ActionKind::TransitionFrontierSyncCommitInit,
1585            Self::CommitPending => ActionKind::TransitionFrontierSyncCommitPending,
1586            Self::CommitSuccess { .. } => ActionKind::TransitionFrontierSyncCommitSuccess,
1587        }
1588    }
1589}
1590
1591impl ActionKindGet for SnarkPoolCandidateAction {
1592    fn kind(&self) -> ActionKind {
1593        match self {
1594            Self::InfoReceived { .. } => ActionKind::SnarkPoolCandidateInfoReceived,
1595            Self::WorkFetchAll => ActionKind::SnarkPoolCandidateWorkFetchAll,
1596            Self::WorkFetchInit { .. } => ActionKind::SnarkPoolCandidateWorkFetchInit,
1597            Self::WorkFetchPending { .. } => ActionKind::SnarkPoolCandidateWorkFetchPending,
1598            Self::WorkFetchError { .. } => ActionKind::SnarkPoolCandidateWorkFetchError,
1599            Self::WorkFetchSuccess { .. } => ActionKind::SnarkPoolCandidateWorkFetchSuccess,
1600            Self::WorkVerifyNext => ActionKind::SnarkPoolCandidateWorkVerifyNext,
1601            Self::WorkVerifyPending { .. } => ActionKind::SnarkPoolCandidateWorkVerifyPending,
1602            Self::WorkVerifyError { .. } => ActionKind::SnarkPoolCandidateWorkVerifyError,
1603            Self::WorkVerifySuccess { .. } => ActionKind::SnarkPoolCandidateWorkVerifySuccess,
1604            Self::PeerPrune { .. } => ActionKind::SnarkPoolCandidatePeerPrune,
1605        }
1606    }
1607}
1608
1609impl ActionKindGet for TransactionPoolCandidateAction {
1610    fn kind(&self) -> ActionKind {
1611        match self {
1612            Self::InfoReceived { .. } => ActionKind::TransactionPoolCandidateInfoReceived,
1613            Self::FetchAll => ActionKind::TransactionPoolCandidateFetchAll,
1614            Self::FetchInit { .. } => ActionKind::TransactionPoolCandidateFetchInit,
1615            Self::FetchPending { .. } => ActionKind::TransactionPoolCandidateFetchPending,
1616            Self::FetchError { .. } => ActionKind::TransactionPoolCandidateFetchError,
1617            Self::FetchSuccess { .. } => ActionKind::TransactionPoolCandidateFetchSuccess,
1618            Self::Libp2pTransactionsReceived { .. } => {
1619                ActionKind::TransactionPoolCandidateLibp2pTransactionsReceived
1620            }
1621            Self::VerifyNext => ActionKind::TransactionPoolCandidateVerifyNext,
1622            Self::VerifyPending { .. } => ActionKind::TransactionPoolCandidateVerifyPending,
1623            Self::VerifyError { .. } => ActionKind::TransactionPoolCandidateVerifyError,
1624            Self::VerifySuccess { .. } => ActionKind::TransactionPoolCandidateVerifySuccess,
1625            Self::PeerPrune { .. } => ActionKind::TransactionPoolCandidatePeerPrune,
1626        }
1627    }
1628}
1629
1630impl ActionKindGet for BlockProducerVrfEvaluatorAction {
1631    fn kind(&self) -> ActionKind {
1632        match self {
1633            Self::EvaluateSlot { .. } => ActionKind::BlockProducerVrfEvaluatorEvaluateSlot,
1634            Self::ProcessSlotEvaluationSuccess { .. } => {
1635                ActionKind::BlockProducerVrfEvaluatorProcessSlotEvaluationSuccess
1636            }
1637            Self::InitializeEvaluator { .. } => {
1638                ActionKind::BlockProducerVrfEvaluatorInitializeEvaluator
1639            }
1640            Self::FinalizeEvaluatorInitialization { .. } => {
1641                ActionKind::BlockProducerVrfEvaluatorFinalizeEvaluatorInitialization
1642            }
1643            Self::CheckEpochEvaluability { .. } => {
1644                ActionKind::BlockProducerVrfEvaluatorCheckEpochEvaluability
1645            }
1646            Self::InitializeEpochEvaluation { .. } => {
1647                ActionKind::BlockProducerVrfEvaluatorInitializeEpochEvaluation
1648            }
1649            Self::BeginDelegatorTableConstruction => {
1650                ActionKind::BlockProducerVrfEvaluatorBeginDelegatorTableConstruction
1651            }
1652            Self::FinalizeDelegatorTableConstruction { .. } => {
1653                ActionKind::BlockProducerVrfEvaluatorFinalizeDelegatorTableConstruction
1654            }
1655            Self::SelectInitialSlot { .. } => {
1656                ActionKind::BlockProducerVrfEvaluatorSelectInitialSlot
1657            }
1658            Self::BeginEpochEvaluation { .. } => {
1659                ActionKind::BlockProducerVrfEvaluatorBeginEpochEvaluation
1660            }
1661            Self::InterruptEpochEvaluation { .. } => {
1662                ActionKind::BlockProducerVrfEvaluatorInterruptEpochEvaluation
1663            }
1664            Self::ContinueEpochEvaluation { .. } => {
1665                ActionKind::BlockProducerVrfEvaluatorContinueEpochEvaluation
1666            }
1667            Self::FinishEpochEvaluation { .. } => {
1668                ActionKind::BlockProducerVrfEvaluatorFinishEpochEvaluation
1669            }
1670            Self::WaitForNextEvaluation => {
1671                ActionKind::BlockProducerVrfEvaluatorWaitForNextEvaluation
1672            }
1673            Self::CheckEpochBounds { .. } => ActionKind::BlockProducerVrfEvaluatorCheckEpochBounds,
1674            Self::CleanupOldSlots { .. } => ActionKind::BlockProducerVrfEvaluatorCleanupOldSlots,
1675        }
1676    }
1677}
1678
1679impl ActionKindGet for BlockProducerVrfEvaluatorEffectfulAction {
1680    fn kind(&self) -> ActionKind {
1681        match self {
1682            Self::EvaluateSlot { .. } => ActionKind::BlockProducerVrfEvaluatorEffectfulEvaluateSlot,
1683            Self::SlotEvaluated { .. } => {
1684                ActionKind::BlockProducerVrfEvaluatorEffectfulSlotEvaluated
1685            }
1686            Self::InitializeStats { .. } => {
1687                ActionKind::BlockProducerVrfEvaluatorEffectfulInitializeStats
1688            }
1689        }
1690    }
1691}
1692
1693impl ActionKindGet for P2pConnectionOutgoingAction {
1694    fn kind(&self) -> ActionKind {
1695        match self {
1696            Self::RandomInit => ActionKind::P2pConnectionOutgoingRandomInit,
1697            Self::Init { .. } => ActionKind::P2pConnectionOutgoingInit,
1698            Self::Reconnect { .. } => ActionKind::P2pConnectionOutgoingReconnect,
1699            Self::OfferSdpCreatePending { .. } => {
1700                ActionKind::P2pConnectionOutgoingOfferSdpCreatePending
1701            }
1702            Self::OfferSdpCreateError { .. } => {
1703                ActionKind::P2pConnectionOutgoingOfferSdpCreateError
1704            }
1705            Self::OfferSdpCreateSuccess { .. } => {
1706                ActionKind::P2pConnectionOutgoingOfferSdpCreateSuccess
1707            }
1708            Self::OfferReady { .. } => ActionKind::P2pConnectionOutgoingOfferReady,
1709            Self::OfferSendSuccess { .. } => ActionKind::P2pConnectionOutgoingOfferSendSuccess,
1710            Self::AnswerRecvPending { .. } => ActionKind::P2pConnectionOutgoingAnswerRecvPending,
1711            Self::AnswerRecvError { .. } => ActionKind::P2pConnectionOutgoingAnswerRecvError,
1712            Self::AnswerRecvSuccess { .. } => ActionKind::P2pConnectionOutgoingAnswerRecvSuccess,
1713            Self::FinalizePending { .. } => ActionKind::P2pConnectionOutgoingFinalizePending,
1714            Self::FinalizeError { .. } => ActionKind::P2pConnectionOutgoingFinalizeError,
1715            Self::FinalizeSuccess { .. } => ActionKind::P2pConnectionOutgoingFinalizeSuccess,
1716            Self::Timeout { .. } => ActionKind::P2pConnectionOutgoingTimeout,
1717            Self::Error { .. } => ActionKind::P2pConnectionOutgoingError,
1718            Self::Success { .. } => ActionKind::P2pConnectionOutgoingSuccess,
1719        }
1720    }
1721}
1722
1723impl ActionKindGet for P2pConnectionIncomingAction {
1724    fn kind(&self) -> ActionKind {
1725        match self {
1726            Self::Init { .. } => ActionKind::P2pConnectionIncomingInit,
1727            Self::AnswerSdpCreatePending { .. } => {
1728                ActionKind::P2pConnectionIncomingAnswerSdpCreatePending
1729            }
1730            Self::AnswerSdpCreateError { .. } => {
1731                ActionKind::P2pConnectionIncomingAnswerSdpCreateError
1732            }
1733            Self::AnswerSdpCreateSuccess { .. } => {
1734                ActionKind::P2pConnectionIncomingAnswerSdpCreateSuccess
1735            }
1736            Self::AnswerReady { .. } => ActionKind::P2pConnectionIncomingAnswerReady,
1737            Self::AnswerSendSuccess { .. } => ActionKind::P2pConnectionIncomingAnswerSendSuccess,
1738            Self::FinalizePending { .. } => ActionKind::P2pConnectionIncomingFinalizePending,
1739            Self::FinalizeError { .. } => ActionKind::P2pConnectionIncomingFinalizeError,
1740            Self::FinalizeSuccess { .. } => ActionKind::P2pConnectionIncomingFinalizeSuccess,
1741            Self::Timeout { .. } => ActionKind::P2pConnectionIncomingTimeout,
1742            Self::Error { .. } => ActionKind::P2pConnectionIncomingError,
1743            Self::Success { .. } => ActionKind::P2pConnectionIncomingSuccess,
1744            Self::FinalizePendingLibp2p { .. } => {
1745                ActionKind::P2pConnectionIncomingFinalizePendingLibp2p
1746            }
1747            Self::Libp2pReceived { .. } => ActionKind::P2pConnectionIncomingLibp2pReceived,
1748        }
1749    }
1750}
1751
1752impl ActionKindGet for P2pChannelsMessageReceivedAction {
1753    fn kind(&self) -> ActionKind {
1754        ActionKind::P2pChannelsMessageReceived
1755    }
1756}
1757
1758impl ActionKindGet for P2pChannelsSignalingDiscoveryAction {
1759    fn kind(&self) -> ActionKind {
1760        match self {
1761            Self::Init { .. } => ActionKind::P2pChannelsSignalingDiscoveryInit,
1762            Self::Pending { .. } => ActionKind::P2pChannelsSignalingDiscoveryPending,
1763            Self::Ready { .. } => ActionKind::P2pChannelsSignalingDiscoveryReady,
1764            Self::RequestSend { .. } => ActionKind::P2pChannelsSignalingDiscoveryRequestSend,
1765            Self::DiscoveryRequestReceived { .. } => {
1766                ActionKind::P2pChannelsSignalingDiscoveryDiscoveryRequestReceived
1767            }
1768            Self::DiscoveredSend { .. } => ActionKind::P2pChannelsSignalingDiscoveryDiscoveredSend,
1769            Self::DiscoveredRejectReceived { .. } => {
1770                ActionKind::P2pChannelsSignalingDiscoveryDiscoveredRejectReceived
1771            }
1772            Self::DiscoveredAcceptReceived { .. } => {
1773                ActionKind::P2pChannelsSignalingDiscoveryDiscoveredAcceptReceived
1774            }
1775            Self::AnswerSend { .. } => ActionKind::P2pChannelsSignalingDiscoveryAnswerSend,
1776            Self::RequestReceived { .. } => {
1777                ActionKind::P2pChannelsSignalingDiscoveryRequestReceived
1778            }
1779            Self::DiscoveryRequestSend { .. } => {
1780                ActionKind::P2pChannelsSignalingDiscoveryDiscoveryRequestSend
1781            }
1782            Self::DiscoveredReceived { .. } => {
1783                ActionKind::P2pChannelsSignalingDiscoveryDiscoveredReceived
1784            }
1785            Self::DiscoveredReject { .. } => {
1786                ActionKind::P2pChannelsSignalingDiscoveryDiscoveredReject
1787            }
1788            Self::DiscoveredAccept { .. } => {
1789                ActionKind::P2pChannelsSignalingDiscoveryDiscoveredAccept
1790            }
1791            Self::AnswerReceived { .. } => ActionKind::P2pChannelsSignalingDiscoveryAnswerReceived,
1792            Self::AnswerDecrypted { .. } => {
1793                ActionKind::P2pChannelsSignalingDiscoveryAnswerDecrypted
1794            }
1795        }
1796    }
1797}
1798
1799impl ActionKindGet for P2pChannelsSignalingExchangeAction {
1800    fn kind(&self) -> ActionKind {
1801        match self {
1802            Self::Init { .. } => ActionKind::P2pChannelsSignalingExchangeInit,
1803            Self::Pending { .. } => ActionKind::P2pChannelsSignalingExchangePending,
1804            Self::Ready { .. } => ActionKind::P2pChannelsSignalingExchangeReady,
1805            Self::RequestSend { .. } => ActionKind::P2pChannelsSignalingExchangeRequestSend,
1806            Self::OfferReceived { .. } => ActionKind::P2pChannelsSignalingExchangeOfferReceived,
1807            Self::OfferDecryptError { .. } => {
1808                ActionKind::P2pChannelsSignalingExchangeOfferDecryptError
1809            }
1810            Self::OfferDecryptSuccess { .. } => {
1811                ActionKind::P2pChannelsSignalingExchangeOfferDecryptSuccess
1812            }
1813            Self::AnswerSend { .. } => ActionKind::P2pChannelsSignalingExchangeAnswerSend,
1814            Self::RequestReceived { .. } => ActionKind::P2pChannelsSignalingExchangeRequestReceived,
1815            Self::OfferSend { .. } => ActionKind::P2pChannelsSignalingExchangeOfferSend,
1816            Self::AnswerReceived { .. } => ActionKind::P2pChannelsSignalingExchangeAnswerReceived,
1817        }
1818    }
1819}
1820
1821impl ActionKindGet for P2pChannelsBestTipAction {
1822    fn kind(&self) -> ActionKind {
1823        match self {
1824            Self::Init { .. } => ActionKind::P2pChannelsBestTipInit,
1825            Self::Pending { .. } => ActionKind::P2pChannelsBestTipPending,
1826            Self::Ready { .. } => ActionKind::P2pChannelsBestTipReady,
1827            Self::RequestSend { .. } => ActionKind::P2pChannelsBestTipRequestSend,
1828            Self::Received { .. } => ActionKind::P2pChannelsBestTipReceived,
1829            Self::RequestReceived { .. } => ActionKind::P2pChannelsBestTipRequestReceived,
1830            Self::ResponseSend { .. } => ActionKind::P2pChannelsBestTipResponseSend,
1831        }
1832    }
1833}
1834
1835impl ActionKindGet for P2pChannelsTransactionAction {
1836    fn kind(&self) -> ActionKind {
1837        match self {
1838            Self::Init { .. } => ActionKind::P2pChannelsTransactionInit,
1839            Self::Pending { .. } => ActionKind::P2pChannelsTransactionPending,
1840            Self::Ready { .. } => ActionKind::P2pChannelsTransactionReady,
1841            Self::RequestSend { .. } => ActionKind::P2pChannelsTransactionRequestSend,
1842            Self::PromiseReceived { .. } => ActionKind::P2pChannelsTransactionPromiseReceived,
1843            Self::Received { .. } => ActionKind::P2pChannelsTransactionReceived,
1844            Self::RequestReceived { .. } => ActionKind::P2pChannelsTransactionRequestReceived,
1845            Self::ResponseSend { .. } => ActionKind::P2pChannelsTransactionResponseSend,
1846            Self::Libp2pReceived { .. } => ActionKind::P2pChannelsTransactionLibp2pReceived,
1847            Self::Libp2pBroadcast { .. } => ActionKind::P2pChannelsTransactionLibp2pBroadcast,
1848        }
1849    }
1850}
1851
1852impl ActionKindGet for P2pChannelsSnarkAction {
1853    fn kind(&self) -> ActionKind {
1854        match self {
1855            Self::Init { .. } => ActionKind::P2pChannelsSnarkInit,
1856            Self::Pending { .. } => ActionKind::P2pChannelsSnarkPending,
1857            Self::Ready { .. } => ActionKind::P2pChannelsSnarkReady,
1858            Self::RequestSend { .. } => ActionKind::P2pChannelsSnarkRequestSend,
1859            Self::PromiseReceived { .. } => ActionKind::P2pChannelsSnarkPromiseReceived,
1860            Self::Received { .. } => ActionKind::P2pChannelsSnarkReceived,
1861            Self::RequestReceived { .. } => ActionKind::P2pChannelsSnarkRequestReceived,
1862            Self::ResponseSend { .. } => ActionKind::P2pChannelsSnarkResponseSend,
1863            Self::Libp2pReceived { .. } => ActionKind::P2pChannelsSnarkLibp2pReceived,
1864            Self::Libp2pBroadcast { .. } => ActionKind::P2pChannelsSnarkLibp2pBroadcast,
1865        }
1866    }
1867}
1868
1869impl ActionKindGet for P2pChannelsSnarkJobCommitmentAction {
1870    fn kind(&self) -> ActionKind {
1871        match self {
1872            Self::Init { .. } => ActionKind::P2pChannelsSnarkJobCommitmentInit,
1873            Self::Pending { .. } => ActionKind::P2pChannelsSnarkJobCommitmentPending,
1874            Self::Ready { .. } => ActionKind::P2pChannelsSnarkJobCommitmentReady,
1875            Self::RequestSend { .. } => ActionKind::P2pChannelsSnarkJobCommitmentRequestSend,
1876            Self::PromiseReceived { .. } => {
1877                ActionKind::P2pChannelsSnarkJobCommitmentPromiseReceived
1878            }
1879            Self::Received { .. } => ActionKind::P2pChannelsSnarkJobCommitmentReceived,
1880            Self::RequestReceived { .. } => {
1881                ActionKind::P2pChannelsSnarkJobCommitmentRequestReceived
1882            }
1883            Self::ResponseSend { .. } => ActionKind::P2pChannelsSnarkJobCommitmentResponseSend,
1884        }
1885    }
1886}
1887
1888impl ActionKindGet for P2pChannelsRpcAction {
1889    fn kind(&self) -> ActionKind {
1890        match self {
1891            Self::Init { .. } => ActionKind::P2pChannelsRpcInit,
1892            Self::Pending { .. } => ActionKind::P2pChannelsRpcPending,
1893            Self::Ready { .. } => ActionKind::P2pChannelsRpcReady,
1894            Self::RequestSend { .. } => ActionKind::P2pChannelsRpcRequestSend,
1895            Self::Timeout { .. } => ActionKind::P2pChannelsRpcTimeout,
1896            Self::ResponseReceived { .. } => ActionKind::P2pChannelsRpcResponseReceived,
1897            Self::RequestReceived { .. } => ActionKind::P2pChannelsRpcRequestReceived,
1898            Self::ResponsePending { .. } => ActionKind::P2pChannelsRpcResponsePending,
1899            Self::ResponseSend { .. } => ActionKind::P2pChannelsRpcResponseSend,
1900        }
1901    }
1902}
1903
1904impl ActionKindGet for P2pChannelsStreamingRpcAction {
1905    fn kind(&self) -> ActionKind {
1906        match self {
1907            Self::Init { .. } => ActionKind::P2pChannelsStreamingRpcInit,
1908            Self::Pending { .. } => ActionKind::P2pChannelsStreamingRpcPending,
1909            Self::Ready { .. } => ActionKind::P2pChannelsStreamingRpcReady,
1910            Self::RequestSend { .. } => ActionKind::P2pChannelsStreamingRpcRequestSend,
1911            Self::Timeout { .. } => ActionKind::P2pChannelsStreamingRpcTimeout,
1912            Self::ResponseNextPartGet { .. } => {
1913                ActionKind::P2pChannelsStreamingRpcResponseNextPartGet
1914            }
1915            Self::ResponsePartReceived { .. } => {
1916                ActionKind::P2pChannelsStreamingRpcResponsePartReceived
1917            }
1918            Self::ResponseReceived { .. } => ActionKind::P2pChannelsStreamingRpcResponseReceived,
1919            Self::RequestReceived { .. } => ActionKind::P2pChannelsStreamingRpcRequestReceived,
1920            Self::ResponsePending { .. } => ActionKind::P2pChannelsStreamingRpcResponsePending,
1921            Self::ResponseSendInit { .. } => ActionKind::P2pChannelsStreamingRpcResponseSendInit,
1922            Self::ResponsePartNextSend { .. } => {
1923                ActionKind::P2pChannelsStreamingRpcResponsePartNextSend
1924            }
1925            Self::ResponsePartSend { .. } => ActionKind::P2pChannelsStreamingRpcResponsePartSend,
1926            Self::ResponseSent { .. } => ActionKind::P2pChannelsStreamingRpcResponseSent,
1927        }
1928    }
1929}
1930
1931impl ActionKindGet for P2pNetworkSchedulerAction {
1932    fn kind(&self) -> ActionKind {
1933        match self {
1934            Self::InterfaceDetected { .. } => ActionKind::P2pNetworkSchedulerInterfaceDetected,
1935            Self::InterfaceExpired { .. } => ActionKind::P2pNetworkSchedulerInterfaceExpired,
1936            Self::ListenerReady { .. } => ActionKind::P2pNetworkSchedulerListenerReady,
1937            Self::ListenerError { .. } => ActionKind::P2pNetworkSchedulerListenerError,
1938            Self::IncomingConnectionIsReady { .. } => {
1939                ActionKind::P2pNetworkSchedulerIncomingConnectionIsReady
1940            }
1941            Self::IncomingDidAccept { .. } => ActionKind::P2pNetworkSchedulerIncomingDidAccept,
1942            Self::IncomingDataIsReady { .. } => ActionKind::P2pNetworkSchedulerIncomingDataIsReady,
1943            Self::OutgoingConnect { .. } => ActionKind::P2pNetworkSchedulerOutgoingConnect,
1944            Self::OutgoingDidConnect { .. } => ActionKind::P2pNetworkSchedulerOutgoingDidConnect,
1945            Self::IncomingDataDidReceive { .. } => {
1946                ActionKind::P2pNetworkSchedulerIncomingDataDidReceive
1947            }
1948            Self::SelectDone { .. } => ActionKind::P2pNetworkSchedulerSelectDone,
1949            Self::SelectError { .. } => ActionKind::P2pNetworkSchedulerSelectError,
1950            Self::YamuxDidInit { .. } => ActionKind::P2pNetworkSchedulerYamuxDidInit,
1951            Self::Disconnect { .. } => ActionKind::P2pNetworkSchedulerDisconnect,
1952            Self::Error { .. } => ActionKind::P2pNetworkSchedulerError,
1953            Self::Disconnected { .. } => ActionKind::P2pNetworkSchedulerDisconnected,
1954            Self::Prune { .. } => ActionKind::P2pNetworkSchedulerPrune,
1955            Self::PruneStream { .. } => ActionKind::P2pNetworkSchedulerPruneStream,
1956        }
1957    }
1958}
1959
1960impl ActionKindGet for P2pNetworkPnetAction {
1961    fn kind(&self) -> ActionKind {
1962        match self {
1963            Self::IncomingData { .. } => ActionKind::P2pNetworkPnetIncomingData,
1964            Self::OutgoingData { .. } => ActionKind::P2pNetworkPnetOutgoingData,
1965            Self::SetupNonce { .. } => ActionKind::P2pNetworkPnetSetupNonce,
1966            Self::Timeout { .. } => ActionKind::P2pNetworkPnetTimeout,
1967        }
1968    }
1969}
1970
1971impl ActionKindGet for P2pNetworkSelectAction {
1972    fn kind(&self) -> ActionKind {
1973        match self {
1974            Self::Init { .. } => ActionKind::P2pNetworkSelectInit,
1975            Self::IncomingDataAuth { .. } => ActionKind::P2pNetworkSelectIncomingDataAuth,
1976            Self::IncomingDataMux { .. } => ActionKind::P2pNetworkSelectIncomingDataMux,
1977            Self::IncomingData { .. } => ActionKind::P2pNetworkSelectIncomingData,
1978            Self::IncomingPayloadAuth { .. } => ActionKind::P2pNetworkSelectIncomingPayloadAuth,
1979            Self::IncomingPayloadMux { .. } => ActionKind::P2pNetworkSelectIncomingPayloadMux,
1980            Self::IncomingPayload { .. } => ActionKind::P2pNetworkSelectIncomingPayload,
1981            Self::IncomingToken { .. } => ActionKind::P2pNetworkSelectIncomingToken,
1982            Self::OutgoingTokens { .. } => ActionKind::P2pNetworkSelectOutgoingTokens,
1983            Self::Timeout { .. } => ActionKind::P2pNetworkSelectTimeout,
1984        }
1985    }
1986}
1987
1988impl ActionKindGet for P2pNetworkNoiseAction {
1989    fn kind(&self) -> ActionKind {
1990        match self {
1991            Self::Init { .. } => ActionKind::P2pNetworkNoiseInit,
1992            Self::IncomingData { .. } => ActionKind::P2pNetworkNoiseIncomingData,
1993            Self::IncomingChunk { .. } => ActionKind::P2pNetworkNoiseIncomingChunk,
1994            Self::OutgoingChunk { .. } => ActionKind::P2pNetworkNoiseOutgoingChunk,
1995            Self::OutgoingChunkSelectMux { .. } => {
1996                ActionKind::P2pNetworkNoiseOutgoingChunkSelectMux
1997            }
1998            Self::OutgoingData { .. } => ActionKind::P2pNetworkNoiseOutgoingData,
1999            Self::OutgoingDataSelectMux { .. } => ActionKind::P2pNetworkNoiseOutgoingDataSelectMux,
2000            Self::DecryptedData { .. } => ActionKind::P2pNetworkNoiseDecryptedData,
2001            Self::HandshakeDone { .. } => ActionKind::P2pNetworkNoiseHandshakeDone,
2002        }
2003    }
2004}
2005
2006impl ActionKindGet for P2pNetworkYamuxAction {
2007    fn kind(&self) -> ActionKind {
2008        match self {
2009            Self::IncomingData { .. } => ActionKind::P2pNetworkYamuxIncomingData,
2010            Self::OutgoingData { .. } => ActionKind::P2pNetworkYamuxOutgoingData,
2011            Self::IncomingFrame { .. } => ActionKind::P2pNetworkYamuxIncomingFrame,
2012            Self::OutgoingFrame { .. } => ActionKind::P2pNetworkYamuxOutgoingFrame,
2013            Self::PingStream { .. } => ActionKind::P2pNetworkYamuxPingStream,
2014            Self::OpenStream { .. } => ActionKind::P2pNetworkYamuxOpenStream,
2015        }
2016    }
2017}
2018
2019impl ActionKindGet for P2pNetworkIdentifyAction {
2020    fn kind(&self) -> ActionKind {
2021        match self {
2022            Self::Stream(a) => a.kind(),
2023        }
2024    }
2025}
2026
2027impl ActionKindGet for P2pNetworkKadAction {
2028    fn kind(&self) -> ActionKind {
2029        match self {
2030            Self::System(a) => a.kind(),
2031            Self::Bootstrap(a) => a.kind(),
2032            Self::Request(a) => a.kind(),
2033            Self::Stream(a) => a.kind(),
2034        }
2035    }
2036}
2037
2038impl ActionKindGet for P2pNetworkPubsubAction {
2039    fn kind(&self) -> ActionKind {
2040        match self {
2041            Self::NewStream { .. } => ActionKind::P2pNetworkPubsubNewStream,
2042            Self::IncomingData { .. } => ActionKind::P2pNetworkPubsubIncomingData,
2043            Self::ValidateIncomingMessages { .. } => {
2044                ActionKind::P2pNetworkPubsubValidateIncomingMessages
2045            }
2046            Self::IncomingMessage { .. } => ActionKind::P2pNetworkPubsubIncomingMessage,
2047            Self::IncomingMessageCleanup { .. } => {
2048                ActionKind::P2pNetworkPubsubIncomingMessageCleanup
2049            }
2050            Self::Graft { .. } => ActionKind::P2pNetworkPubsubGraft,
2051            Self::Prune { .. } => ActionKind::P2pNetworkPubsubPrune,
2052            Self::WebRtcRebroadcast { .. } => ActionKind::P2pNetworkPubsubWebRtcRebroadcast,
2053            Self::Broadcast { .. } => ActionKind::P2pNetworkPubsubBroadcast,
2054            Self::Sign { .. } => ActionKind::P2pNetworkPubsubSign,
2055            Self::SignError { .. } => ActionKind::P2pNetworkPubsubSignError,
2056            Self::BroadcastSigned { .. } => ActionKind::P2pNetworkPubsubBroadcastSigned,
2057            Self::OutgoingMessage { .. } => ActionKind::P2pNetworkPubsubOutgoingMessage,
2058            Self::OutgoingMessageClear { .. } => ActionKind::P2pNetworkPubsubOutgoingMessageClear,
2059            Self::OutgoingMessageError { .. } => ActionKind::P2pNetworkPubsubOutgoingMessageError,
2060            Self::OutgoingData { .. } => ActionKind::P2pNetworkPubsubOutgoingData,
2061            Self::HandleIncomingMessage { .. } => ActionKind::P2pNetworkPubsubHandleIncomingMessage,
2062            Self::ValidateIncomingMessage { .. } => {
2063                ActionKind::P2pNetworkPubsubValidateIncomingMessage
2064            }
2065            Self::PruneMessages { .. } => ActionKind::P2pNetworkPubsubPruneMessages,
2066            Self::RejectMessage { .. } => ActionKind::P2pNetworkPubsubRejectMessage,
2067            Self::IgnoreMessage { .. } => ActionKind::P2pNetworkPubsubIgnoreMessage,
2068            Self::BroadcastValidatedMessage { .. } => {
2069                ActionKind::P2pNetworkPubsubBroadcastValidatedMessage
2070            }
2071        }
2072    }
2073}
2074
2075impl ActionKindGet for P2pNetworkRpcAction {
2076    fn kind(&self) -> ActionKind {
2077        match self {
2078            Self::Init { .. } => ActionKind::P2pNetworkRpcInit,
2079            Self::IncomingData { .. } => ActionKind::P2pNetworkRpcIncomingData,
2080            Self::IncomingMessage { .. } => ActionKind::P2pNetworkRpcIncomingMessage,
2081            Self::PrunePending { .. } => ActionKind::P2pNetworkRpcPrunePending,
2082            Self::HeartbeatSend { .. } => ActionKind::P2pNetworkRpcHeartbeatSend,
2083            Self::OutgoingQuery { .. } => ActionKind::P2pNetworkRpcOutgoingQuery,
2084            Self::OutgoingResponse { .. } => ActionKind::P2pNetworkRpcOutgoingResponse,
2085            Self::OutgoingData { .. } => ActionKind::P2pNetworkRpcOutgoingData,
2086        }
2087    }
2088}
2089
2090impl ActionKindGet for P2pConnectionOutgoingEffectfulAction {
2091    fn kind(&self) -> ActionKind {
2092        match self {
2093            Self::RandomInit { .. } => ActionKind::P2pConnectionOutgoingEffectfulRandomInit,
2094            Self::Init { .. } => ActionKind::P2pConnectionOutgoingEffectfulInit,
2095            Self::OfferSend { .. } => ActionKind::P2pConnectionOutgoingEffectfulOfferSend,
2096            Self::AnswerSet { .. } => ActionKind::P2pConnectionOutgoingEffectfulAnswerSet,
2097            Self::ConnectionAuthorizationEncryptAndSend { .. } => {
2098                ActionKind::P2pConnectionOutgoingEffectfulConnectionAuthorizationEncryptAndSend
2099            }
2100            Self::ConnectionAuthorizationDecryptAndCheck { .. } => {
2101                ActionKind::P2pConnectionOutgoingEffectfulConnectionAuthorizationDecryptAndCheck
2102            }
2103        }
2104    }
2105}
2106
2107impl ActionKindGet for P2pConnectionIncomingEffectfulAction {
2108    fn kind(&self) -> ActionKind {
2109        match self {
2110            Self::Init { .. } => ActionKind::P2pConnectionIncomingEffectfulInit,
2111            Self::ConnectionAuthorizationEncryptAndSend { .. } => {
2112                ActionKind::P2pConnectionIncomingEffectfulConnectionAuthorizationEncryptAndSend
2113            }
2114            Self::ConnectionAuthorizationDecryptAndCheck { .. } => {
2115                ActionKind::P2pConnectionIncomingEffectfulConnectionAuthorizationDecryptAndCheck
2116            }
2117        }
2118    }
2119}
2120
2121impl ActionKindGet for P2pNetworkSchedulerEffectfulAction {
2122    fn kind(&self) -> ActionKind {
2123        match self {
2124            Self::InterfaceDetected { .. } => {
2125                ActionKind::P2pNetworkSchedulerEffectfulInterfaceDetected
2126            }
2127            Self::IncomingConnectionIsReady { .. } => {
2128                ActionKind::P2pNetworkSchedulerEffectfulIncomingConnectionIsReady
2129            }
2130            Self::IncomingDidAccept { .. } => {
2131                ActionKind::P2pNetworkSchedulerEffectfulIncomingDidAccept
2132            }
2133            Self::OutgoingConnect { .. } => ActionKind::P2pNetworkSchedulerEffectfulOutgoingConnect,
2134            Self::OutgoingDidConnect { .. } => {
2135                ActionKind::P2pNetworkSchedulerEffectfulOutgoingDidConnect
2136            }
2137            Self::IncomingDataIsReady { .. } => {
2138                ActionKind::P2pNetworkSchedulerEffectfulIncomingDataIsReady
2139            }
2140            Self::NoiseSelectDone { .. } => ActionKind::P2pNetworkSchedulerEffectfulNoiseSelectDone,
2141            Self::Disconnect { .. } => ActionKind::P2pNetworkSchedulerEffectfulDisconnect,
2142        }
2143    }
2144}
2145
2146impl ActionKindGet for P2pNetworkPnetEffectfulAction {
2147    fn kind(&self) -> ActionKind {
2148        match self {
2149            Self::OutgoingData { .. } => ActionKind::P2pNetworkPnetEffectfulOutgoingData,
2150            Self::SetupNonce { .. } => ActionKind::P2pNetworkPnetEffectfulSetupNonce,
2151        }
2152    }
2153}
2154
2155impl ActionKindGet for P2pNetworkPubsubEffectfulAction {
2156    fn kind(&self) -> ActionKind {
2157        match self {
2158            Self::Sign { .. } => ActionKind::P2pNetworkPubsubEffectfulSign,
2159            Self::ValidateIncomingMessages { .. } => {
2160                ActionKind::P2pNetworkPubsubEffectfulValidateIncomingMessages
2161            }
2162        }
2163    }
2164}
2165
2166impl ActionKindGet for P2pNetworkIdentifyEffectfulAction {
2167    fn kind(&self) -> ActionKind {
2168        match self {
2169            Self::Stream(a) => a.kind(),
2170        }
2171    }
2172}
2173
2174impl ActionKindGet for P2pNetworkKadEffectfulAction {
2175    fn kind(&self) -> ActionKind {
2176        match self {
2177            Self::Discovered { .. } => ActionKind::P2pNetworkKadEffectfulDiscovered,
2178            Self::MakeRequest { .. } => ActionKind::P2pNetworkKadEffectfulMakeRequest,
2179        }
2180    }
2181}
2182
2183impl ActionKindGet for TransitionFrontierSyncLedgerAction {
2184    fn kind(&self) -> ActionKind {
2185        match self {
2186            Self::Snarked(a) => a.kind(),
2187            Self::Staged(a) => a.kind(),
2188            Self::Init => ActionKind::TransitionFrontierSyncLedgerInit,
2189            Self::Success => ActionKind::TransitionFrontierSyncLedgerSuccess,
2190        }
2191    }
2192}
2193
2194impl ActionKindGet for P2pNetworkIdentifyStreamAction {
2195    fn kind(&self) -> ActionKind {
2196        match self {
2197            Self::New { .. } => ActionKind::P2pNetworkIdentifyStreamNew,
2198            Self::IncomingData { .. } => ActionKind::P2pNetworkIdentifyStreamIncomingData,
2199            Self::Close { .. } => ActionKind::P2pNetworkIdentifyStreamClose,
2200            Self::RemoteClose { .. } => ActionKind::P2pNetworkIdentifyStreamRemoteClose,
2201            Self::Prune { .. } => ActionKind::P2pNetworkIdentifyStreamPrune,
2202            Self::SendIdentify { .. } => ActionKind::P2pNetworkIdentifyStreamSendIdentify,
2203        }
2204    }
2205}
2206
2207impl ActionKindGet for P2pNetworkKademliaAction {
2208    fn kind(&self) -> ActionKind {
2209        match self {
2210            Self::AnswerFindNodeRequest { .. } => {
2211                ActionKind::P2pNetworkKademliaAnswerFindNodeRequest
2212            }
2213            Self::UpdateFindNodeRequest { .. } => {
2214                ActionKind::P2pNetworkKademliaUpdateFindNodeRequest
2215            }
2216            Self::StartBootstrap { .. } => ActionKind::P2pNetworkKademliaStartBootstrap,
2217            Self::BootstrapFinished => ActionKind::P2pNetworkKademliaBootstrapFinished,
2218            Self::UpdateRoutingTable { .. } => ActionKind::P2pNetworkKademliaUpdateRoutingTable,
2219        }
2220    }
2221}
2222
2223impl ActionKindGet for P2pNetworkKadBootstrapAction {
2224    fn kind(&self) -> ActionKind {
2225        match self {
2226            Self::CreateRequests => ActionKind::P2pNetworkKadBootstrapCreateRequests,
2227            Self::AppendRequest { .. } => ActionKind::P2pNetworkKadBootstrapAppendRequest,
2228            Self::FinalizeRequests => ActionKind::P2pNetworkKadBootstrapFinalizeRequests,
2229            Self::RequestDone { .. } => ActionKind::P2pNetworkKadBootstrapRequestDone,
2230            Self::RequestError { .. } => ActionKind::P2pNetworkKadBootstrapRequestError,
2231        }
2232    }
2233}
2234
2235impl ActionKindGet for P2pNetworkKadRequestAction {
2236    fn kind(&self) -> ActionKind {
2237        match self {
2238            Self::New { .. } => ActionKind::P2pNetworkKadRequestNew,
2239            Self::PeerIsConnecting { .. } => ActionKind::P2pNetworkKadRequestPeerIsConnecting,
2240            Self::MuxReady { .. } => ActionKind::P2pNetworkKadRequestMuxReady,
2241            Self::StreamIsCreating { .. } => ActionKind::P2pNetworkKadRequestStreamIsCreating,
2242            Self::StreamReady { .. } => ActionKind::P2pNetworkKadRequestStreamReady,
2243            Self::RequestSent { .. } => ActionKind::P2pNetworkKadRequestRequestSent,
2244            Self::ReplyReceived { .. } => ActionKind::P2pNetworkKadRequestReplyReceived,
2245            Self::Prune { .. } => ActionKind::P2pNetworkKadRequestPrune,
2246            Self::Error { .. } => ActionKind::P2pNetworkKadRequestError,
2247        }
2248    }
2249}
2250
2251impl ActionKindGet for P2pNetworkKademliaStreamAction {
2252    fn kind(&self) -> ActionKind {
2253        match self {
2254            Self::New { .. } => ActionKind::P2pNetworkKademliaStreamNew,
2255            Self::IncomingData { .. } => ActionKind::P2pNetworkKademliaStreamIncomingData,
2256            Self::RemoteClose { .. } => ActionKind::P2pNetworkKademliaStreamRemoteClose,
2257            Self::WaitIncoming { .. } => ActionKind::P2pNetworkKademliaStreamWaitIncoming,
2258            Self::WaitOutgoing { .. } => ActionKind::P2pNetworkKademliaStreamWaitOutgoing,
2259            Self::SendRequest { .. } => ActionKind::P2pNetworkKademliaStreamSendRequest,
2260            Self::SendResponse { .. } => ActionKind::P2pNetworkKademliaStreamSendResponse,
2261            Self::OutgoingDataReady { .. } => ActionKind::P2pNetworkKademliaStreamOutgoingDataReady,
2262            Self::Close { .. } => ActionKind::P2pNetworkKademliaStreamClose,
2263            Self::Prune { .. } => ActionKind::P2pNetworkKademliaStreamPrune,
2264        }
2265    }
2266}
2267
2268impl ActionKindGet for P2pNetworkIdentifyStreamEffectfulAction {
2269    fn kind(&self) -> ActionKind {
2270        match self {
2271            Self::GetListenAddresses { .. } => {
2272                ActionKind::P2pNetworkIdentifyStreamEffectfulGetListenAddresses
2273            }
2274        }
2275    }
2276}
2277
2278impl ActionKindGet for TransitionFrontierSyncLedgerSnarkedAction {
2279    fn kind(&self) -> ActionKind {
2280        match self {
2281            Self::Pending => ActionKind::TransitionFrontierSyncLedgerSnarkedPending,
2282            Self::PeersQuery => ActionKind::TransitionFrontierSyncLedgerSnarkedPeersQuery,
2283            Self::PeerQueryNumAccountsInit { .. } => {
2284                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsInit
2285            }
2286            Self::PeerQueryNumAccountsPending { .. } => {
2287                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsPending
2288            }
2289            Self::PeerQueryNumAccountsRetry { .. } => {
2290                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsRetry
2291            }
2292            Self::PeerQueryNumAccountsError { .. } => {
2293                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsError
2294            }
2295            Self::PeerQueryNumAccountsSuccess { .. } => {
2296                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryNumAccountsSuccess
2297            }
2298            Self::NumAccountsReceived { .. } => {
2299                ActionKind::TransitionFrontierSyncLedgerSnarkedNumAccountsReceived
2300            }
2301            Self::NumAccountsAccepted { .. } => {
2302                ActionKind::TransitionFrontierSyncLedgerSnarkedNumAccountsAccepted
2303            }
2304            Self::NumAccountsRejected { .. } => {
2305                ActionKind::TransitionFrontierSyncLedgerSnarkedNumAccountsRejected
2306            }
2307            Self::NumAccountsSuccess { .. } => {
2308                ActionKind::TransitionFrontierSyncLedgerSnarkedNumAccountsSuccess
2309            }
2310            Self::MerkleTreeSyncPending => {
2311                ActionKind::TransitionFrontierSyncLedgerSnarkedMerkleTreeSyncPending
2312            }
2313            Self::PeerQueryAddressInit { .. } => {
2314                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryAddressInit
2315            }
2316            Self::PeerQueryAddressPending { .. } => {
2317                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryAddressPending
2318            }
2319            Self::PeerQueryAddressRetry { .. } => {
2320                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryAddressRetry
2321            }
2322            Self::PeerQueryAddressError { .. } => {
2323                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryAddressError
2324            }
2325            Self::PeerQueryAddressSuccess { .. } => {
2326                ActionKind::TransitionFrontierSyncLedgerSnarkedPeerQueryAddressSuccess
2327            }
2328            Self::ChildHashesReceived { .. } => {
2329                ActionKind::TransitionFrontierSyncLedgerSnarkedChildHashesReceived
2330            }
2331            Self::ChildHashesAccepted { .. } => {
2332                ActionKind::TransitionFrontierSyncLedgerSnarkedChildHashesAccepted
2333            }
2334            Self::ChildHashesRejected { .. } => {
2335                ActionKind::TransitionFrontierSyncLedgerSnarkedChildHashesRejected
2336            }
2337            Self::ChildAccountsReceived { .. } => {
2338                ActionKind::TransitionFrontierSyncLedgerSnarkedChildAccountsReceived
2339            }
2340            Self::ChildAccountsAccepted { .. } => {
2341                ActionKind::TransitionFrontierSyncLedgerSnarkedChildAccountsAccepted
2342            }
2343            Self::ChildAccountsRejected { .. } => {
2344                ActionKind::TransitionFrontierSyncLedgerSnarkedChildAccountsRejected
2345            }
2346            Self::MerkleTreeSyncSuccess => {
2347                ActionKind::TransitionFrontierSyncLedgerSnarkedMerkleTreeSyncSuccess
2348            }
2349            Self::Success => ActionKind::TransitionFrontierSyncLedgerSnarkedSuccess,
2350        }
2351    }
2352}
2353
2354impl ActionKindGet for TransitionFrontierSyncLedgerStagedAction {
2355    fn kind(&self) -> ActionKind {
2356        match self {
2357            Self::PartsFetchPending => {
2358                ActionKind::TransitionFrontierSyncLedgerStagedPartsFetchPending
2359            }
2360            Self::PartsPeerFetchInit => {
2361                ActionKind::TransitionFrontierSyncLedgerStagedPartsPeerFetchInit
2362            }
2363            Self::PartsPeerFetchPending { .. } => {
2364                ActionKind::TransitionFrontierSyncLedgerStagedPartsPeerFetchPending
2365            }
2366            Self::PartsPeerFetchError { .. } => {
2367                ActionKind::TransitionFrontierSyncLedgerStagedPartsPeerFetchError
2368            }
2369            Self::PartsPeerFetchSuccess { .. } => {
2370                ActionKind::TransitionFrontierSyncLedgerStagedPartsPeerFetchSuccess
2371            }
2372            Self::PartsPeerInvalid { .. } => {
2373                ActionKind::TransitionFrontierSyncLedgerStagedPartsPeerInvalid
2374            }
2375            Self::PartsPeerValid { .. } => {
2376                ActionKind::TransitionFrontierSyncLedgerStagedPartsPeerValid
2377            }
2378            Self::PartsFetchSuccess { .. } => {
2379                ActionKind::TransitionFrontierSyncLedgerStagedPartsFetchSuccess
2380            }
2381            Self::ReconstructEmpty => {
2382                ActionKind::TransitionFrontierSyncLedgerStagedReconstructEmpty
2383            }
2384            Self::ReconstructInit => ActionKind::TransitionFrontierSyncLedgerStagedReconstructInit,
2385            Self::ReconstructPending => {
2386                ActionKind::TransitionFrontierSyncLedgerStagedReconstructPending
2387            }
2388            Self::ReconstructError { .. } => {
2389                ActionKind::TransitionFrontierSyncLedgerStagedReconstructError
2390            }
2391            Self::ReconstructSuccess { .. } => {
2392                ActionKind::TransitionFrontierSyncLedgerStagedReconstructSuccess
2393            }
2394            Self::Success => ActionKind::TransitionFrontierSyncLedgerStagedSuccess,
2395        }
2396    }
2397}