longport/quote/
sub_flags.rs
1use longport_proto::quote::SubType;
2
3bitflags::bitflags! {
4 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
6 pub struct SubFlags: u8 {
7 const QUOTE = 0x1;
9
10 const DEPTH = 0x2;
12
13 const BROKER = 0x4;
15
16 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}