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_pump_fun_quotes(
38        &self,
39        request: &api::GetPumpFunQuotesRequest,
40    ) -> Result<api::GetPumpFunQuotesResponse> {
41        let params = serde_json::json!({
42            "quoteType": request.quote_type,
43            "mintAddress": request.mint_address,
44            "bondingCurveAddress": request.bonding_curve_address,
45            "amount": request.amount,
46        });
47
48        self.conn.request("GetPumpFunQuotes", params).await
49    }
50
51    // NOTE: Fast mode is not used as of 11/1, breaks the endpoint.
52    pub async fn get_jupiter_quotes(
53        &self,
54        request: &api::GetJupiterQuotesRequest,
55    ) -> Result<api::GetJupiterQuotesResponse> {
56        let params = serde_json::json!({
57            "inToken": request.in_token,
58            "outToken": request.out_token,
59            "inAmount": request.in_amount,
60            "slippage": request.slippage,
61        });
62
63        self.conn.request("GetJupiterQuotes", params).await
64    }
65
66    pub async fn get_quotes(
67        &self,
68        request: &api::GetQuotesRequest,
69    ) -> Result<api::GetQuotesResponse> {
70        let params = serde_json::to_value(request)
71            .map_err(|e| anyhow::anyhow!("Failed to serialize request: {}", e))?;
72
73        self.conn.request("GetQuotes", params).await
74    }
75
76    pub async fn get_raydium_prices(
77        &self,
78        tokens: Vec<String>,
79    ) -> Result<api::GetRaydiumPricesResponse> {
80        let request = api::GetRaydiumPricesRequest { tokens };
81
82        self.conn.request("GetRaydiumPrices", json!(request)).await
83    }
84
85    pub async fn get_jupiter_prices(
86        &self,
87        tokens: Vec<String>,
88    ) -> Result<api::GetJupiterPricesResponse> {
89        let request = api::GetJupiterPricesRequest { tokens };
90
91        self.conn.request("GetJupiterPrices", json!(request)).await
92    }
93}