1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, Default)]
4pub struct PumpfunTokenId {
5 #[serde(default)]
6 pub mint: Option<String>,
7 #[serde(default)]
8 pub bonding_curve: Option<String>,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, Default)]
12pub struct PumpfunTokenInfo {
13 #[serde(default)]
14 pub name: Option<Option<String>>,
15 #[serde(default)]
16 pub symbol: Option<Option<String>>,
17 #[serde(default)]
18 pub uri: Option<Option<String>>,
19 #[serde(default)]
20 pub is_complete: Option<Option<bool>>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, Default)]
24pub struct PumpfunTokenReserves {
25 #[serde(default)]
26 pub virtual_token_reserves: Option<Option<u64>>,
27 #[serde(default)]
28 pub virtual_sol_reserves: Option<Option<u64>>,
29 #[serde(default)]
30 pub real_token_reserves: Option<Option<u64>>,
31 #[serde(default)]
32 pub real_sol_reserves: Option<Option<u64>>,
33 #[serde(default)]
34 pub token_total_supply: Option<Option<u64>>,
35 #[serde(default)]
36 pub current_price_sol: Option<Option<f64>>,
37 #[serde(default)]
38 pub market_cap_sol: Option<Option<f64>>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize, Default)]
42pub struct PumpfunTokenTrading {
43 #[serde(default)]
44 pub total_buy_volume: Option<Option<u64>>,
45 #[serde(default)]
46 pub total_sell_volume: Option<Option<u64>>,
47 #[serde(default)]
48 pub total_trades: Option<Option<u64>>,
49 #[serde(default)]
50 pub buy_count: Option<Option<u64>>,
51 #[serde(default)]
52 pub sell_count: Option<Option<u64>>,
53 #[serde(default)]
54 pub unique_traders: Option<Option<u64>>,
55 #[serde(default)]
56 pub largest_trade: Option<Option<u64>>,
57 #[serde(default)]
58 pub smallest_trade: Option<Option<u64>>,
59 #[serde(default)]
60 pub last_trade_timestamp: Option<Option<i64>>,
61 #[serde(default)]
62 pub last_trade_price: Option<Option<f64>>,
63 #[serde(default)]
64 pub whale_trade_count: Option<Option<u64>>,
65 #[serde(default)]
66 pub last_whale_address: Option<Option<String>>,
67 #[serde(default)]
68 pub total_volume: Option<Option<u64>>,
69 #[serde(default)]
70 pub average_trade_size: Option<Option<f64>>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, Default)]
74pub struct PumpfunTokenEvents {
75 #[serde(default)]
76 pub create: Option<Option<serde_json::Value>>,
77 #[serde(default)]
78 pub buys: Option<Vec<serde_json::Value>>,
79 #[serde(default)]
80 pub sells: Option<Vec<serde_json::Value>>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, Default)]
84pub struct PumpfunToken {
85 #[serde(default)]
86 pub id: PumpfunTokenId,
87 #[serde(default)]
88 pub info: PumpfunTokenInfo,
89 #[serde(default)]
90 pub reserves: PumpfunTokenReserves,
91 #[serde(default)]
92 pub trading: PumpfunTokenTrading,
93 #[serde(default)]
94 pub events: PumpfunTokenEvents,
95 #[serde(default)]
96 pub bonding_curve_snapshot: Option<Option<serde_json::Value>>,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize, Default)]
100pub struct Create {
101 #[serde(rename = "mint", default)]
102 pub mint: Option<String>,
103 #[serde(rename = "mintAuthority", default)]
104 pub mint_authority: Option<String>,
105 #[serde(rename = "bondingCurve", default)]
106 pub bonding_curve: Option<String>,
107 #[serde(rename = "associatedBondingCurve", default)]
108 pub associated_bonding_curve: Option<String>,
109 #[serde(rename = "global", default)]
110 pub global: Option<String>,
111 #[serde(rename = "mplTokenMetadata", default)]
112 pub mpl_token_metadata: Option<String>,
113 #[serde(rename = "metadata", default)]
114 pub metadata: Option<String>,
115 #[serde(rename = "user", default)]
116 pub user: Option<String>,
117 #[serde(rename = "systemProgram", default)]
118 pub system_program: Option<String>,
119 #[serde(rename = "tokenProgram", default)]
120 pub token_program: Option<String>,
121 #[serde(rename = "associatedTokenProgram", default)]
122 pub associated_token_program: Option<String>,
123 #[serde(rename = "rent", default)]
124 pub rent: Option<String>,
125 #[serde(rename = "eventAuthority", default)]
126 pub event_authority: Option<String>,
127 #[serde(rename = "program", default)]
128 pub program: Option<String>,
129 #[serde(rename = "name", default)]
130 pub name: Option<String>,
131 #[serde(rename = "symbol", default)]
132 pub symbol: Option<String>,
133 #[serde(rename = "uri", default)]
134 pub uri: Option<String>,
135 #[serde(rename = "creator", default)]
136 pub creator: Option<String>,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize, Default)]
140pub struct Buy {
141 #[serde(rename = "global", default)]
142 pub global: Option<String>,
143 #[serde(rename = "feeRecipient", default)]
144 pub fee_recipient: Option<String>,
145 #[serde(rename = "mint", default)]
146 pub mint: Option<String>,
147 #[serde(rename = "bondingCurve", default)]
148 pub bonding_curve: Option<String>,
149 #[serde(rename = "associatedBondingCurve", default)]
150 pub associated_bonding_curve: Option<String>,
151 #[serde(rename = "associatedUser", default)]
152 pub associated_user: Option<String>,
153 #[serde(rename = "user", default)]
154 pub user: Option<String>,
155 #[serde(rename = "systemProgram", default)]
156 pub system_program: Option<String>,
157 #[serde(rename = "tokenProgram", default)]
158 pub token_program: Option<String>,
159 #[serde(rename = "creatorVault", default)]
160 pub creator_vault: Option<String>,
161 #[serde(rename = "eventAuthority", default)]
162 pub event_authority: Option<String>,
163 #[serde(rename = "program", default)]
164 pub program: Option<String>,
165 #[serde(rename = "amount", default)]
166 pub amount: Option<u64>,
167 #[serde(rename = "maxSolCost", default)]
168 pub max_sol_cost: Option<u64>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, Default)]
172pub struct Sell {
173 #[serde(rename = "global", default)]
174 pub global: Option<String>,
175 #[serde(rename = "feeRecipient", default)]
176 pub fee_recipient: Option<String>,
177 #[serde(rename = "mint", default)]
178 pub mint: Option<String>,
179 #[serde(rename = "bondingCurve", default)]
180 pub bonding_curve: Option<String>,
181 #[serde(rename = "associatedBondingCurve", default)]
182 pub associated_bonding_curve: Option<String>,
183 #[serde(rename = "associatedUser", default)]
184 pub associated_user: Option<String>,
185 #[serde(rename = "user", default)]
186 pub user: Option<String>,
187 #[serde(rename = "systemProgram", default)]
188 pub system_program: Option<String>,
189 #[serde(rename = "creatorVault", default)]
190 pub creator_vault: Option<String>,
191 #[serde(rename = "tokenProgram", default)]
192 pub token_program: Option<String>,
193 #[serde(rename = "eventAuthority", default)]
194 pub event_authority: Option<String>,
195 #[serde(rename = "program", default)]
196 pub program: Option<String>,
197 #[serde(rename = "amount", default)]
198 pub amount: Option<u64>,
199 #[serde(rename = "minSolOutput", default)]
200 pub min_sol_output: Option<u64>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize, Default)]
204pub struct BondingCurve {
205 #[serde(rename = "virtualTokenReserves", default)]
206 pub virtual_token_reserves: Option<u64>,
207 #[serde(rename = "virtualSolReserves", default)]
208 pub virtual_sol_reserves: Option<u64>,
209 #[serde(rename = "realTokenReserves", default)]
210 pub real_token_reserves: Option<u64>,
211 #[serde(rename = "realSolReserves", default)]
212 pub real_sol_reserves: Option<u64>,
213 #[serde(rename = "tokenTotalSupply", default)]
214 pub token_total_supply: Option<u64>,
215 #[serde(rename = "complete", default)]
216 pub complete: Option<bool>,
217 #[serde(rename = "creator", default)]
218 pub creator: Option<String>,
219}
220
221#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct EventWrapper<T> {
223 #[serde(default)]
224 pub timestamp: i64,
225 pub data: T,
226 #[serde(default)]
227 pub slot: Option<f64>,
228 #[serde(default)]
229 pub signature: Option<String>,
230}
231
232impl<T: Default> Default for EventWrapper<T> {
233 fn default() -> Self {
234 Self {
235 timestamp: 0,
236 data: T::default(),
237 slot: None,
238 signature: None,
239 }
240 }
241}