Skip to main content

futu_cache/qot_right/
capability.rs

1use 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}