circles_types/
events.rs

1use alloy_primitives::TxHash;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5/// Base event information shared by all Circles events.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct CirclesBaseEvent {
8    pub block_number: u64,
9    pub timestamp: Option<u64>,
10    pub transaction_index: u32,
11    pub log_index: u32,
12    pub transaction_hash: Option<TxHash>,
13}
14
15/// All possible Circles event types (unknowns map to `CrcUnknownEvent`).
16#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
17pub enum CirclesEventType {
18    // HubV2 events
19    #[serde(rename = "CrcV2_ApprovalForAll")]
20    CrcV2ApprovalForAll,
21    #[serde(rename = "CrcV2_DiscountCost")]
22    CrcV2DiscountCost,
23    #[serde(rename = "CrcV2_FlowEdgesScopeLastEnded")]
24    CrcV2FlowEdgesScopeLastEnded,
25    #[serde(rename = "CrcV2_FlowEdgesScopeSingleStarted")]
26    CrcV2FlowEdgesScopeSingleStarted,
27    #[serde(rename = "CrcV2_GroupMint")]
28    CrcV2GroupMint,
29    #[serde(rename = "CrcV2_PersonalMint")]
30    CrcV2PersonalMint,
31    #[serde(rename = "CrcV2_RegisterGroup")]
32    CrcV2RegisterGroup,
33    #[serde(rename = "CrcV2_RegisterHuman")]
34    CrcV2RegisterHuman,
35    #[serde(rename = "CrcV2_RegisterOrganization")]
36    CrcV2RegisterOrganization,
37    #[serde(rename = "CrcV2_SetAdvancedUsageFlag")]
38    CrcV2SetAdvancedUsageFlag,
39    #[serde(rename = "CrcV2_Stopped")]
40    CrcV2Stopped,
41    #[serde(rename = "CrcV2_StreamCompleted")]
42    CrcV2StreamCompleted,
43    #[serde(rename = "CrcV2_TransferBatch")]
44    CrcV2TransferBatch,
45    #[serde(rename = "CrcV2_TransferSingle")]
46    CrcV2TransferSingle,
47    #[serde(rename = "CrcV2_Trust")]
48    CrcV2Trust,
49    #[serde(rename = "CrcV2_URI")]
50    CrcV2URI,
51
52    // ERC20 Wrapper events
53    #[serde(rename = "CrcV2_Approval")]
54    CrcV2Approval,
55    #[serde(rename = "CrcV2_DepositDemurraged")]
56    CrcV2DepositDemurraged,
57    #[serde(rename = "CrcV2_DepositInflationary")]
58    CrcV2DepositInflationary,
59    #[serde(rename = "CrcV2_EIP712DomainChanged")]
60    CrcV2EIP712DomainChanged,
61    #[serde(rename = "CrcV2_Transfer")]
62    CrcV2Transfer,
63    #[serde(rename = "CrcV2_WithdrawDemurraged")]
64    CrcV2WithdrawDemurraged,
65    #[serde(rename = "CrcV2_WithdrawInflationary")]
66    CrcV2WithdrawInflationary,
67
68    // Name Registry events
69    #[serde(rename = "CrcV2_CidV0")]
70    CrcV2CidV0,
71    #[serde(rename = "CrcV2_RegisterShortName")]
72    CrcV2RegisterShortName,
73    #[serde(rename = "CrcV2_UpdateMetadataDigest")]
74    CrcV2UpdateMetadataDigest,
75
76    // Base Group events
77    #[serde(rename = "CrcV2_GroupRedeemCollateralBurn")]
78    CrcV2GroupRedeemCollateralBurn,
79    #[serde(rename = "CrcV2_GroupRedeemCollateralReturn")]
80    CrcV2GroupRedeemCollateralReturn,
81
82    // Invitation events
83    #[serde(rename = "CrcV2_InviteHuman")]
84    CrcV2InviteHuman,
85
86    // Unknown event fallback
87    #[serde(rename = "Crc_UnknownEvent")]
88    CrcUnknownEvent,
89}
90
91/// Generic Circles event with dynamic data parsed from HTTP/WS.
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct CirclesEvent {
94    #[serde(flatten)]
95    pub base: CirclesBaseEvent,
96
97    #[serde(rename = "$event")]
98    pub event_type: CirclesEventType,
99
100    #[serde(flatten)]
101    pub data: HashMap<String, serde_json::Value>,
102}
103
104/// Raw RPC subscription event (`eth_subscribe("circles")`) before parsing.
105#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct RpcSubscriptionEvent {
107    pub event: String,
108    pub values: HashMap<String, serde_json::Value>,
109}