1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
use serde::{Serialize, Deserialize};
use super::parameter_id::ParameterId;
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Copy, Clone)]
pub struct BuiltinEndpointSet {
  value: u32,
}

impl BuiltinEndpointSet {
  pub const DISC_BUILTIN_ENDPOINT_PARTICIPANT_ANNOUNCER: u32 = 0x00000001;
  pub const DISC_BUILTIN_ENDPOINT_PARTICIPANT_DETECTOR: u32 = 0x000000002;
  pub const DISC_BUILTIN_ENDPOINT_PUBLICATIONS_ANNOUNCER: u32 = 0x00000004;
  pub const DISC_BUILTIN_ENDPOINT_PUBLICATIONS_DETECTOR: u32 = 0x00000008;
  pub const DISC_BUILTIN_ENDPOINT_SUBSCRIPTIONS_ANNOUNCER: u32 = 0x00000010;
  pub const DISC_BUILTIN_ENDPOINT_SUBSCRIPTIONS_DETECTOR: u32 = 0x00000020;

  pub const BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_WRITER: u32 = 0x00000400;
  pub const BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_READER: u32 = 0x00000800;

  pub const DISC_BUILTIN_ENDPOINT_TOPICS_ANNOUNCER: u32 = 0x08000000;
  pub const DISC_BUILTIN_ENDPOINT_TOPICS_DETECTOR: u32 = 0x10000000;

  pub fn from_u32(val: u32) -> BuiltinEndpointSet {
    BuiltinEndpointSet { value: val }
  }

  pub fn contains(&self, other: u32) -> bool {
    (self.value & other) == other
  }
}

#[derive(Copy, Clone, Serialize, Deserialize)]
pub struct BuiltinEndpointSetData {
  parameter_id: ParameterId,
  parameter_length: u16,
  builtin_endpoint_set: BuiltinEndpointSet,
}

impl BuiltinEndpointSetData {
  pub fn from(
    builtin_endpoint_set: BuiltinEndpointSet,
    parameter_id: ParameterId,
  ) -> BuiltinEndpointSetData {
    BuiltinEndpointSetData {
      parameter_id: parameter_id.clone(),
      parameter_length: 4,
      builtin_endpoint_set: builtin_endpoint_set.clone(),
    }
  }
}

#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Copy, Clone)]
pub struct BuiltinEndpointQos {
  value: u32,
}

impl BuiltinEndpointQos {
  pub const BEST_EFFORT_PARTICIPANT_MESSAGE_DATA_READER: u32 = 0x00000001;
}

#[derive(Serialize, Deserialize)]
pub struct BuiltinEndpointQosData {
  parameter_id: ParameterId,
  parameter_length: u16,
  builtin_endpoint_qos: BuiltinEndpointQos,
}

impl BuiltinEndpointQosData {
  pub fn from(builtin_endpoint_qos: BuiltinEndpointQos) -> BuiltinEndpointQosData {
    BuiltinEndpointQosData {
      parameter_id: ParameterId::PID_BUILTIN_ENDPOINT_QOS,
      parameter_length: 4,
      builtin_endpoint_qos: builtin_endpoint_qos.clone(),
    }
  }
}