solana_trader_client_rust/provider/grpc/
quote.rs

1use anyhow::Result;
2use solana_trader_proto::api;
3use tonic::Request;
4
5use super::GrpcClient;
6
7impl GrpcClient {
8    pub async fn get_raydium_quotes(
9        &mut self,
10        request: &api::GetRaydiumQuotesRequest,
11    ) -> Result<api::GetRaydiumQuotesResponse> {
12        let response = self
13            .client
14            .get_raydium_quotes(Request::new(request.clone()))
15            .await
16            .map_err(|e| anyhow::anyhow!("GetRaydiumQuotes error: {}", e))?;
17
18        Ok(response.into_inner())
19    }
20
21    pub async fn get_raydium_cpmm_quotes(
22        &mut self,
23        request: &api::GetRaydiumCpmmQuotesRequest,
24    ) -> Result<api::GetRaydiumCpmmQuotesResponse> {
25        let response = self
26            .client
27            .get_raydium_cpmm_quotes(Request::new(request.clone()))
28            .await
29            .map_err(|e| anyhow::anyhow!("GetRaydiumCPMMQuotes error: {}", e))?;
30
31        Ok(response.into_inner())
32    }
33
34    pub async fn get_raydium_clmm_quotes(
35        &mut self,
36        request: &api::GetRaydiumClmmQuotesRequest,
37    ) -> Result<api::GetRaydiumClmmQuotesResponse> {
38        let response = self
39            .client
40            .get_raydium_clmm_quotes(Request::new(request.clone()))
41            .await
42            .map_err(|e| anyhow::anyhow!("GetRaydiumCLMMQuotes error: {}", e))?;
43
44        Ok(response.into_inner())
45    }
46
47    pub async fn get_raydium_clmm_pools(
48        &mut self,
49        request: &api::GetRaydiumClmmPoolsRequest,
50    ) -> Result<api::GetRaydiumClmmPoolsResponse> {
51        let response = self
52            .client
53            .get_raydium_clmm_pools(Request::new(request.clone()))
54            .await
55            .map_err(|e| anyhow::anyhow!("GetRaydiumClmmPools error: {}", e))?;
56
57        Ok(response.into_inner())
58    }
59
60    pub async fn get_raydium_pool_reserve(
61        &mut self,
62        request: &api::GetRaydiumPoolReserveRequest,
63    ) -> Result<api::GetRaydiumPoolReserveResponse> {
64        let response = self
65            .client
66            .get_raydium_pool_reserve(Request::new(request.clone()))
67            .await
68            .map_err(|e| anyhow::anyhow!("GetRaydiumPoolReserve error: {}", e))?;
69
70        Ok(response.into_inner())
71    }
72
73    pub async fn get_raydium_pools(
74        &mut self,
75        request: &api::GetRaydiumPoolsRequest,
76    ) -> Result<api::GetRaydiumPoolsResponse> {
77        let response = self
78            .client
79            .get_raydium_pools(Request::new(request.clone()))
80            .await
81            .map_err(|e| anyhow::anyhow!("GetRaydiumPools error: {}", e))?;
82
83        Ok(response.into_inner())
84    }
85    
86    pub async fn get_pump_fun_quotes(
87        &mut self,
88        request: &api::GetPumpFunQuotesRequest,
89    ) -> Result<api::GetPumpFunQuotesResponse> {
90        let response = self
91            .client
92            .get_pump_fun_quotes(Request::new(request.clone()))
93            .await
94            .map_err(|e| anyhow::anyhow!("GetPumpFunQuotes error: {}", e))?;
95
96        Ok(response.into_inner())
97    }
98
99    // NOTE: Fast mode is not used as of 11/1/24, breaks the endpoint.
100    pub async fn get_jupiter_quotes(
101        &mut self,
102        request: &api::GetJupiterQuotesRequest,
103    ) -> Result<api::GetJupiterQuotesResponse> {
104        let req = Request::new(request.clone());
105
106        let response = self
107            .client
108            .get_jupiter_quotes(req)
109            .await
110            .map_err(|e| anyhow::anyhow!("GetJupiterQuotes error: {}", e))?;
111
112        Ok(response.into_inner())
113    }
114
115    pub async fn get_quotes(
116        &mut self,
117        request: &api::GetQuotesRequest,
118    ) -> Result<api::GetQuotesResponse> {
119        let response = self
120            .client
121            .get_quotes(Request::new(request.clone()))
122            .await
123            .map_err(|e| anyhow::anyhow!("GetQuotes error: {}", e))?;
124
125        Ok(response.into_inner())
126    }
127
128    pub async fn get_raydium_prices(
129        &mut self,
130        tokens: Vec<String>,
131    ) -> Result<api::GetRaydiumPricesResponse> {
132        let request = Request::new(api::GetRaydiumPricesRequest { tokens });
133
134        let response = self
135            .client
136            .get_raydium_prices(request)
137            .await
138            .map_err(|e| anyhow::anyhow!("GetRaydiumPrices error: {}", e))?;
139
140        Ok(response.into_inner())
141    }
142
143    pub async fn get_jupiter_prices(
144        &mut self,
145        tokens: Vec<String>,
146    ) -> Result<api::GetJupiterPricesResponse> {
147        let request = Request::new(api::GetJupiterPricesRequest { tokens });
148
149        let response = self
150            .client
151            .get_jupiter_prices(request)
152            .await
153            .map_err(|e| anyhow::anyhow!("GetJupiterPrices error: {}", e))?;
154
155        Ok(response.into_inner())
156    }
157}