longbridge/sharelist/
types.rs1#![allow(missing_docs)]
2
3use rust_decimal::Decimal;
4use serde::{Deserialize, Serialize};
5use time::OffsetDateTime;
6
7use crate::utils::counter::deserialize_counter_id_as_symbol;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct SharelistList {
13 pub sharelists: Vec<SharelistInfo>,
15 #[serde(default)]
17 pub subscribed_sharelists: Vec<SharelistInfo>,
18 #[serde(default)]
20 pub tail_mark: String,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct SharelistDetail {
26 pub sharelist: SharelistInfo,
28 pub scopes: SharelistScopes,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct SharelistInfo {
35 #[serde(deserialize_with = "crate::serde_utils::deserialize_id_as_i64")]
37 pub id: i64,
38 pub name: String,
40 #[serde(default)]
42 pub description: String,
43 #[serde(default)]
45 pub cover: String,
46 #[serde(default)]
48 pub subscribers_count: i64,
49 #[serde(deserialize_with = "crate::serde_utils::deserialize_timestamp")]
51 pub created_at: OffsetDateTime,
52 #[serde(deserialize_with = "crate::serde_utils::deserialize_timestamp")]
54 pub edited_at: OffsetDateTime,
55 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
57 pub this_year_chg: Option<Decimal>,
58 pub creator: serde_json::Value,
60 pub stocks: Vec<SharelistStock>,
62 pub subscribed: bool,
64 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
66 pub chg: Option<Decimal>,
67 pub sharelist_type: i32,
69 #[serde(default)]
71 pub industry_code: String,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct SharelistStock {
77 #[serde(
79 rename = "counter_id",
80 deserialize_with = "deserialize_counter_id_as_symbol"
81 )]
82 pub symbol: String,
83 #[serde(default)]
85 pub name: String,
86 #[serde(default)]
88 pub market: String,
89 #[serde(default)]
91 pub code: String,
92 #[serde(default)]
94 pub intro: String,
95 #[serde(default)]
97 pub unread_change_log_category: String,
98 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
100 pub change: Option<Decimal>,
101 #[serde(default, with = "crate::serde_utils::decimal_opt_str_is_none")]
103 pub last_done: Option<Decimal>,
104 #[serde(default)]
106 pub trade_status: Option<i32>,
107 #[serde(default)]
109 pub latency: Option<bool>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114pub struct SharelistScopes {
115 pub subscription: bool,
117 #[serde(rename = "self")]
119 pub is_self: bool,
120}