Skip to main content

alpaca_data/crypto/
model.rs

1use rust_decimal::Decimal;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
5pub struct Bar {
6    pub t: Option<String>,
7    #[serde(
8        default,
9        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
10    )]
11    pub o: Option<Decimal>,
12    #[serde(
13        default,
14        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
15    )]
16    pub h: Option<Decimal>,
17    #[serde(
18        default,
19        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
20    )]
21    pub l: Option<Decimal>,
22    #[serde(
23        default,
24        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
25    )]
26    pub c: Option<Decimal>,
27    #[serde(
28        default,
29        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
30    )]
31    pub v: Option<Decimal>,
32    pub n: Option<u64>,
33    #[serde(
34        default,
35        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
36    )]
37    pub vw: Option<Decimal>,
38}
39
40#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
41pub struct Quote {
42    pub t: Option<String>,
43    #[serde(
44        default,
45        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
46    )]
47    pub bp: Option<Decimal>,
48    #[serde(
49        default,
50        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
51    )]
52    pub bs: Option<Decimal>,
53    #[serde(
54        default,
55        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
56    )]
57    pub ap: Option<Decimal>,
58    #[serde(
59        rename = "as",
60        default,
61        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
62    )]
63    pub r#as: Option<Decimal>,
64}
65
66#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
67pub struct Trade {
68    pub t: Option<String>,
69    #[serde(
70        default,
71        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
72    )]
73    pub p: Option<Decimal>,
74    #[serde(
75        default,
76        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
77    )]
78    pub s: Option<Decimal>,
79    pub i: Option<i64>,
80    pub tks: Option<String>,
81}
82
83#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
84pub struct OrderbookEntry {
85    #[serde(
86        default,
87        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
88    )]
89    pub p: Option<Decimal>,
90    #[serde(
91        default,
92        deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number"
93    )]
94    pub s: Option<Decimal>,
95}
96
97#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
98pub struct Orderbook {
99    pub t: Option<String>,
100    #[serde(default)]
101    pub b: Vec<OrderbookEntry>,
102    #[serde(default)]
103    pub a: Vec<OrderbookEntry>,
104}
105
106#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
107pub struct Snapshot {
108    #[serde(rename = "latestTrade")]
109    pub latest_trade: Option<Trade>,
110    #[serde(rename = "latestQuote")]
111    pub latest_quote: Option<Quote>,
112    #[serde(rename = "minuteBar")]
113    pub minute_bar: Option<Bar>,
114    #[serde(rename = "dailyBar")]
115    pub daily_bar: Option<Bar>,
116    #[serde(rename = "prevDailyBar")]
117    pub prev_daily_bar: Option<Bar>,
118}