bitbank_api/private/
create_order.rs

1use 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(&params)?;
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}