datex_core/global/protocol_structures/
encrypted_header.rs1use super::serializable::Serializable;
2use crate::values::core_values::endpoint::Endpoint;
3use binrw::{BinRead, BinWrite};
4use modular_bitfield::{Specifier, bitfield};
5
6#[derive(Debug, PartialEq, Clone, Default, Specifier)]
8pub enum DeviceType {
9 #[default]
10 Unknown = 0,
11 Mobile = 1,
12 Desktop = 2,
13 Bot = 3,
14
15 #[allow(unused)]
16 Unused0 = 4,
17 #[allow(unused)]
18 Unused1 = 5,
19 #[allow(unused)]
20 Unused2 = 6,
21 #[allow(unused)]
22 Unused3 = 7,
23 #[allow(unused)]
24 Unused4 = 8,
25 #[allow(unused)]
26 Unused5 = 9,
27 #[allow(unused)]
28 Unused6 = 10,
29 #[allow(unused)]
30 Unused7 = 11,
31 #[allow(unused)]
32 Unused8 = 12,
33 #[allow(unused)]
34 Unused9 = 13,
35 #[allow(unused)]
36 Unused10 = 14,
37 #[allow(unused)]
38 Unused11 = 15,
39}
40
41#[bitfield]
43#[derive(BinWrite, BinRead, Clone, Default, Copy, Debug, PartialEq)]
44#[bw(map = |&x| Self::into_bytes(x))]
45#[br(map = Self::from_bytes)]
46pub struct Flags {
47 pub device_type: DeviceType,
48 pub has_on_behalf_of: bool,
49 unused_0: bool,
50 unused_1: bool,
51 unused_2: bool,
52}
53
54#[derive(Debug, Clone, Default, BinWrite, BinRead, PartialEq)]
57#[brw(little)]
58pub struct EncryptedHeader {
59 pub flags: Flags,
60
61 #[brw(if (flags.has_on_behalf_of()))]
62 pub on_behalf_of: Option<Endpoint>,
63}
64impl Serializable for EncryptedHeader {}