longport/quote/
sub_flags.rs

1use longport_proto::quote::SubType;
2
3bitflags::bitflags! {
4    /// Subscription flags
5    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
6    pub struct SubFlags: u8 {
7        /// Quote
8        const QUOTE = 0x1;
9
10        /// Depth
11        const DEPTH = 0x2;
12
13        /// Broker
14        const BROKER = 0x4;
15
16        /// Trade
17        const TRADE = 0x8;
18    }
19}
20
21impl From<SubFlags> for Vec<i32> {
22    fn from(flags: SubFlags) -> Self {
23        let mut sub_types = Vec::new();
24
25        if flags.contains(SubFlags::QUOTE) {
26            sub_types.push(SubType::Quote.into());
27        }
28
29        if flags.contains(SubFlags::DEPTH) {
30            sub_types.push(SubType::Depth.into());
31        }
32
33        if flags.contains(SubFlags::BROKER) {
34            sub_types.push(SubType::Brokers.into());
35        }
36
37        if flags.contains(SubFlags::TRADE) {
38            sub_types.push(SubType::Trade.into());
39        }
40
41        sub_types
42    }
43}
44
45impl From<Vec<i32>> for SubFlags {
46    fn from(sub_types: Vec<i32>) -> Self {
47        let mut flags = SubFlags::empty();
48
49        for sub_type in sub_types {
50            if let Ok(sub_type) = SubType::try_from(sub_type) {
51                match sub_type {
52                    SubType::Quote => flags |= SubFlags::QUOTE,
53                    SubType::Depth => flags |= SubFlags::DEPTH,
54                    SubType::Brokers => flags |= SubFlags::BROKER,
55                    SubType::Trade => flags |= SubFlags::TRADE,
56                    _ => {}
57                }
58            }
59        }
60
61        flags
62    }
63}