bpx_api_client/routes/
rfq.rs

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