use solana_network_sdk::{
Solana,
types::{UnifiedError, UnifiedResult},
};
use std::sync::Arc;
use crate::liquidity::{
dlmmpool::{DLMMLiquidityPool, DLMMLiquidityPoolData}, dynpool::{DAMMLiquidityPool, DAMMLiquidityPoolData}, dynv2pool::{DAMMV2LiquidityPool, DAMMV2LiquidityPoolData}
};
pub mod dbc;
pub mod liquidity;
pub struct Meteora {
pub solana: Arc<Solana>,
}
impl Meteora {
pub fn new(solana: Arc<Solana>) -> Self {
Self { solana: solana }
}
pub async fn get_liquidity_pool_dynv2(
&self,
address: &str,
) -> UnifiedResult<DAMMV2LiquidityPoolData, String> {
let v = self
.solana
.get_account_data(address)
.await
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
let pool = DAMMV2LiquidityPool::get_liquidity_pool_info(&v)
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
Ok(pool)
}
pub async fn get_liquidity_pool_dyn(
&self,
address: &str,
) -> UnifiedResult<DAMMLiquidityPoolData, String> {
let v = self
.solana
.get_account_data(address)
.await
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
let pool = DAMMLiquidityPool::get_liquidity_pool_info(&v)
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
Ok(pool)
}
pub async fn get_liquidity_pool_dlmm(
&self,
address: &str,
) -> UnifiedResult<DLMMLiquidityPoolData, String> {
let v = self
.solana
.get_account_data(address)
.await
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
let pool = DLMMLiquidityPool::get_liquidity_pool_info(&v)
.map_err(|e| UnifiedError::Error(format!("{:?}", e)))?;
Ok(pool)
}
}