From e5615996889ccc4901988924f2bce6628d7ff0b3 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Thu, 6 Aug 2026 06:17:51 +0200 Subject: [PATCH] Parsable pub key --- src/types.rs | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/types.rs b/src/types.rs index 04465d9..0ada73d 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,5 +1,8 @@ +use std::str::FromStr; + use serde::{Deserialize, Deserializer}; use serde_json::Value; +use solana_sdk::pubkey::Pubkey; #[derive(Debug)] pub enum PumpDevEvent { @@ -56,9 +59,12 @@ impl<'de> Deserialize<'de> for PumpDevEvent { } } -#[derive(Debug, Deserialize)] +#[derive(Debug, Clone, Deserialize)] pub struct NewToken { - pub mint: String, + pub mint: PublicKeyParseable, + #[serde(rename = "traderPublicKey")] + pub trader_public_key: PublicKeyParseable, + pub name: String, pub symbol: String, pub uri: String, @@ -66,6 +72,34 @@ pub struct NewToken { pub market_cap_sol: f64, #[serde(rename = "solAmount")] pub sol_amount: f64, - #[serde(rename = "traderPublicKey")] - pub trader_public_key: String, +} + +impl std::ops::Deref for PublicKeyParseable { + type Target = Pubkey; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl std::ops::DerefMut for PublicKeyParseable { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +#[derive(Debug, Clone)] +pub struct PublicKeyParseable(pub Pubkey); + +impl<'de> Deserialize<'de> for PublicKeyParseable { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let value = String::deserialize(deserializer)?; + + Pubkey::from_str(&value) + .map(PublicKeyParseable) + .map_err(serde::de::Error::custom) + } }