futu_cache/qot_right/
capability.rs1use 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}