bitbank_api/private/
create_order.rs1use super::*;
2
3#[serde_as]
4#[serde_with::skip_serializing_none]
5#[derive(TypedBuilder, Serialize, Debug)]
6pub struct Params {
7 #[serde_as(as = "DisplayFromStr")]
8 pair: Pair,
9 #[serde_as(as = "DisplayFromStr")]
10 amount: f64,
11 #[serde_as(as = "Option<DisplayFromStr>")]
12 #[builder(default, setter(strip_option))]
13 price: Option<f64>,
14 #[serde_as(as = "DisplayFromStr")]
15 side: Side,
16 #[serde_as(as = "DisplayFromStr")]
17 #[serde(rename = "type")]
18 order_type: OrderType,
19 #[builder(default, setter(strip_option))]
20 post_only: Option<bool>,
21 #[serde_as(as = "Option<DisplayFromStr>")]
22 #[builder(default, setter(strip_option))]
23 trigger_price: Option<f64>,
24}
25
26pub async fn post(cred: Credential, params: Params) -> anyhow::Result<OrderInfo> {
27 let json = serde_json::to_string(¶ms)?;
28 ApiExec { cred }.post("/v1/user/spot/order", json).await
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn test_params() -> anyhow::Result<()> {
37 let p = Params::builder()
38 .pair(Pair(XRP, JPY))
39 .price(50.2)
40 .amount(10.1)
41 .side(Side::Buy)
42 .order_type(OrderType::Stop)
43 .build();
44 dbg!(&p);
45 let json = serde_json::to_string(&p)?;
46 dbg!(&json);
47 Ok(())
48 }
49}