longbridge/sharelist/
types.rs1use rust_decimal::Decimal;
2use serde::{Deserialize, Serialize};
3use time::OffsetDateTime;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct SharelistList {
9 pub sharelists: Vec<SharelistInfo>,
11 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
13 pub subscribed_sharelists: Vec<SharelistInfo>,
14 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
16 pub tail_mark: String,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct SharelistDetail {
22 pub sharelist: SharelistInfo,
24 pub scopes: SharelistScopes,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct SharelistInfo {
31 #[serde(deserialize_with = "crate::serde_utils::deserialize_id_as_i64")]
33 pub id: i64,
34 pub name: String,
36 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
38 pub description: String,
39 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
41 pub cover: String,
42 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
44 pub subscribers_count: i64,
45 #[serde(deserialize_with = "crate::serde_utils::deserialize_timestamp")]
47 pub created_at: OffsetDateTime,
48 #[serde(deserialize_with = "crate::serde_utils::deserialize_timestamp")]
50 pub edited_at: OffsetDateTime,
51 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
53 pub this_year_chg: Option<Decimal>,
54 pub creator: serde_json::Value,
56 pub stocks: Vec<SharelistStock>,
58 pub subscribed: bool,
60 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
62 pub chg: Option<Decimal>,
63 pub sharelist_type: i32,
65 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
67 pub industry_code: String,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct SharelistStock {
73 pub symbol: String,
75 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
77 pub name: String,
78 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
80 pub market: String,
81 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
83 pub code: String,
84 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
86 pub intro: String,
87 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
89 pub unread_change_log_category: String,
90 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
92 pub change: Option<Decimal>,
93 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
95 pub last_done: Option<Decimal>,
96 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
98 pub trade_status: Option<i32>,
99 #[serde(default, deserialize_with = "crate::serde_utils::null_as_default")]
101 pub latency: Option<bool>,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct SharelistScopes {
107 pub subscription: bool,
109 #[serde(rename = "self")]
111 pub is_self: bool,
112}