Skip to main content

ftx_rs/
account.rs

1use crate::client::Client;
2use crate::errors::*;
3use crate::model;
4
5#[derive(Clone)]
6pub struct AccountClient {
7    client: Client,
8}
9
10impl AccountClient {
11    pub fn new(api_key: Option<String>, secret_key: Option<String>) -> Self {
12        AccountClient {
13            client: Client::new(api_key, secret_key),
14        }
15    }
16
17    pub fn get_account(&self) -> Result<model::AccountInfo> {
18        let payload: String = format!("{}", "{}");
19        let data = self.client.get_signed("/account".into(), payload, None)?;
20        let account: model::Account = serde_json::from_str(data.as_str())?;
21        Ok(account.result)
22    }
23
24    pub fn get_positions(&self) -> Result<Vec<model::Position>> {
25        let payload: String = format!("{}", "{}");
26        let data = self.client.get_signed("/positions".into(), payload, None)?;
27        let positions: model::Positions = serde_json::from_str(data.as_str())?;
28        Ok(positions.result)
29    }
30
31    pub fn change_account_leverage(&self, leverage: i64) -> Result<bool> {
32        let payload = json!({ "leverage": leverage });
33        let data =
34            self.client
35                .post_signed("/account/leverage".into(), payload.to_string(), None)?;
36        let r: model::AnotherOption = serde_json::from_str(data.as_str())?;
37        Ok(r.success)
38    }
39}