dis_rs/common/transmitter/
builder.rs

1use 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}