trade_transaction/
trade-transaction.rs

1use xapi;
2use xapi::{RequestStatus, TradeCmd, TradeType, Transaction};
3
4use std::error::Error;
5use std::fs;
6
7#[tokio::main]
8async fn main() -> Result<(), Box<dyn Error>> {
9    let json = fs::read_to_string("credentials.json")?;
10    let credentials = xapi::Credentials::from(&json)?;
11
12    let x = xapi::connect(&credentials).await?;
13
14    let response = x
15        .socket
16        .trade_transaction(Transaction {
17            symbol: String::from("BITCOIN"),
18            cmd: TradeCmd::BuyLimit,
19            type_: TradeType::Open,
20            price: 10.00,
21            volume: 1.0,
22            ..Default::default()
23        })
24        .await?;
25
26    if response.status != true {
27        println!("Failed to trade a transaction {:?}", response);
28        return Ok(());
29    }
30
31    let order = response.return_data.order;
32    let response = x.socket.trade_transaction_status(order).await?;
33    if response.status != true {
34        println!("Failed to trade a transaction {:?}", response);
35        return Ok(());
36    }
37
38    let status = response.return_data;
39    match status.request_status {
40        RequestStatus::Error => {
41            println!("The transaction finished with error {:?}", status.message)
42        }
43        RequestStatus::Pending => {
44            println!("The transaction is pending")
45        }
46        RequestStatus::Accepted => {
47            println!("The transaction has been executed successfully")
48        }
49        RequestStatus::Rejected => {
50            println!("The transaction has been rejected {:?}", status.message)
51        }
52        RequestStatus::Invalid => {
53            println!("Invalid transaction status {:?}", status.message)
54        }
55    };
56
57    Ok(())
58}