Skip to main content

futu_cache/qot_right/
capability.rs

1use crate::static_data::CachedSecurityInfo;
2use futu_domain_qot_orderbook::OrderBookEntitlementFacts;
3
4use super::security_rules::{
5    lv2_order_groups_for_security_impl, orderbook_right_facts_impl, orderbook_security_facts_impl,
6    snapshot_masks_hk_bmp_bid_ask_impl,
7};
8use super::{Lv2OrderGroupPlan, 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<Lv2OrderGroupPlan>,
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    pub dominant_qot_right: i32,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq)]
27pub struct QuoteSnapshotPolicy {
28    pub masks_hk_bmp_bid_ask: bool,
29}
30
31#[derive(Debug, Clone, PartialEq, Eq)]
32pub struct QuoteCryptoPolicy {
33    pub has_pt_orderbook_level1: bool,
34}
35
36pub fn resolve_quote_capability(info: &CachedSecurityInfo, qr: &QotRightData) -> QuoteCapability {
37    let orderbook = resolve_orderbook_entitlement(info, qr);
38    QuoteCapability {
39        orderbook: QuoteOrderBookPolicy {
40            max_depth: orderbook.max_depth,
41            read_uses_requested_count: orderbook.read_uses_requested_count,
42            requires_accepted_lv2_push: orderbook.requires_accepted_lv2_push,
43            dominant_qot_right: orderbook.dominant_qot_right,
44        },
45        snapshot: QuoteSnapshotPolicy {
46            masks_hk_bmp_bid_ask: snapshot_masks_hk_bmp_bid_ask_impl(info, qr),
47        },
48        crypto: QuoteCryptoPolicy {
49            has_pt_orderbook_level1: orderbook.has_crypto_pt_orderbook_level1,
50        },
51        lv2_subs: lv2_order_groups_for_security_impl(info, qr, true),
52    }
53}
54
55pub fn resolve_orderbook_entitlement(
56    info: &CachedSecurityInfo,
57    qr: &QotRightData,
58) -> OrderBookEntitlementFacts {
59    futu_domain_qot_orderbook::resolve_orderbook_entitlement_facts(
60        &orderbook_security_facts_impl(info),
61        &orderbook_right_facts_impl(qr),
62    )
63}