dis_rs/common/transmitter/
builder.rs1use crate::enumerations::{
2 TransmitterAntennaPatternType, TransmitterCryptoSystem, TransmitterInputSource,
3 TransmitterTransmitState,
4};
5use crate::model::{EntityId, EntityType, Location, VectorF32};
6use crate::transmitter::model::{
7 BeamAntennaPattern, CryptoKeyId, ModulationType, Transmitter, VariableTransmitterParameter,
8};
9
10pub struct TransmitterBuilder(Transmitter);
11
12impl Default for TransmitterBuilder {
13 fn default() -> Self {
14 Self::new()
15 }
16}
17
18impl TransmitterBuilder {
19 #[must_use]
20 pub fn new() -> Self {
21 TransmitterBuilder(Transmitter::default())
22 }
23
24 #[must_use]
25 pub fn new_from_body(body: Transmitter) -> Self {
26 TransmitterBuilder(body)
27 }
28
29 #[must_use]
30 pub fn build(self) -> Transmitter {
31 self.0
32 }
33
34 #[must_use]
35 pub fn with_radio_reference_id(mut self, radio_reference_id: EntityId) -> Self {
36 self.0.radio_reference_id = radio_reference_id;
37 self
38 }
39
40 #[must_use]
41 pub fn with_radio_number(mut self, radio_number: u16) -> Self {
42 self.0.radio_number = radio_number;
43 self
44 }
45
46 #[must_use]
47 pub fn with_radio_type(mut self, radio_type: EntityType) -> Self {
48 self.0.radio_type = radio_type;
49 self
50 }
51
52 #[must_use]
53 pub fn with_transmit_state(mut self, transmit_state: TransmitterTransmitState) -> Self {
54 self.0.transmit_state = transmit_state;
55 self
56 }
57
58 #[must_use]
59 pub fn with_input_source(mut self, input_source: TransmitterInputSource) -> Self {
60 self.0.input_source = input_source;
61 self
62 }
63
64 #[must_use]
65 pub fn with_antenna_location(mut self, antenna_location: Location) -> Self {
66 self.0.antenna_location = antenna_location;
67 self
68 }
69
70 #[must_use]
71 pub fn with_relative_antenna_location(mut self, relative_antenna_location: VectorF32) -> Self {
72 self.0.relative_antenna_location = relative_antenna_location;
73 self
74 }
75
76 #[must_use]
77 pub fn with_antenna_pattern_type(
78 mut self,
79 antenna_pattern_type: TransmitterAntennaPatternType,
80 ) -> Self {
81 self.0.antenna_pattern_type = antenna_pattern_type;
82 self
83 }
84
85 #[must_use]
86 pub fn with_frequency(mut self, frequency: u64) -> Self {
87 self.0.frequency = frequency;
88 self
89 }
90
91 #[must_use]
92 pub fn with_transmit_frequency_bandwidth(mut self, transmit_frequency_bandwidth: f32) -> Self {
93 self.0.transmit_frequency_bandwidth = transmit_frequency_bandwidth;
94 self
95 }
96 #[must_use]
97 pub fn with_power(mut self, power: f32) -> Self {
98 self.0.power = power;
99 self
100 }
101
102 #[must_use]
103 pub fn with_modulation_type(mut self, modulation_type: ModulationType) -> Self {
104 self.0.modulation_type = modulation_type;
105 self
106 }
107
108 #[must_use]
109 pub fn with_crypto_system(mut self, crypto_system: TransmitterCryptoSystem) -> Self {
110 self.0.crypto_system = crypto_system;
111 self
112 }
113
114 #[must_use]
115 pub fn with_crypto_key_id(mut self, crypto_key_id: CryptoKeyId) -> Self {
116 self.0.crypto_key_id = crypto_key_id;
117 self
118 }
119 #[must_use]
120 pub fn with_modulation_parameters(mut self, modulation_parameters: Vec<u8>) -> Self {
121 self.0.modulation_parameters = Some(modulation_parameters);
122 self
123 }
124
125 #[must_use]
126 pub fn with_antenna_pattern(mut self, antenna_pattern: BeamAntennaPattern) -> Self {
127 self.0.antenna_pattern = Some(antenna_pattern);
128 self
129 }
130
131 #[must_use]
132 pub fn with_variable_transmitter_parameters(
133 mut self,
134 variable_transmitter_parameters: Vec<VariableTransmitterParameter>,
135 ) -> Self {
136 self.0.variable_transmitter_parameters = variable_transmitter_parameters;
137 self
138 }
139
140 #[must_use]
141 pub fn with_variable_transmitter_parameter(
142 mut self,
143 variable_transmitter_parameter: VariableTransmitterParameter,
144 ) -> Self {
145 self.0
146 .variable_transmitter_parameters
147 .push(variable_transmitter_parameter);
148 self
149 }
150}