ipqs_db_reader/
binary_option.rs

1// Copyright 2023 IPQualityScore LLC
2
3pub const CONNECTION_MASK: u8 = 0b0011_1000; // mask three connection bits
4pub const ABUSE_VELOCITY_MASK: u8 = 0b1100_0000; // mask two abuse velocity bits
5
6// pub const RESERVED_ELEVEN: u8 = 0b0000_0001;
7// pub const RESERVED_TWELVE: u8 = 0b0000_0010;
8pub const TREE_DATA: u8 = 0b0000_0100;
9pub const STRING_DATA: u8 = 0b0000_1000;
10pub const SMALL_INT_DATA: u8 = 0b0001_0000;
11pub const INT_DATA: u8 = 0b0010_0000;
12pub const FLOAT_DATA: u8 = 0b0100_0000;
13// pub const RESERVED_THIRTEEN: u8 = 0b1000_0000;
14
15// byte 1
16pub const IS_PROXY: u8 = 0x01;
17pub const IS_VPN: u8 = 0x02;
18pub const IS_TOR: u8 = 0x04;
19pub const IS_CRAWLER: u8 = 0x08;
20pub const IS_BOT: u8 = 0x10;
21pub const RECENT_ABUSE: u8 = 0x20;
22pub const IS_BLACKLISTED: u8 = 0x40;
23pub const IS_PRIVATE: u8 = 0x80;
24
25// byte 2;
26pub const IS_MOBILE: u8 = 0x01;
27pub const HAS_OPEN_PORTS: u8 = 0x02;
28pub const IS_HOSTING_PROVIDER: u8 = 0x04;
29pub const ACTIVE_VPN: u8 = 0x08;
30pub const ACTIVE_TOR: u8 = 0x10;
31pub const PUBLIC_ACCESS_POINT: u8 = 0x20;
32// pub const RESERVED_ONE: u8 = 0x40;
33// pub const RESERVED_TWO: u8 = 0x80;
34
35// byte 3;
36// pub const RESERVED_THREE: u8 = 0x01;
37// pub const RESERVED_FOUR: u8 = 0x02;
38// pub const RESERVED_FIVE: u8 = 0x04;
39pub const CONNECTION_TYPE_ONE: u8 = 0x08;
40pub const CONNECTION_TYPE_TWO: u8 = 0x10;
41pub const CONNECTION_TYPE_THREE: u8 = 0x20;
42pub const ABUSE_VELOCITY_ONE: u8 = 0x40;
43pub const ABUSE_VELOCITY_TWO: u8 = 0x80;
44
45// required because match only allows patterns, not expressions
46pub const THREE_UNION_TWO: u8 = CONNECTION_TYPE_THREE | CONNECTION_TYPE_TWO;
47pub const THREE_UNION_ONE: u8 = CONNECTION_TYPE_THREE | CONNECTION_TYPE_ONE;
48pub const ABUSE_BOTH: u8 = ABUSE_VELOCITY_ONE | ABUSE_VELOCITY_TWO;
49
50#[derive(Clone, Debug, Default)]
51#[cfg_attr(feature = "json", derive(serde::Serialize))]
52pub struct BinaryOption {
53    pub data: u8,
54}
55
56impl BinaryOption {
57    pub fn has(&self, flag: u8) -> bool {
58        self.data & flag != 0
59    }
60}