solana_trader_client_rust/provider/ws/
quote.rs1use 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_jupiter_quotes(
75 &self,
76 request: &api::GetJupiterQuotesRequest,
77 ) -> Result<api::GetJupiterQuotesResponse> {
78 let params = serde_json::json!({
79 "inToken": request.in_token,
80 "outToken": request.out_token,
81 "inAmount": request.in_amount,
82 "slippage": request.slippage,
83 });
84
85 self.conn.request("GetJupiterQuotes", params).await
86 }
87
88 pub async fn get_quotes(
89 &self,
90 request: &api::GetQuotesRequest,
91 ) -> Result<api::GetQuotesResponse> {
92 let params = serde_json::to_value(request)
93 .map_err(|e| anyhow::anyhow!("Failed to serialize request: {}", e))?;
94
95 self.conn.request("GetQuotes", params).await
96 }
97
98 pub async fn get_raydium_prices(
99 &self,
100 tokens: Vec<String>,
101 ) -> Result<api::GetRaydiumPricesResponse> {
102 let request = api::GetRaydiumPricesRequest { tokens };
103
104 self.conn.request("GetRaydiumPrices", json!(request)).await
105 }
106
107 pub async fn get_jupiter_prices(
108 &self,
109 tokens: Vec<String>,
110 ) -> Result<api::GetJupiterPricesResponse> {
111 let request = api::GetJupiterPricesRequest { tokens };
112
113 self.conn.request("GetJupiterPrices", json!(request)).await
114 }
115}