tda_sdk/
responses.rs

1//! Structs and utilities for handling API response data.
2
3/// Response returned by the `get_access_token()` method.
4#[derive(Debug, Deserialize, Serialize)]
5pub struct AccessTokenResponse {
6    pub access_token: String,
7    pub scope: String,
8    pub expires_in: i64,
9}
10
11/// Response returned by the `get_price_history()` method.
12#[derive(Clone, Debug, Deserialize, Serialize)]
13pub struct GetPriceHistoryResponse {
14    pub candles: Vec<Candle>,
15    pub empty: bool,
16    pub symbol: String,
17}
18
19/// Individual candle item in [`GetPriceHistoryResponse`](struct.GetPriceHistoryResponse.html).
20#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
21pub struct Candle {
22    pub close: f64,
23    pub datetime: usize,
24    pub high: f64,
25    pub low: f64,
26    pub open: f64,
27    pub volume: i64,
28}
29
30/// Individual response item returned by the `get_movers()` method.
31#[derive(Clone, Debug, Deserialize, Serialize)]
32#[serde(rename_all = "camelCase")]
33pub struct Mover {
34    pub change: f64,
35    pub description: String,
36    pub direction: String,
37    pub last: f64,
38    pub symbol: String,
39    pub total_volume: i64,
40}
41
42/// Individual response item returned by the `get_account()` and
43/// `get_accounts()` methods.
44#[derive(Clone, Debug, Deserialize, Serialize)]
45#[serde(rename_all = "camelCase")]
46pub struct Account {
47    pub securities_account: SecuritiesAccount,
48}
49
50/// Securities Account item in [`Account`](struct.Account.html)
51#[derive(Clone, Debug, Deserialize, Serialize)]
52#[serde(untagged)]
53pub enum SecuritiesAccount {
54    #[serde(rename_all = "camelCase")]
55    MarginAccount {
56        r#type: String,
57        account_id: String,
58        round_trips: usize,
59        is_day_trader: bool,
60        is_closing_only_restricted: bool,
61        initial_balances: InitialBalances,
62        current_balances: CurrentBalances,
63        projected_balances: ProjectedBalances,
64    },
65}
66
67/// Initial Balances item in [`SecuritiesAccount`](enum.SecuritiesAccount.html)
68#[derive(Clone, Debug, Deserialize, Serialize)]
69#[serde(rename_all = "camelCase")]
70pub struct InitialBalances {
71    pub account_value: f64,
72    pub accrued_interest: f64,
73    pub available_funds_non_marginable_trade: Option<f64>,
74    pub bond_value: f64,
75    pub buying_power: Option<f64>,
76    pub cash_available_for_trading: f64,
77    pub cash_available_for_withdrawal: Option<f64>,
78    pub cash_balance: f64,
79    pub cash_debit_call_value: Option<f64>,
80    pub cash_receipts: f64,
81    pub day_trading_buying_power: Option<f64>,
82    pub day_trading_buying_power_call: Option<f64>,
83    pub day_trading_equity_call: Option<f64>,
84    pub equity: Option<f64>,
85    pub equity_percentage: Option<f64>,
86    pub is_in_call: bool,
87    pub liquidation_value: f64,
88    pub long_margin_value: Option<f64>,
89    pub long_option_market_value: f64,
90    pub long_stock_value: Option<f64>,
91    pub maintenance_call: Option<f64>,
92    pub maintenance_requirement: Option<f64>,
93    pub margin: Option<f64>,
94    pub margin_balance: Option<f64>,
95    pub margin_equity: Option<f64>,
96    pub money_market_fund: f64,
97    pub mutual_fund_value: f64,
98    pub pending_deposits: f64,
99    pub reg_t_call: Option<f64>,
100    pub short_balance: Option<f64>,
101    pub short_margin_value: Option<f64>,
102    pub short_option_market_value: f64,
103    pub short_stock_value: f64,
104    pub total_cash: Option<f64>,
105    pub unsettled_cash: Option<f64>,
106}
107
108/// Current Balances item in [`SecuritiesAccount`](enum.SecuritiesAccount.html)
109#[derive(Clone, Debug, Deserialize, Serialize)]
110#[serde(rename_all = "camelCase")]
111pub struct CurrentBalances {
112    pub accrued_interest: f64,
113    pub available_funds: Option<f64>,
114    pub available_funds_non_marginable_trade: Option<f64>,
115    pub bond_value: f64,
116    pub buying_power: Option<f64>,
117    pub buying_power_non_marginable_trade: Option<f64>,
118    pub cash_available_for_trading: Option<f64>,
119    pub cash_available_for_withdrawal: Option<f64>,
120    pub cash_balance: f64,
121    pub cash_call: Option<f64>,
122    pub cash_debit_call_value: Option<f64>,
123    pub cash_receipts: f64,
124    pub day_trading_buying_power: Option<f64>,
125    pub equity: Option<f64>,
126    pub equity_percentage: Option<f64>,
127    pub liquidation_value: f64,
128    pub long_margin_value: Option<f64>,
129    pub long_market_value: f64,
130    pub long_non_marginable_market_value: Option<f64>,
131    pub long_option_market_value: f64,
132    pub maintenance_call: Option<f64>,
133    pub maintenance_requirement: Option<f64>,
134    pub margin_balance: Option<f64>,
135    pub money_market_fund: f64,
136    pub mutual_fund_value: f64,
137    pub pending_deposits: f64,
138    pub reg_t_call: Option<f64>,
139    pub savings: f64,
140    pub short_balance: Option<f64>,
141    pub short_margin_value: Option<f64>,
142    pub short_market_value: f64,
143    pub short_option_market_value: f64,
144    pub sma: Option<f64>,
145    pub total_cash: Option<f64>,
146    pub unsettled_cash: Option<f64>,
147}
148
149/// Projected Balances item in [`SecuritiesAccount`](enum.SecuritiesAccount.html)
150#[derive(Clone, Debug, Deserialize, Serialize)]
151#[serde(rename_all = "camelCase")]
152pub struct ProjectedBalances {
153    pub available_funds: Option<f64>,
154    pub available_funds_non_marginable_trade: Option<f64>,
155    pub buying_power: Option<f64>,
156    pub cash_available_for_trading: Option<f64>,
157    pub cash_available_for_withdrawal: Option<f64>,
158    pub day_trading_buying_power: Option<f64>,
159    pub day_trading_buying_power_call: Option<f64>,
160    pub is_in_call: Option<bool>,
161    pub maintenance_call: Option<f64>,
162    pub reg_t_call: Option<f64>,
163    pub stock_buying_power: Option<f64>,
164}