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_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 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}