Skip to main content

sendfun_sdk/launchpad/generated/events/
send_launchpad_events.rs

1#![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
16//! This code was AUTOGENERATED using the codama library.
17//! Please DO NOT EDIT THIS FILE, instead use visitors
18//! to add features, then rerun codama to update it.
19//!
20//! <https://github.com/codama-idl/codama>
21//!
22
23use crate::launchpad::generated::events::COMPLETE_EVENT_DISCRIMINATOR;
24use crate::launchpad::generated::events::CREATOR_CLAIM_EVENT_DISCRIMINATOR;
25use crate::launchpad::generated::events::CompleteEvent;
26use crate::launchpad::generated::events::CreatorClaimEvent;
27use crate::launchpad::generated::events::MIGRATE_EVENT_DISCRIMINATOR;
28use crate::launchpad::generated::events::MigrateEvent;
29use crate::launchpad::generated::events::PROTOCOL_CLAIM_EVENT_DISCRIMINATOR;
30use crate::launchpad::generated::events::ProtocolClaimEvent;
31use crate::launchpad::generated::events::RECYCLE_EVENT_DISCRIMINATOR;
32use crate::launchpad::generated::events::RecycleEvent;
33use crate::launchpad::generated::events::TOKEN_CREATE_EVENT_DISCRIMINATOR;
34use crate::launchpad::generated::events::TRADE_EVENT_DISCRIMINATOR;
35use crate::launchpad::generated::events::TokenCreateEvent;
36use crate::launchpad::generated::events::TradeEvent;
37use borsh::BorshDeserialize;
38
39/// Shared event-framing tag prepended to every framed event emitted by the
40/// `send_launchpad` program.
41pub const ANCHOR_EVENT_CPI_DISCRIMINATOR: [u8; 8] =
42	[228, 69, 165, 46, 81, 203, 154, 29];
43
44/// Event kinds for the `send_launchpad` program.
45#[derive(Clone, Debug, Eq, PartialEq)]
46pub enum SendLaunchpadEventKind {
47	CompleteEvent,
48	CreatorClaimEvent,
49	MigrateEvent,
50	ProtocolClaimEvent,
51	RecycleEvent,
52	TokenCreateEvent,
53	TradeEvent,
54}
55
56/// Identifies a `send_launchpad` event from the provided data.
57///
58/// A foreign `program_id` is a `None`, not an error: callers iterate whole transactions where
59/// other programs are ordinary.
60/// Data that lacks the shared CPI framing is rejected with a single compare.
61pub fn identify_send_launchpad_event(
62	program_id: &solana_address::Address,
63	data: &[u8],
64) -> Option<SendLaunchpadEventKind> {
65	if program_id != &crate::launchpad::generated::SEND_LAUNCHPAD_ID {
66		return None;
67	}
68	if data.get(..ANCHOR_EVENT_CPI_DISCRIMINATOR.len())
69		== Some(&ANCHOR_EVENT_CPI_DISCRIMINATOR[..])
70	{
71		if data.get(8..16) == Some(&COMPLETE_EVENT_DISCRIMINATOR[..]) {
72			return Some(SendLaunchpadEventKind::CompleteEvent);
73		}
74		if data.get(8..16) == Some(&CREATOR_CLAIM_EVENT_DISCRIMINATOR[..]) {
75			return Some(SendLaunchpadEventKind::CreatorClaimEvent);
76		}
77		if data.get(8..16) == Some(&MIGRATE_EVENT_DISCRIMINATOR[..]) {
78			return Some(SendLaunchpadEventKind::MigrateEvent);
79		}
80		if data.get(8..16) == Some(&PROTOCOL_CLAIM_EVENT_DISCRIMINATOR[..]) {
81			return Some(SendLaunchpadEventKind::ProtocolClaimEvent);
82		}
83		if data.get(8..16) == Some(&RECYCLE_EVENT_DISCRIMINATOR[..]) {
84			return Some(SendLaunchpadEventKind::RecycleEvent);
85		}
86		if data.get(8..16) == Some(&TOKEN_CREATE_EVENT_DISCRIMINATOR[..]) {
87			return Some(SendLaunchpadEventKind::TokenCreateEvent);
88		}
89		if data.get(8..16) == Some(&TRADE_EVENT_DISCRIMINATOR[..]) {
90			return Some(SendLaunchpadEventKind::TradeEvent);
91		}
92	}
93	None
94}
95
96/// Parsed event variants for the `send_launchpad` program.
97#[derive(Clone, Debug, Eq, PartialEq)]
98pub enum SendLaunchpadEvent {
99	CompleteEvent(CompleteEvent),
100	CreatorClaimEvent(CreatorClaimEvent),
101	MigrateEvent(MigrateEvent),
102	ProtocolClaimEvent(ProtocolClaimEvent),
103	RecycleEvent(RecycleEvent),
104	TokenCreateEvent(TokenCreateEvent),
105	TradeEvent(TradeEvent),
106}
107
108/// Tries to parse a `send_launchpad` event from the provided data.
109///
110/// `None` when [`identify_send_launchpad_event`] finds nothing; `Some(Err(_))`
111/// when one matches but fails to deserialize. Use [`Option::transpose`] to propagate failures
112/// with `?`, or scan a batch:
113///
114/// ```ignore
115/// let events: Vec<SendLaunchpadEvent> = datas
116///     .iter()
117///     .filter_map(|data| try_parse_send_launchpad_event(program_id, data))
118///     .collect::<Result<_, _>>()?;
119/// ```
120pub fn try_parse_send_launchpad_event(
121	program_id: &solana_address::Address,
122	data: &[u8],
123) -> Option<Result<SendLaunchpadEvent, std::io::Error>> {
124	let event_kind = identify_send_launchpad_event(program_id, data)?;
125	Some(match event_kind {
126		SendLaunchpadEventKind::CompleteEvent => {
127			// ANCHOR_EVENT_CPI_DISCRIMINATOR (8) + COMPLETE_EVENT_DISCRIMINATOR (8)
128			let mut data = &data[16..];
129			CompleteEvent::deserialize(&mut data)
130				.map(SendLaunchpadEvent::CompleteEvent)
131		}
132		SendLaunchpadEventKind::CreatorClaimEvent => {
133			// ANCHOR_EVENT_CPI_DISCRIMINATOR (8) + CREATOR_CLAIM_EVENT_DISCRIMINATOR (8)
134			let mut data = &data[16..];
135			CreatorClaimEvent::deserialize(&mut data)
136				.map(SendLaunchpadEvent::CreatorClaimEvent)
137		}
138		SendLaunchpadEventKind::MigrateEvent => {
139			// ANCHOR_EVENT_CPI_DISCRIMINATOR (8) + MIGRATE_EVENT_DISCRIMINATOR (8)
140			let mut data = &data[16..];
141			MigrateEvent::deserialize(&mut data)
142				.map(SendLaunchpadEvent::MigrateEvent)
143		}
144		SendLaunchpadEventKind::ProtocolClaimEvent => {
145			// ANCHOR_EVENT_CPI_DISCRIMINATOR (8) + PROTOCOL_CLAIM_EVENT_DISCRIMINATOR (8)
146			let mut data = &data[16..];
147			ProtocolClaimEvent::deserialize(&mut data)
148				.map(SendLaunchpadEvent::ProtocolClaimEvent)
149		}
150		SendLaunchpadEventKind::RecycleEvent => {
151			// ANCHOR_EVENT_CPI_DISCRIMINATOR (8) + RECYCLE_EVENT_DISCRIMINATOR (8)
152			let mut data = &data[16..];
153			RecycleEvent::deserialize(&mut data)
154				.map(SendLaunchpadEvent::RecycleEvent)
155		}
156		SendLaunchpadEventKind::TokenCreateEvent => {
157			// ANCHOR_EVENT_CPI_DISCRIMINATOR (8) + TOKEN_CREATE_EVENT_DISCRIMINATOR (8)
158			let mut data = &data[16..];
159			TokenCreateEvent::deserialize(&mut data)
160				.map(SendLaunchpadEvent::TokenCreateEvent)
161		}
162		SendLaunchpadEventKind::TradeEvent => {
163			// ANCHOR_EVENT_CPI_DISCRIMINATOR (8) + TRADE_EVENT_DISCRIMINATOR (8)
164			let mut data = &data[16..];
165			TradeEvent::deserialize(&mut data)
166				.map(SendLaunchpadEvent::TradeEvent)
167		}
168	})
169}