bpx_api_client/routes/
rfq.rs

1use bpx_api_types::rfq::{Quote, QuotePayload, RequestForQuote, RequestForQuotePayload};
2
3#[cfg(feature = "ws")]
4use tokio::sync::mpsc::Sender;
5
6use crate::error::Result;
7use crate::BpxClient;
8
9#[doc(hidden)]
10pub const API_RFQ: &str = "/api/v1/rfq";
11#[doc(hidden)]
12pub const API_RFQ_QUOTE: &str = "/api/v1/rfq/quote";
13
14const API_RFQ_STREAM: &str = "account.rfqUpdate";
15
16impl BpxClient {
17    pub async fn submit_rfq(&self, payload: RequestForQuotePayload) -> Result<RequestForQuote> {
18        let endpoint = format!("{}{}", self.base_url, API_RFQ);
19        let res = self.post(endpoint, payload).await?;
20        res.json().await.map_err(Into::into)
21    }
22
23    pub async fn submit_quote(&self, payload: QuotePayload) -> Result<Quote> {
24        let endpoint = format!("{}{}", self.base_url, API_RFQ_QUOTE);
25        let res = self.post(endpoint, payload).await?;
26        res.json().await.map_err(Into::into)
27    }
28
29    #[cfg(feature = "ws")]
30    pub async fn subscribe_to_rfqs(&self, tx: Sender<RequestForQuote>) {
31        self.subscribe(API_RFQ_STREAM, tx).await;
32    }
33}