sendfun_sdk/dex/generated/events/
send_dex_events.rs1#![allow(
2 clippy::all,
3 clippy::pedantic,
4 clippy::nursery,
5 clippy::expect_used,
6 clippy::unwrap_used,
7 clippy::indexing_slicing,
8 clippy::allow_attributes,
9 clippy::allow_attributes_without_reason,
10 clippy::mem_forget,
11 unfulfilled_lint_expectations,
12 unexpected_cfgs,
13 unused_imports
14)]
15
16use crate::dex::generated::events::CREATOR_CLAIM_EVENT_DISCRIMINATOR;
24use crate::dex::generated::events::CreatorClaimEvent;
25use crate::dex::generated::events::DEPOSIT_QUOTE_EVENT_DISCRIMINATOR;
26use crate::dex::generated::events::DepositQuoteEvent;
27use crate::dex::generated::events::POOL_CREATE_EVENT_DISCRIMINATOR;
28use crate::dex::generated::events::PROTOCOL_CLAIM_EVENT_DISCRIMINATOR;
29use crate::dex::generated::events::PoolCreateEvent;
30use crate::dex::generated::events::ProtocolClaimEvent;
31use crate::dex::generated::events::TOKEN_CREATE_EVENT_DISCRIMINATOR;
32use crate::dex::generated::events::TRADE_EVENT_DISCRIMINATOR;
33use crate::dex::generated::events::TokenCreateEvent;
34use crate::dex::generated::events::TradeEvent;
35use borsh::BorshDeserialize;
36
37pub const ANCHOR_EVENT_CPI_DISCRIMINATOR: [u8; 8] =
40 [228, 69, 165, 46, 81, 203, 154, 29];
41
42#[derive(Clone, Debug, Eq, PartialEq)]
44pub enum SendDexEventKind {
45 CreatorClaimEvent,
46 DepositQuoteEvent,
47 PoolCreateEvent,
48 ProtocolClaimEvent,
49 TokenCreateEvent,
50 TradeEvent,
51}
52
53pub fn identify_send_dex_event(
59 program_id: &solana_address::Address,
60 data: &[u8],
61) -> Option<SendDexEventKind> {
62 if program_id != &crate::dex::generated::SEND_DEX_ID {
63 return None;
64 }
65 if data.get(..ANCHOR_EVENT_CPI_DISCRIMINATOR.len())
66 == Some(&ANCHOR_EVENT_CPI_DISCRIMINATOR[..])
67 {
68 if data.get(8..16) == Some(&CREATOR_CLAIM_EVENT_DISCRIMINATOR[..]) {
69 return Some(SendDexEventKind::CreatorClaimEvent);
70 }
71 if data.get(8..16) == Some(&DEPOSIT_QUOTE_EVENT_DISCRIMINATOR[..]) {
72 return Some(SendDexEventKind::DepositQuoteEvent);
73 }
74 if data.get(8..16) == Some(&POOL_CREATE_EVENT_DISCRIMINATOR[..]) {
75 return Some(SendDexEventKind::PoolCreateEvent);
76 }
77 if data.get(8..16) == Some(&PROTOCOL_CLAIM_EVENT_DISCRIMINATOR[..]) {
78 return Some(SendDexEventKind::ProtocolClaimEvent);
79 }
80 if data.get(8..16) == Some(&TOKEN_CREATE_EVENT_DISCRIMINATOR[..]) {
81 return Some(SendDexEventKind::TokenCreateEvent);
82 }
83 if data.get(8..16) == Some(&TRADE_EVENT_DISCRIMINATOR[..]) {
84 return Some(SendDexEventKind::TradeEvent);
85 }
86 }
87 None
88}
89
90#[derive(Clone, Debug, Eq, PartialEq)]
92pub enum SendDexEvent {
93 CreatorClaimEvent(CreatorClaimEvent),
94 DepositQuoteEvent(DepositQuoteEvent),
95 PoolCreateEvent(PoolCreateEvent),
96 ProtocolClaimEvent(ProtocolClaimEvent),
97 TokenCreateEvent(TokenCreateEvent),
98 TradeEvent(TradeEvent),
99}
100
101pub fn try_parse_send_dex_event(
114 program_id: &solana_address::Address,
115 data: &[u8],
116) -> Option<Result<SendDexEvent, std::io::Error>> {
117 let event_kind = identify_send_dex_event(program_id, data)?;
118 Some(match event_kind {
119 SendDexEventKind::CreatorClaimEvent => {
120 let mut data = &data[16..];
122 CreatorClaimEvent::deserialize(&mut data)
123 .map(SendDexEvent::CreatorClaimEvent)
124 }
125 SendDexEventKind::DepositQuoteEvent => {
126 let mut data = &data[16..];
128 DepositQuoteEvent::deserialize(&mut data)
129 .map(SendDexEvent::DepositQuoteEvent)
130 }
131 SendDexEventKind::PoolCreateEvent => {
132 let mut data = &data[16..];
134 PoolCreateEvent::deserialize(&mut data)
135 .map(SendDexEvent::PoolCreateEvent)
136 }
137 SendDexEventKind::ProtocolClaimEvent => {
138 let mut data = &data[16..];
140 ProtocolClaimEvent::deserialize(&mut data)
141 .map(SendDexEvent::ProtocolClaimEvent)
142 }
143 SendDexEventKind::TokenCreateEvent => {
144 let mut data = &data[16..];
146 TokenCreateEvent::deserialize(&mut data)
147 .map(SendDexEvent::TokenCreateEvent)
148 }
149 SendDexEventKind::TradeEvent => {
150 let mut data = &data[16..];
152 TradeEvent::deserialize(&mut data).map(SendDexEvent::TradeEvent)
153 }
154 })
155}