solana-trading-sdk 1.0.6

A Rust SDK for trading on Solana
Documentation
use super::trading_endpoint::TradingEndpoint;
use crate::{
    dex::{dex_traits::DexTrait, types::DexType},
    swqos::SWQoSType,
};
use solana_client::nonblocking::rpc_client::RpcClient;
use std::{collections::HashMap, sync::Arc};

pub struct TradingConfig {
    pub rpc_url: String,
    pub swqos: Vec<SWQoSType>,
}

pub struct TradingClient {
    pub endpoint: Arc<TradingEndpoint>,
    pub dexs: HashMap<DexType, Arc<dyn DexTrait>>,
}

impl TradingClient {
    pub fn new(config: TradingConfig) -> anyhow::Result<Self> {
        let rpc = Arc::new(RpcClient::new(config.rpc_url));
        let swqos = config.swqos.into_iter().map(|swqos| swqos.instantiate(rpc.clone())).collect();
        let endpoint = Arc::new(TradingEndpoint::new(rpc, swqos));
        let dexs = DexType::all().into_iter().map(|dex| (dex, dex.instantiate(endpoint.clone()))).collect();

        Ok(Self { endpoint, dexs })
    }

    pub async fn initialize(&self) -> anyhow::Result<()> {
        for (_, dex) in &self.dexs {
            dex.initialize().await?;
        }
        Ok(())
    }
}