rsgmo 0.2.2

GMOコインのRust用APIライブラリ.
Documentation
use crate::{
    v1::api::GmoApi,
    request::AccessLevel,
    utils,
};

use anyhow::Result;
use serde::Deserialize;

const PATH: &str = "/v1/account/margin";

impl GmoApi {
    pub async fn get_account_margin(&self) -> Result<GetAccountMarginResponse> {
        self.get(PATH, None::<()>, AccessLevel::Private).await
    }
}

#[derive(Debug, Clone, Deserialize)]
pub struct GetAccountMarginResponse {
    status: i32,
    data: AccountMarginData,
    responsetime: String,
}

impl GetAccountMarginResponse {
    pub fn status(&self) -> i32 {
        self.status
    }
    pub fn data(&self) -> &AccountMarginData {
        &self.data
    }
    pub fn responsetime(&self) -> &str {
        &self.responsetime
    }
}

#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountMarginData {
    #[serde(deserialize_with = "utils::deserialize_string_to_u64")]
    actual_profit_loss: u64,
    #[serde(deserialize_with = "utils::deserialize_string_to_u64")]
    available_amount: u64,
    #[serde(deserialize_with = "utils::deserialize_string_to_u64")]
    margin: u64,
    margin_call_status: String,
    #[serde(deserialize_with = "utils::deserialize_string_to_u64")]
    profit_loss: u64,
    #[serde(deserialize_with = "utils::deserialize_string_to_u64")]
    transferable_amount: u64,
}

impl AccountMarginData {
    pub fn actual_profit_loss(&self) -> u64 {
        self.actual_profit_loss
    }
    pub fn available_amount(&self) -> u64 {
        self.available_amount
    }
    pub fn margin(&self) -> u64 {
        self.margin
    }
    pub fn margin_call_status(&self) -> &str {
        &self.margin_call_status
    }
    pub fn profit_loss(&self) -> u64 {
        self.profit_loss
    }
    pub fn transferable_amount(&self) -> u64 {
        self.transferable_amount
    }
}