1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
//! The book_offers method retrieves a list of offers, also known as the order
//! book, between two currencies.
//!
//! <https://xrpl.org/book_offers.html>
use serde::{Deserialize, Serialize};
use xrpl_types::Currency;
use crate::{Offer, Request, RetrieveLedgerSpec, ReturnLedgerSpec, WithLedgerSpec};
#[derive(Default, Debug, Clone, Serialize)]
pub struct BookOffersRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
taker: Option<String>,
taker_gets: Currency,
taker_pays: Currency,
#[serde(flatten)]
pub ledger_spec: RetrieveLedgerSpec,
}
impl Request for BookOffersRequest {
type Response = BookOffersResponse;
fn method(&self) -> String {
"book_offers".to_owned()
}
}
impl WithLedgerSpec for BookOffersRequest {
fn as_ledger_spec(&self) -> &crate::RetrieveLedgerSpec {
&self.ledger_spec
}
fn as_ledger_spec_mut(&mut self) -> &mut crate::RetrieveLedgerSpec {
&mut self.ledger_spec
}
}
impl BookOffersRequest {
pub fn new(taker_gets: Currency, taker_pays: Currency) -> Self {
Self {
taker_gets,
taker_pays,
..Default::default()
}
}
pub fn taker(self, taker: &str) -> Self {
Self {
taker: Some(taker.to_string()),
..self
}
}
pub fn limit(self, limit: u32) -> Self {
Self {
limit: Some(limit),
..self
}
}
}
#[derive(Debug, Deserialize)]
pub struct BookOffersResponse {
pub offers: Vec<Offer>,
#[serde(flatten)]
pub ledger_spec: ReturnLedgerSpec,
}
// impl Client {
// /// Returns the offers on a book. Please note that the term book, on XRPL,
// /// refers to one-side of an order book (a queue).
// pub fn book_offers(&self, taker_gets: &Currency, taker_pays: &Currency) -> BookOffersRequest {
// BookOffersRequest {
// client: self.clone(),
// params: BookOffersParams {
// ledger_hash: None,
// ledger_index: None,
// limit: None,
// taker: None,
// taker_gets: CurrencyParams::from_currency(taker_gets),
// taker_pays: CurrencyParams::from_currency(taker_pays),
// },
// }
// }
// }
// #[cfg(test)]
// mod tests {
// use crate::client::Client;
// use xrpl_types::Currency;
// #[tokio::test]
// async fn book_offers_works() {
// let client = Client::default();
// let resp = client
// .book_offers(
// &Currency::xrp(),
// &Currency::issued("USD", "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"),
// )
// .send()
// .await;
// dbg!(&resp);
// }
// }