futu_cache/qot_right/
capability.rs1use crate::static_data::CachedSecurityInfo;
2
3use super::security_rules::{
4 merged_lv2_order_subs_for_security_impl, order_book_max_depth_for_security_impl,
5 order_book_read_uses_requested_count_impl, order_book_requires_accepted_lv2_push_impl,
6 snapshot_masks_hk_bmp_bid_ask_impl,
7};
8use super::{Lv2OrderSubDescriptor, QotRightData};
9
10#[derive(Debug, Clone, PartialEq, Eq)]
11pub struct QuoteCapability {
12 pub orderbook: QuoteOrderBookPolicy,
13 pub snapshot: QuoteSnapshotPolicy,
14 pub crypto: QuoteCryptoPolicy,
15 pub lv2_subs: Vec<Lv2OrderSubDescriptor>,
16}
17
18#[derive(Debug, Clone, PartialEq, Eq)]
19pub struct QuoteOrderBookPolicy {
20 pub max_depth: usize,
21 pub read_uses_requested_count: bool,
22 pub requires_accepted_lv2_push: bool,
23}
24
25#[derive(Debug, Clone, PartialEq, Eq)]
26pub struct QuoteSnapshotPolicy {
27 pub masks_hk_bmp_bid_ask: bool,
28}
29
30#[derive(Debug, Clone, PartialEq, Eq)]
31pub struct QuoteCryptoPolicy {
32 pub has_pt_orderbook_level1: bool,
33}
34
35pub fn resolve_quote_capability(info: &CachedSecurityInfo, qr: &QotRightData) -> QuoteCapability {
36 QuoteCapability {
37 orderbook: QuoteOrderBookPolicy {
38 max_depth: order_book_max_depth_for_security_impl(info, qr),
39 read_uses_requested_count: order_book_read_uses_requested_count_impl(info, qr),
40 requires_accepted_lv2_push: order_book_requires_accepted_lv2_push_impl(info, qr),
41 },
42 snapshot: QuoteSnapshotPolicy {
43 masks_hk_bmp_bid_ask: snapshot_masks_hk_bmp_bid_ask_impl(info, qr),
44 },
45 crypto: QuoteCryptoPolicy {
46 has_pt_orderbook_level1: qr.cc_pt_orderbook_qot_right == super::QOT_RIGHT_LEVEL1,
47 },
48 lv2_subs: merged_lv2_order_subs_for_security_impl(info, qr, true),
49 }
50}