Fix status message deserialization

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2024-02-16 19:39:36 +00:00
parent a1781cdf29
commit ae5044142d
4 changed files with 219 additions and 108 deletions

186
Cargo.lock generated
View File

@@ -90,7 +90,7 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -227,9 +227,9 @@ dependencies = [
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.14.0" version = "3.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" checksum = "d32a994c2b3ca201d9b263612a374263f05e7adde37c4707f693dcd375076d1f"
[[package]] [[package]]
name = "byteorder" name = "byteorder"
@@ -311,6 +311,7 @@ dependencies = [
"android-tzdata", "android-tzdata",
"iana-time-zone", "iana-time-zone",
"num-traits", "num-traits",
"serde",
"windows-targets 0.52.0", "windows-targets 0.52.0",
] ]
@@ -485,6 +486,41 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "darling"
version = "0.20.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c376d08ea6aa96aafe61237c7200d1241cb177b7d3a542d791f2d118e9cbb955"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.20.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33043dcd19068b8192064c704b3f83eb464f91f1ff527b44a4e2b08d9cdb8855"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn 2.0.49",
]
[[package]]
name = "darling_macro"
version = "0.20.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5a91391accf613803c2a9bf9abccdbaa07c54b4244a5b64883f9c3c137c86be"
dependencies = [
"darling_core",
"quote",
"syn 2.0.49",
]
[[package]] [[package]]
name = "dashmap" name = "dashmap"
version = "5.5.3" version = "5.5.3"
@@ -492,7 +528,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"hashbrown", "hashbrown 0.14.3",
"lock_api", "lock_api",
"once_cell", "once_cell",
"parking_lot_core", "parking_lot_core",
@@ -730,7 +766,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -804,9 +840,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]] [[package]]
name = "governor" name = "governor"
version = "0.6.0" version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "821239e5672ff23e2a7060901fa622950bbd80b649cdaadd78d1c1767ed14eb4" checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"dashmap", "dashmap",
@@ -815,9 +851,11 @@ dependencies = [
"no-std-compat", "no-std-compat",
"nonzero_ext", "nonzero_ext",
"parking_lot", "parking_lot",
"portable-atomic",
"quanta", "quanta",
"rand", "rand",
"smallvec", "smallvec",
"spinning_top",
] ]
[[package]] [[package]]
@@ -832,7 +870,7 @@ dependencies = [
"futures-sink", "futures-sink",
"futures-util", "futures-util",
"http 0.2.11", "http 0.2.11",
"indexmap", "indexmap 2.2.3",
"slab", "slab",
"tokio", "tokio",
"tokio-util", "tokio-util",
@@ -851,7 +889,7 @@ dependencies = [
"futures-sink", "futures-sink",
"futures-util", "futures-util",
"http 1.0.0", "http 1.0.0",
"indexmap", "indexmap 2.2.3",
"slab", "slab",
"tokio", "tokio",
"tokio-util", "tokio-util",
@@ -868,6 +906,12 @@ dependencies = [
"crunchy", "crunchy",
] ]
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.14.3" version = "0.14.3"
@@ -893,6 +937,12 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd"
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]] [[package]]
name = "hmac" name = "hmac"
version = "0.12.1" version = "0.12.1"
@@ -1080,6 +1130,12 @@ dependencies = [
"cc", "cc",
] ]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.5.0" version = "0.5.0"
@@ -1090,6 +1146,17 @@ dependencies = [
"unicode-normalization", "unicode-normalization",
] ]
[[package]]
name = "indexmap"
version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown 0.12.3",
"serde",
]
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.2.3" version = "2.2.3"
@@ -1097,7 +1164,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown 0.14.3",
"serde",
] ]
[[package]] [[package]]
@@ -1280,15 +1348,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "mach2"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "matchit" name = "matchit"
version = "0.7.3" version = "0.7.3"
@@ -1467,7 +1526,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -1581,7 +1640,7 @@ checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -1602,6 +1661,12 @@ version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
[[package]]
name = "portable-atomic"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
[[package]] [[package]]
name = "powerfmt" name = "powerfmt"
version = "0.2.0" version = "0.2.0"
@@ -1653,6 +1718,7 @@ dependencies = [
"serde-aux", "serde-aux",
"serde_json", "serde_json",
"serde_repr", "serde_repr",
"serde_with",
"time", "time",
"tokio", "tokio",
"tokio-tungstenite", "tokio-tungstenite",
@@ -1661,13 +1727,12 @@ dependencies = [
[[package]] [[package]]
name = "quanta" name = "quanta"
version = "0.11.1" version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" checksum = "9ca0b7bac0b97248c40bb77288fc52029cf1459c0461ea1b05ee32ccf011de2c"
dependencies = [ dependencies = [
"crossbeam-utils", "crossbeam-utils",
"libc", "libc",
"mach2",
"once_cell", "once_cell",
"raw-cpuid", "raw-cpuid",
"wasi", "wasi",
@@ -1716,11 +1781,11 @@ dependencies = [
[[package]] [[package]]
name = "raw-cpuid" name = "raw-cpuid"
version = "10.7.0" version = "11.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 2.4.2",
] ]
[[package]] [[package]]
@@ -1865,7 +1930,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19599f60a688b5160247ee9c37a6af8b0c742ee8b160c5b44acc0f0eb265a59f" checksum = "19599f60a688b5160247ee9c37a6af8b0c742ee8b160c5b44acc0f0eb265a59f"
dependencies = [ dependencies = [
"csv", "csv",
"hashbrown", "hashbrown 0.14.3",
"itertools 0.11.0", "itertools 0.11.0",
"lazy_static", "lazy_static",
"protobuf", "protobuf",
@@ -2016,7 +2081,7 @@ checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -2059,7 +2124,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -2074,13 +2139,43 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "serde_with"
version = "3.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270"
dependencies = [
"base64",
"chrono",
"hex",
"indexmap 1.9.3",
"indexmap 2.2.3",
"serde",
"serde_derive",
"serde_json",
"serde_with_macros",
"time",
]
[[package]]
name = "serde_with_macros"
version = "3.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.49",
]
[[package]] [[package]]
name = "serde_yaml" name = "serde_yaml"
version = "0.9.31" version = "0.9.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adf8a49373e98a4c5f0ceb5d05aa7c648d75f63774981ed95b7c7443bbd50c6e" checksum = "adf8a49373e98a4c5f0ceb5d05aa7c648d75f63774981ed95b7c7443bbd50c6e"
dependencies = [ dependencies = [
"indexmap", "indexmap 2.2.3",
"itoa", "itoa",
"ryu", "ryu",
"serde", "serde",
@@ -2145,12 +2240,27 @@ dependencies = [
"windows-sys 0.48.0", "windows-sys 0.48.0",
] ]
[[package]]
name = "spinning_top"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300"
dependencies = [
"lock_api",
]
[[package]] [[package]]
name = "static_assertions" name = "static_assertions"
version = "1.1.0" version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]] [[package]]
name = "subtle" name = "subtle"
version = "2.5.0" version = "2.5.0"
@@ -2170,9 +2280,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.48" version = "2.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -2263,7 +2373,7 @@ checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -2347,7 +2457,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]
@@ -2621,7 +2731,7 @@ dependencies = [
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -2655,7 +2765,7 @@ checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -2877,7 +2987,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.49",
] ]
[[package]] [[package]]

View File

@@ -27,6 +27,7 @@ log4rs = "1.2.0"
serde = "1.0.188" serde = "1.0.188"
serde_json = "1.0.105" serde_json = "1.0.105"
serde_repr = "0.1.18" serde_repr = "0.1.18"
serde_with = "3.6.1"
serde-aux = "4.4.0" serde-aux = "4.4.0"
futures-util = "0.3.28" futures-util = "0.3.28"
reqwest = { version = "0.11.20", features = [ reqwest = { version = "0.11.20", features = [

View File

@@ -269,13 +269,13 @@ impl Handler for BarsHandler {
} }
websocket::data::incoming::Message::Status(message) => { websocket::data::incoming::Message::Status(message) => {
debug!( debug!(
"Received status message for {}: {}.", "Received status message for {}: {:?}.",
message.symbol, message.status_message message.symbol, message.status
); );
match message.status { match message.status {
websocket::data::incoming::status::Status::TradingHalt websocket::data::incoming::status::Status::TradingHalt(_)
| websocket::data::incoming::status::Status::VolatilityTradingPause => { | websocket::data::incoming::status::Status::VolatilityTradingPause(_) => {
database::assets::update_status_where_symbol( database::assets::update_status_where_symbol(
&self.config.clickhouse_client, &self.config.clickhouse_client,
&message.symbol, &message.symbol,
@@ -284,8 +284,8 @@ impl Handler for BarsHandler {
.await .await
.unwrap(); .unwrap();
} }
websocket::data::incoming::status::Status::Resume websocket::data::incoming::status::Status::Resume(_)
| websocket::data::incoming::status::Status::TradingResumption => { | websocket::data::incoming::status::Status::TradingResumption(_) => {
database::assets::update_status_where_symbol( database::assets::update_status_where_symbol(
&self.config.clickhouse_client, &self.config.clickhouse_client,
&message.symbol, &message.symbol,

View File

@@ -1,128 +1,130 @@
use serde::Deserialize; use serde::Deserialize;
use serde_with::serde_as;
use time::OffsetDateTime; use time::OffsetDateTime;
#[derive(Deserialize, Debug, PartialEq, Eq)] #[derive(Deserialize, Debug, PartialEq, Eq)]
#[serde(tag = "sc", content = "sm")]
pub enum Status { pub enum Status {
#[serde(rename = "2")] #[serde(rename = "2")]
#[serde(alias = "H")] #[serde(alias = "H")]
TradingHalt, TradingHalt(String),
#[serde(rename = "3")] #[serde(rename = "3")]
Resume, Resume(String),
#[serde(rename = "5")] #[serde(rename = "5")]
PriceIndication, PriceIndication(String),
#[serde(rename = "6")] #[serde(rename = "6")]
TradingRangeIndication, TradingRangeIndication(String),
#[serde(rename = "7")] #[serde(rename = "7")]
MarketImbalanceBuy, MarketImbalanceBuy(String),
#[serde(rename = "8")] #[serde(rename = "8")]
MarketImbalanceSell, MarketImbalanceSell(String),
#[serde(rename = "9")] #[serde(rename = "9")]
MarketOnCloseImbalanceBuy, MarketOnCloseImbalanceBuy(String),
#[serde(rename = "A")] #[serde(rename = "A")]
MarketOnCloseImbalanceSell, MarketOnCloseImbalanceSell(String),
#[serde(rename = "C")] #[serde(rename = "C")]
NoMarketImbalance, NoMarketImbalance(String),
#[serde(rename = "D")] #[serde(rename = "D")]
NoMarketOnCloseImbalance, NoMarketOnCloseImbalance(String),
#[serde(rename = "E")] #[serde(rename = "E")]
ShortSaleRestriction, ShortSaleRestriction(String),
#[serde(rename = "F")] #[serde(rename = "F")]
LimitUpLimitDown, LimitUpLimitDown(String),
#[serde(rename = "Q")] #[serde(rename = "Q")]
QuotationResumption, QuotationResumption(String),
#[serde(rename = "T")] #[serde(rename = "T")]
TradingResumption, TradingResumption(String),
#[serde(rename = "P")] #[serde(rename = "P")]
VolatilityTradingPause, VolatilityTradingPause(String),
} }
#[derive(Deserialize, Debug, PartialEq, Eq)] #[derive(Deserialize, Debug, PartialEq, Eq)]
#[serde(tag = "rc", content = "rm")] #[serde(tag = "rc", content = "rm")]
pub enum Reason { pub enum Reason {
#[serde(rename = "D")] #[serde(rename = "D")]
NewsReleased, NewsReleased(String),
#[serde(rename = "I")] #[serde(rename = "I")]
OrderImbalance, OrderImbalance(String),
#[serde(rename = "M")] #[serde(rename = "M")]
LimitUpLimitDown, LimitUpLimitDown(String),
#[serde(rename = "P")] #[serde(rename = "P")]
NewsPending, NewsPending(String),
#[serde(rename = "X")] #[serde(rename = "X")]
Operational, Operational(String),
#[serde(rename = "Y")] #[serde(rename = "Y")]
SubPennyTrading, SubPennyTrading(String),
#[serde(rename = "1")] #[serde(rename = "1")]
MarketWideCircuitBreakerL1Breached, MarketWideCircuitBreakerL1Breached(String),
#[serde(rename = "2")] #[serde(rename = "2")]
MarketWideCircuitBreakerL2Breached, MarketWideCircuitBreakerL2Breached(String),
#[serde(rename = "3")] #[serde(rename = "3")]
MarketWideCircuitBreakerL3Breached, MarketWideCircuitBreakerL3Breached(String),
#[serde(rename = "T1")] #[serde(rename = "T1")]
HaltNewsPending, HaltNewsPending(String),
#[serde(rename = "T2")] #[serde(rename = "T2")]
HaltNewsDissemination, HaltNewsDissemination(String),
#[serde(rename = "T5")] #[serde(rename = "T5")]
SingleStockTradingPauseInAffect, SingleStockTradingPauseInAffect(String),
#[serde(rename = "T6")] #[serde(rename = "T6")]
RegulatoryHaltExtraordinaryMarketActivity, RegulatoryHaltExtraordinaryMarketActivity(String),
#[serde(rename = "T8")] #[serde(rename = "T8")]
HaltETF, HaltETF(String),
#[serde(rename = "T12")] #[serde(rename = "T12")]
TradingHaltedForInformationRequestedByNASDAQ, TradingHaltedForInformationRequestedByNASDAQ(String),
#[serde(rename = "H4")] #[serde(rename = "H4")]
HaltNonCompliance, HaltNonCompliance(String),
#[serde(rename = "H9")] #[serde(rename = "H9")]
HaltFilingsNotCurrent, HaltFilingsNotCurrent(String),
#[serde(rename = "H10")] #[serde(rename = "H10")]
HaltSECTradingSuspension, HaltSECTradingSuspension(String),
#[serde(rename = "H11")] #[serde(rename = "H11")]
HaltRegulatoryConcern, HaltRegulatoryConcern(String),
#[serde(rename = "01")] #[serde(rename = "01")]
OperationsHaltContactMarketOperations, OperationsHaltContactMarketOperations(String),
#[serde(rename = "IPO1")] #[serde(rename = "IPO1")]
IPOIssueNotYetTrading, IPOIssueNotYetTrading(String),
#[serde(rename = "M1")] #[serde(rename = "M1")]
CorporateAction, CorporateAction(String),
#[serde(rename = "M2")] #[serde(rename = "M2")]
QuotationNotAvailable, QuotationNotAvailable(String),
#[serde(rename = "LUDP")] #[serde(rename = "LUDP")]
VolatilityTradingPause, VolatilityTradingPause(String),
#[serde(rename = "LUDS")] #[serde(rename = "LUDS")]
VolatilityTradingPauseStraddleCondition, VolatilityTradingPauseStraddleCondition(String),
#[serde(rename = "MWC1")] #[serde(rename = "MWC1")]
MarketWideCircuitBreakerHaltL1, MarketWideCircuitBreakerHaltL1(String),
#[serde(rename = "MWC2")] #[serde(rename = "MWC2")]
MarketWideCircuitBreakerHaltL2, MarketWideCircuitBreakerHaltL2(String),
#[serde(rename = "MWC3")] #[serde(rename = "MWC3")]
MarketWideCircuitBreakerHaltL3, MarketWideCircuitBreakerHaltL3(String),
#[serde(rename = "MWC0")] #[serde(rename = "MWC0")]
MarketWideCircuitBreakerHaltCarryOverFromPreviousDay, MarketWideCircuitBreakerHaltCarryOverFromPreviousDay(String),
#[serde(rename = "T3")] #[serde(rename = "T3")]
NewsAndResumptionTimes, NewsAndResumptionTimes(String),
#[serde(rename = "T7")] #[serde(rename = "T7")]
SingleStockTradingPauseQuotationOnlyPeriod, SingleStockTradingPauseQuotationOnlyPeriod(String),
#[serde(rename = "R4")] #[serde(rename = "R4")]
QualificationsIssuesReviewedResolvedQuotationsTradingToResume, QualificationsIssuesReviewedResolvedQuotationsTradingToResume(String),
#[serde(rename = "R9")] #[serde(rename = "R9")]
FilingRequirementsSatisfiedResolvedQuotationsTradingToResume, FilingRequirementsSatisfiedResolvedQuotationsTradingToResume(String),
#[serde(rename = "C3")] #[serde(rename = "C3")]
IssuerNewsNotForthcomingQuotationsTradingToResume, IssuerNewsNotForthcomingQuotationsTradingToResume(String),
#[serde(rename = "C4")] #[serde(rename = "C4")]
QualificationsHaltEndedMaintReqMetResume, QualificationsHaltEndedMaintReqMetResume(String),
#[serde(rename = "C9")] #[serde(rename = "C9")]
QualificationsHaltConcludedFilingsMetQuotesTradesToResume, QualificationsHaltConcludedFilingsMetQuotesTradesToResume(String),
#[serde(rename = "C11")] #[serde(rename = "C11")]
TradeHaltConcludedByOtherRegulatoryAuthQuotesTradesResume, TradeHaltConcludedByOtherRegulatoryAuthQuotesTradesResume(String),
#[serde(rename = "R1")] #[serde(rename = "R1")]
NewIssueAvailable, NewIssueAvailable(String),
#[serde(rename = "R")] #[serde(rename = "R")]
IssueAvailable, IssueAvailable(String),
#[serde(rename = "IPOQ")] #[serde(rename = "IPOQ")]
IPOSecurityReleasedForQuotation, IPOSecurityReleasedForQuotation(String),
#[serde(rename = "IPOE")] #[serde(rename = "IPOE")]
IPOSecurityPositioningWindowExtension, IPOSecurityPositioningWindowExtension(String),
#[serde(rename = "MWCQ")] #[serde(rename = "MWCQ")]
MarketWideCircuitBreakerResumption, MarketWideCircuitBreakerResumption(String),
} }
#[derive(Deserialize, Debug, PartialEq, Eq)] #[derive(Deserialize, Debug, PartialEq, Eq)]
@@ -135,20 +137,18 @@ pub enum Tape {
#[derive(Deserialize, Debug, PartialEq, Eq)] #[derive(Deserialize, Debug, PartialEq, Eq)]
#[allow(clippy::struct_field_names)] #[allow(clippy::struct_field_names)]
#[serde_as]
pub struct Message { pub struct Message {
#[serde(rename = "t")] #[serde(rename = "t")]
#[serde(with = "time::serde::rfc3339")] #[serde(with = "time::serde::rfc3339")]
pub time: OffsetDateTime, pub time: OffsetDateTime,
#[serde(rename = "S")] #[serde(rename = "S")]
pub symbol: String, pub symbol: String,
#[serde(rename = "sc")] #[serde(flatten)]
pub status: Status, pub status: Status,
#[serde(rename = "sm")] #[serde(flatten)]
pub status_message: String, #[serde_as(as = "NoneAsEmptyString")]
#[serde(rename = "rc")] pub reason: Option<Reason>,
pub reason: Reason,
#[serde(rename = "rm")]
pub reason_message: String,
#[serde(rename = "z")] #[serde(rename = "z")]
pub tape: Tape, pub tape: Tape,
} }