pub mod liquidity;
pub mod typs;
use solana_client::nonblocking::rpc_client::RpcClient;
use solana_network_sdk::{
Solana,
types::{UnifiedError, UnifiedResult},
};
use solana_sdk::pubkey::Pubkey;
use std::{str::FromStr, sync::Arc};
use crate::liquidity::{
clmm::{RaydiumLiquidityPoolCLMM, RaydiumLiquidityPoolCLMMData}, cpmm::{RaydiumLiquidityPoolCPMM, RaydiumLiquidityPoolCPMMData}, v4::{RaydiumLiquidityPoolData, RaydiumLiquidityPoolV4}
};
pub struct Raydium {
pub solana: Arc<Solana>,
}
impl Raydium {
pub fn new(solana: Arc<Solana>) -> Self {
Self { solana: solana }
}
pub async fn get_liquidity_pool_v4(
&self,
address: &str,
) -> UnifiedResult<RaydiumLiquidityPoolData, String> {
let v = self
.solana
.get_account_data(address)
.await
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
let pool = RaydiumLiquidityPoolV4::get_liquidity_pool_info(&v)
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
Ok(pool)
}
pub async fn get_liquidity_pool_cpmm(
&self,
address: &str,
) -> UnifiedResult<RaydiumLiquidityPoolCPMMData, String> {
let v = self
.solana
.get_account_data(address)
.await
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
let pool = RaydiumLiquidityPoolCPMM::get_liquidity_pool_info(&v)
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
Ok(pool)
}
pub async fn get_liquidity_pool_clmm(
&self,
address: &str,
) -> UnifiedResult<RaydiumLiquidityPoolCLMMData, String> {
let v = self
.solana
.get_account_data(address)
.await
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
let pool = RaydiumLiquidityPoolCLMM::get_liquidity_pool_info(&v)
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
Ok(pool)
}
pub async fn get_token_price_by_address(&self) {}
}