solana_trader_client_rust/provider/ws/
quote.rs

1use super::WebSocketClient;
2use anyhow::Result;
3use serde_json::json;
4use solana_trader_proto::api;
5
6impl WebSocketClient {
7    pub async fn get_raydium_quotes(
8        &self,
9        request: &api::GetRaydiumQuotesRequest,
10    ) -> Result<api::GetRaydiumQuotesResponse> {
11        let params = serde_json::to_value(request)
12            .map_err(|e| anyhow::anyhow!("Failed to serialize request: {}", e))?;
13
14        self.conn.request("GetRaydiumQuotes", params).await
15    }
16
17    pub async fn get_raydium_cpmm_quotes(
18        &self,
19        request: &api::GetRaydiumCpmmQuotesRequest,
20    ) -> Result<api::GetRaydiumCpmmQuotesResponse> {
21        let params = serde_json::to_value(request)
22            .map_err(|e| anyhow::anyhow!("Failed to serialize request: {}", e))?;
23
24        self.conn.request("GetRaydiumCPMMQuotes", params).await
25    }
26
27    pub async fn get_raydium_clmm_quotes(
28        &self,
29        request: &api::GetRaydiumClmmQuotesRequest,
30    ) -> Result<api::GetRaydiumClmmQuotesResponse> {
31        let params = serde_json::to_value(request)
32            .map_err(|e| anyhow::anyhow!("Failed to serialize request: {}", e))?;
33
34        self.conn.request("GetRaydiumCLMMQuotes", params).await
35    }
36
37    pub async fn get_raydium_clmm_pools(
38        &self,
39        pair_or_address: String
40    ) -> Result<api::GetRaydiumClmmPoolsResponse> {
41        let request = api::GetRaydiumClmmPoolsRequest { pair_or_address };
42        self.conn.request("GetRaydiumCLMMPools", json!(request)).await
43    }
44    
45    pub async fn get_raydium_pool_reserve(
46        &self,
47        pairs_or_addresses: Vec<String>
48    ) -> Result<api::GetRaydiumPoolReserveRequest> {
49        let request = api::GetRaydiumPoolReserveRequest { pairs_or_addresses };
50        self.conn.request("GetRaydiumPoolReserve", json!(request)).await
51    }
52    
53    pub async fn get_raydium_pools(
54        &self
55    ) -> Result<api::GetRaydiumPoolsResponse> {
56        self.conn.request("GetRaydiumPools", json!({})).await
57    }
58
59    pub async fn get_pump_fun_quotes(
60        &self,
61        request: &api::GetPumpFunQuotesRequest,
62    ) -> Result<api::GetPumpFunQuotesResponse> {
63        let params = serde_json::json!({
64            "quoteType": request.quote_type,
65            "mintAddress": request.mint_address,
66            "bondingCurveAddress": request.bonding_curve_address,
67            "amount": request.amount,
68        });
69
70        self.conn.request("GetPumpFunQuotes", params).await
71    }
72
73    pub async fn get_pump_fun_amm_quotes(
74        &self,
75        request: &api::GetPumpFunAmmQuotesRequest,
76    ) -> Result<api::GetPumpFunAmmQuotesResponse> {
77        let params = serde_json::to_value(request)
78            .map_err(|e| anyhow::anyhow!("Failed to serialize request: {}", e))?;
79
80        self.conn.request("GetPumpFunAmmQuotes", params).await
81    }
82
83    // NOTE: Fast mode is not used as of 11/1, breaks the endpoint.
84    pub async fn get_jupiter_quotes(
85        &self,
86        request: &api::GetJupiterQuotesRequest,
87    ) -> Result<api::GetJupiterQuotesResponse> {
88        let params = serde_json::json!({
89            "inToken": request.in_token,
90            "outToken": request.out_token,
91            "inAmount": request.in_amount,
92            "slippage": request.slippage,
93        });
94
95        self.conn.request("GetJupiterQuotes", params).await
96    }
97
98    pub async fn get_quotes(
99        &self,
100        request: &api::GetQuotesRequest,
101    ) -> Result<api::GetQuotesResponse> {
102        let params = serde_json::to_value(request)
103            .map_err(|e| anyhow::anyhow!("Failed to serialize request: {}", e))?;
104
105        self.conn.request("GetQuotes", params).await
106    }
107
108    pub async fn get_raydium_prices(
109        &self,
110        tokens: Vec<String>,
111    ) -> Result<api::GetRaydiumPricesResponse> {
112        let request = api::GetRaydiumPricesRequest { tokens };
113
114        self.conn.request("GetRaydiumPrices", json!(request)).await
115    }
116
117    pub async fn get_jupiter_prices(
118        &self,
119        tokens: Vec<String>,
120    ) -> Result<api::GetJupiterPricesResponse> {
121        let request = api::GetJupiterPricesRequest { tokens };
122
123        self.conn.request("GetJupiterPrices", json!(request)).await
124    }
125}