dis_rs/common/iff/
builder.rs

1use crate::common::iff::model::{
2    ChangeOptionsRecord, DamageStatus, DapSource, DapValue, EnabledStatus, EnhancedMode1Code,
3    FundamentalOperationalData, Iff, IffDataRecord, IffDataSpecification,
4    IffFundamentalParameterData, IffLayer2, IffLayer3, IffLayer4, IffLayer5, IffPresence,
5    InformationLayers, LatLonAltSource, LayerHeader, LayersPresenceApplicability,
6    MalfunctionStatus, Mode5BasicData, Mode5InterrogatorBasicData, Mode5InterrogatorStatus,
7    Mode5MessageFormats, Mode5TransponderBasicData, Mode5TransponderStatus,
8    Mode5TransponderSupplementalData, ModeSAltitude, ModeSBasicData, ModeSInterrogatorBasicData,
9    ModeSInterrogatorStatus, ModeSLevelsPresent, ModeSTransponderBasicData, ModeSTransponderStatus,
10    OnOffStatus, OperationalStatus, ParameterCapable, SquitterStatus, SystemId, SystemSpecificData,
11    SystemStatus,
12};
13use crate::common::model::{BeamData, EntityId, EventId, SimulationAddress, VectorF32};
14use crate::enumerations::{
15    AircraftIdentificationType, AircraftPresentDomain, AntennaSelection, CapabilityReport,
16    DataCategory, IffApplicableModes, IffSystemMode, IffSystemName, IffSystemType,
17    Level2SquitterStatus, Mode5IffMission, Mode5LevelSelection, Mode5LocationErrors,
18    Mode5MessageFormatsStatus, Mode5PlatformType, Mode5Reply, Mode5SAltitudeResolution,
19    ModeSSquitterRecordSource, ModeSSquitterType, ModeSTransmitState, NavigationSource,
20    VariableRecordType,
21};
22
23pub struct IffBuilder(Iff);
24
25impl Default for IffBuilder {
26    fn default() -> Self {
27        Self::new()
28    }
29}
30
31impl IffBuilder {
32    #[must_use]
33    pub fn new() -> Self {
34        IffBuilder(Iff::default())
35    }
36
37    #[must_use]
38    pub fn new_from_body(body: Iff) -> Self {
39        IffBuilder(body)
40    }
41
42    #[must_use]
43    pub fn build(self) -> Iff {
44        self.0
45    }
46
47    #[must_use]
48    pub fn with_emitting_entity_id(mut self, v: EntityId) -> Self {
49        self.0.emitting_entity_id = v;
50        self
51    }
52
53    #[must_use]
54    pub fn with_event_id(mut self, v: EventId) -> Self {
55        self.0.event_id = v;
56        self
57    }
58
59    #[must_use]
60    pub fn with_relative_antenna_location(mut self, v: VectorF32) -> Self {
61        self.0.relative_antenna_location = v;
62        self
63    }
64
65    #[must_use]
66    pub fn with_system_id(mut self, v: SystemId) -> Self {
67        self.0.system_id = v;
68        self
69    }
70
71    #[must_use]
72    pub fn with_system_designator(mut self, v: u8) -> Self {
73        self.0.system_designator = v;
74        self
75    }
76
77    #[must_use]
78    pub fn with_system_specific_data(mut self, v: u8) -> Self {
79        self.0.system_specific_data = v;
80        self
81    }
82
83    #[must_use]
84    pub fn with_fundamental_operational_data(mut self, v: FundamentalOperationalData) -> Self {
85        self.0.fundamental_operational_data = v;
86        self
87    }
88
89    #[must_use]
90    pub fn with_layer_2(mut self, v: IffLayer2) -> Self {
91        self.0.layer_2 = Some(v);
92        self
93    }
94
95    #[must_use]
96    pub fn with_layer_3(mut self, v: IffLayer3) -> Self {
97        self.0.layer_3 = Some(v);
98        self
99    }
100
101    #[must_use]
102    pub fn with_layer_4(mut self, v: IffLayer4) -> Self {
103        self.0.layer_4 = Some(v);
104        self
105    }
106
107    #[must_use]
108    pub fn with_layer_5(mut self, v: IffLayer5) -> Self {
109        self.0.layer_5 = Some(v);
110        self
111    }
112}
113
114pub struct IffLayer2Builder(IffLayer2);
115
116impl Default for IffLayer2Builder {
117    fn default() -> Self {
118        Self::new()
119    }
120}
121
122impl IffLayer2Builder {
123    #[must_use]
124    pub fn new() -> Self {
125        IffLayer2Builder(IffLayer2::default())
126    }
127
128    #[must_use]
129    pub fn with_header(mut self, v: LayerHeader) -> Self {
130        self.0.layer_header = v;
131        self
132    }
133
134    #[must_use]
135    pub fn with_beam_data(mut self, v: BeamData) -> Self {
136        self.0.beam_data = v;
137        self
138    }
139
140    #[must_use]
141    pub fn with_operational_parameter_1(mut self, v: u8) -> Self {
142        self.0.operational_parameter_1 = v;
143        self
144    }
145
146    #[must_use]
147    pub fn with_operational_parameter_2(mut self, v: u8) -> Self {
148        self.0.operational_parameter_2 = v;
149        self
150    }
151
152    #[must_use]
153    pub fn with_iff_fundamental_parameter(mut self, v: IffFundamentalParameterData) -> Self {
154        self.0.iff_fundamental_parameters.push(v);
155        self
156    }
157
158    #[must_use]
159    pub fn with_iff_fundamental_parameters(mut self, v: Vec<IffFundamentalParameterData>) -> Self {
160        self.0.iff_fundamental_parameters = v;
161        self
162    }
163
164    #[must_use]
165    pub fn build(self) -> IffLayer2 {
166        self.0
167    }
168}
169
170pub struct IffLayer3Builder(IffLayer3);
171
172impl Default for IffLayer3Builder {
173    fn default() -> Self {
174        Self::new()
175    }
176}
177
178impl IffLayer3Builder {
179    #[must_use]
180    pub fn new() -> Self {
181        IffLayer3Builder(IffLayer3::default())
182    }
183
184    #[must_use]
185    pub fn with_header(mut self, v: LayerHeader) -> Self {
186        self.0.layer_header = v;
187        self
188    }
189
190    #[must_use]
191    pub fn with_reporting_simulation(mut self, v: SimulationAddress) -> Self {
192        self.0.reporting_simulation = v;
193        self
194    }
195
196    #[must_use]
197    pub fn with_mode_5_basic_data(mut self, v: Mode5BasicData) -> Self {
198        self.0.mode_5_basic_data = v;
199        self
200    }
201
202    #[must_use]
203    pub fn with_iff_data_specification(mut self, v: IffDataSpecification) -> Self {
204        self.0.data_records = v;
205        self
206    }
207
208    #[must_use]
209    pub fn build(self) -> IffLayer3 {
210        self.0
211    }
212}
213
214pub struct IffLayer4Builder(IffLayer4);
215
216impl Default for IffLayer4Builder {
217    fn default() -> Self {
218        Self::new()
219    }
220}
221
222impl IffLayer4Builder {
223    #[must_use]
224    pub fn new() -> Self {
225        IffLayer4Builder(IffLayer4::default())
226    }
227
228    #[must_use]
229    pub fn with_header(mut self, v: LayerHeader) -> Self {
230        self.0.layer_header = v;
231        self
232    }
233
234    #[must_use]
235    pub fn with_reporting_simulation(mut self, v: SimulationAddress) -> Self {
236        self.0.reporting_simulation = v;
237        self
238    }
239
240    #[must_use]
241    pub fn with_mode_s_basic_data(mut self, v: ModeSBasicData) -> Self {
242        self.0.mode_s_basic_data = v;
243        self
244    }
245
246    #[must_use]
247    pub fn with_iff_data_specification(mut self, v: IffDataSpecification) -> Self {
248        self.0.data_records = v;
249        self
250    }
251
252    #[must_use]
253    pub fn build(self) -> IffLayer4 {
254        self.0
255    }
256}
257
258pub struct IffLayer5Builder(IffLayer5);
259
260impl Default for IffLayer5Builder {
261    fn default() -> Self {
262        Self::new()
263    }
264}
265
266impl IffLayer5Builder {
267    #[must_use]
268    pub fn new() -> Self {
269        IffLayer5Builder(IffLayer5::default())
270    }
271
272    #[must_use]
273    pub fn with_header(mut self, v: LayerHeader) -> Self {
274        self.0.layer_header = v;
275        self
276    }
277
278    #[must_use]
279    pub fn with_reporting_simulation(mut self, v: SimulationAddress) -> Self {
280        self.0.reporting_simulation = v;
281        self
282    }
283
284    #[must_use]
285    pub fn with_applicable_layers(mut self, v: InformationLayers) -> Self {
286        self.0.applicable_layers = v;
287        self
288    }
289
290    #[must_use]
291    pub fn with_data_category(mut self, v: DataCategory) -> Self {
292        self.0.data_category = v;
293        self
294    }
295
296    #[must_use]
297    pub fn with_iff_data_specification(mut self, v: IffDataSpecification) -> Self {
298        self.0.data_records = v;
299        self
300    }
301
302    #[must_use]
303    pub fn build(self) -> IffLayer5 {
304        self.0
305    }
306}
307
308pub struct ChangeOptionsRecordBuilder(ChangeOptionsRecord);
309
310impl Default for ChangeOptionsRecordBuilder {
311    fn default() -> Self {
312        Self::new()
313    }
314}
315
316impl ChangeOptionsRecordBuilder {
317    #[must_use]
318    pub fn new() -> Self {
319        Self(ChangeOptionsRecord::default())
320    }
321
322    #[must_use]
323    pub fn set_change_indicator(mut self) -> Self {
324        self.0.change_indicator = true;
325        self
326    }
327
328    #[must_use]
329    pub fn set_system_specific_field_1(mut self) -> Self {
330        self.0.system_specific_field_1 = true;
331        self
332    }
333
334    #[must_use]
335    pub fn set_system_specific_field_2(mut self) -> Self {
336        self.0.system_specific_field_2 = true;
337        self
338    }
339
340    #[must_use]
341    pub fn set_heartbeat_indicator(mut self) -> Self {
342        self.0.heartbeat_indicator = true;
343        self
344    }
345
346    #[must_use]
347    pub fn set_transponder_interrogator_indicator(mut self) -> Self {
348        self.0.transponder_interrogator_indicator = true;
349        self
350    }
351
352    #[must_use]
353    pub fn set_simulation_mode(mut self) -> Self {
354        self.0.simulation_mode = true;
355        self
356    }
357
358    #[must_use]
359    pub fn set_interactive_capable(mut self) -> Self {
360        self.0.interactive_capable = true;
361        self
362    }
363
364    #[must_use]
365    pub fn set_test_mode(mut self) -> Self {
366        self.0.test_mode = true;
367        self
368    }
369
370    #[must_use]
371    pub fn build(self) -> ChangeOptionsRecord {
372        self.0
373    }
374}
375
376pub struct FundamentalOperationalDataBuilder(FundamentalOperationalData);
377
378impl Default for FundamentalOperationalDataBuilder {
379    fn default() -> Self {
380        Self::new()
381    }
382}
383
384impl FundamentalOperationalDataBuilder {
385    #[must_use]
386    pub fn new() -> Self {
387        Self(FundamentalOperationalData::default())
388    }
389
390    #[must_use]
391    pub fn with_system_status(mut self, v: SystemStatus) -> Self {
392        self.0.system_status = v;
393        self
394    }
395
396    #[must_use]
397    pub fn with_data_field_1(mut self, v: u8) -> Self {
398        self.0.data_field_1 = v;
399        self
400    }
401
402    #[must_use]
403    pub fn with_information_layers(mut self, v: InformationLayers) -> Self {
404        self.0.information_layers = v;
405        self
406    }
407
408    #[must_use]
409    pub fn with_data_field_2(mut self, v: u8) -> Self {
410        self.0.data_field_2 = v;
411        self
412    }
413
414    #[must_use]
415    pub fn with_parameter_1(mut self, v: u16) -> Self {
416        self.0.parameter_1 = v;
417        self
418    }
419
420    #[must_use]
421    pub fn with_parameter_2(mut self, v: u16) -> Self {
422        self.0.parameter_2 = v;
423        self
424    }
425
426    #[must_use]
427    pub fn with_parameter_3(mut self, v: u16) -> Self {
428        self.0.parameter_3 = v;
429        self
430    }
431
432    #[must_use]
433    pub fn with_parameter_4(mut self, v: u16) -> Self {
434        self.0.parameter_4 = v;
435        self
436    }
437
438    #[must_use]
439    pub fn with_parameter_5(mut self, v: u16) -> Self {
440        self.0.parameter_5 = v;
441        self
442    }
443
444    #[must_use]
445    pub fn with_parameter_6(mut self, v: u16) -> Self {
446        self.0.parameter_6 = v;
447        self
448    }
449
450    #[must_use]
451    pub fn build(self) -> FundamentalOperationalData {
452        self.0
453    }
454}
455
456pub struct IffDataRecordBuilder(IffDataRecord);
457
458impl Default for IffDataRecordBuilder {
459    fn default() -> Self {
460        Self::new()
461    }
462}
463
464impl IffDataRecordBuilder {
465    #[must_use]
466    pub fn new() -> Self {
467        Self(IffDataRecord::default())
468    }
469
470    #[must_use]
471    pub fn with_record_type(mut self, v: VariableRecordType) -> Self {
472        self.0.record_type = v;
473        self
474    }
475
476    #[must_use]
477    pub fn with_record_specific_field(mut self, v: Vec<u8>) -> Self {
478        self.0.record_specific_fields = v;
479        self
480    }
481
482    #[must_use]
483    pub fn build(self) -> IffDataRecord {
484        self.0
485    }
486}
487
488pub struct IffDataSpecificationBuilder(IffDataSpecification);
489
490impl Default for IffDataSpecificationBuilder {
491    fn default() -> Self {
492        Self::new()
493    }
494}
495
496impl IffDataSpecificationBuilder {
497    #[must_use]
498    pub fn new() -> Self {
499        Self(IffDataSpecification::default())
500    }
501
502    #[must_use]
503    pub fn with_iff_data_record(mut self, v: IffDataRecord) -> Self {
504        self.0.iff_data_records.push(v);
505        self
506    }
507
508    #[must_use]
509    pub fn with_iff_data_records(mut self, v: Vec<IffDataRecord>) -> Self {
510        self.0.iff_data_records = v;
511        self
512    }
513
514    #[must_use]
515    pub fn build(self) -> IffDataSpecification {
516        self.0
517    }
518}
519
520pub struct InformationLayersBuilder(InformationLayers);
521
522impl Default for InformationLayersBuilder {
523    fn default() -> Self {
524        Self::new()
525    }
526}
527
528impl InformationLayersBuilder {
529    #[must_use]
530    pub fn new() -> Self {
531        Self(InformationLayers::default())
532    }
533
534    #[must_use]
535    pub fn with_layer_1(mut self, v: LayersPresenceApplicability) -> Self {
536        self.0.layer_1 = v;
537        self
538    }
539
540    #[must_use]
541    pub fn with_layer_2(mut self, v: LayersPresenceApplicability) -> Self {
542        self.0.layer_2 = v;
543        self
544    }
545
546    #[must_use]
547    pub fn with_layer_3(mut self, v: LayersPresenceApplicability) -> Self {
548        self.0.layer_3 = v;
549        self
550    }
551
552    #[must_use]
553    pub fn with_layer_4(mut self, v: LayersPresenceApplicability) -> Self {
554        self.0.layer_4 = v;
555        self
556    }
557
558    #[must_use]
559    pub fn with_layer_5(mut self, v: LayersPresenceApplicability) -> Self {
560        self.0.layer_5 = v;
561        self
562    }
563
564    #[must_use]
565    pub fn with_layer_6(mut self, v: LayersPresenceApplicability) -> Self {
566        self.0.layer_6 = v;
567        self
568    }
569
570    #[must_use]
571    pub fn with_layer_7(mut self, v: LayersPresenceApplicability) -> Self {
572        self.0.layer_7 = v;
573        self
574    }
575
576    #[must_use]
577    pub fn build(self) -> InformationLayers {
578        self.0
579    }
580}
581
582pub struct IffFundamentalParameterDataBuilder(IffFundamentalParameterData);
583
584impl Default for IffFundamentalParameterDataBuilder {
585    fn default() -> Self {
586        Self::new()
587    }
588}
589
590impl IffFundamentalParameterDataBuilder {
591    #[must_use]
592    pub fn new() -> Self {
593        Self(IffFundamentalParameterData::default())
594    }
595
596    #[must_use]
597    pub fn with_erp(mut self, v: f32) -> Self {
598        self.0.erp = v;
599        self
600    }
601
602    #[must_use]
603    pub fn with_frequency(mut self, v: f32) -> Self {
604        self.0.frequency = v;
605        self
606    }
607
608    #[must_use]
609    pub fn with_pgrf(mut self, v: f32) -> Self {
610        self.0.pgrf = v;
611        self
612    }
613
614    #[must_use]
615    pub fn with_pulse_width(mut self, v: f32) -> Self {
616        self.0.pulse_width = v;
617        self
618    }
619
620    #[must_use]
621    pub fn with_burst_length(mut self, v: f32) -> Self {
622        self.0.burst_length = v;
623        self
624    }
625
626    #[must_use]
627    pub fn with_applicable_modes(mut self, v: IffApplicableModes) -> Self {
628        self.0.applicable_modes = v;
629        self
630    }
631
632    #[must_use]
633    pub fn with_system_specific_data(mut self, v: SystemSpecificData) -> Self {
634        self.0.system_specific_data = v;
635        self
636    }
637
638    #[must_use]
639    pub fn build(self) -> IffFundamentalParameterData {
640        self.0
641    }
642}
643
644pub struct LayerHeaderBuilder(LayerHeader);
645
646impl Default for LayerHeaderBuilder {
647    fn default() -> Self {
648        Self::new()
649    }
650}
651
652impl LayerHeaderBuilder {
653    #[must_use]
654    pub fn new() -> Self {
655        Self(LayerHeader::default())
656    }
657
658    #[must_use]
659    pub fn with_layer_number(mut self, v: u8) -> Self {
660        self.0.layer_number = v;
661        self
662    }
663
664    #[must_use]
665    pub fn with_layer_specific_information(mut self, v: u8) -> Self {
666        self.0.layer_specific_information = v;
667        self
668    }
669
670    #[must_use]
671    pub fn with_length(mut self, v: u16) -> Self {
672        self.0.length = v;
673        self
674    }
675
676    #[must_use]
677    pub fn build(self) -> LayerHeader {
678        self.0
679    }
680}
681
682pub struct SystemSpecificDataBuilder(SystemSpecificData);
683
684impl Default for SystemSpecificDataBuilder {
685    fn default() -> Self {
686        Self::new()
687    }
688}
689
690impl SystemSpecificDataBuilder {
691    #[must_use]
692    pub fn new() -> Self {
693        Self(SystemSpecificData::default())
694    }
695
696    #[must_use]
697    pub fn with_part_1(mut self, v: u8) -> Self {
698        self.0.part_1 = v;
699        self
700    }
701
702    #[must_use]
703    pub fn with_part_2(mut self, v: u8) -> Self {
704        self.0.part_2 = v;
705        self
706    }
707
708    #[must_use]
709    pub fn with_part_3(mut self, v: u8) -> Self {
710        self.0.part_3 = v;
711        self
712    }
713
714    #[must_use]
715    pub fn build(self) -> SystemSpecificData {
716        self.0
717    }
718}
719
720pub struct SystemIdBuilder(SystemId);
721
722impl Default for SystemIdBuilder {
723    fn default() -> Self {
724        Self::new()
725    }
726}
727
728impl SystemIdBuilder {
729    #[must_use]
730    pub fn new() -> Self {
731        Self(SystemId::default())
732    }
733
734    #[must_use]
735    pub fn with_system_type(mut self, v: IffSystemType) -> Self {
736        self.0.system_type = v;
737        self
738    }
739
740    #[must_use]
741    pub fn with_system_name(mut self, v: IffSystemName) -> Self {
742        self.0.system_name = v;
743        self
744    }
745
746    #[must_use]
747    pub fn with_system_mode(mut self, v: IffSystemMode) -> Self {
748        self.0.system_mode = v;
749        self
750    }
751
752    #[must_use]
753    pub fn with_change_options(mut self, v: ChangeOptionsRecord) -> Self {
754        self.0.change_options = v;
755        self
756    }
757
758    #[must_use]
759    pub fn build(self) -> SystemId {
760        self.0
761    }
762}
763
764pub struct DapSourceBuilder(DapSource);
765
766impl Default for DapSourceBuilder {
767    fn default() -> Self {
768        Self::new()
769    }
770}
771
772impl DapSourceBuilder {
773    #[must_use]
774    pub fn new() -> Self {
775        Self(DapSource::default())
776    }
777
778    #[must_use]
779    pub fn with_indicated_air_speed(mut self, v: DapValue) -> Self {
780        self.0.indicated_air_speed = v;
781        self
782    }
783
784    #[must_use]
785    pub fn with_mach_number(mut self, v: DapValue) -> Self {
786        self.0.mach_number = v;
787        self
788    }
789
790    #[must_use]
791    pub fn with_ground_speed(mut self, v: DapValue) -> Self {
792        self.0.ground_speed = v;
793        self
794    }
795
796    #[must_use]
797    pub fn with_magnetic_heading(mut self, v: DapValue) -> Self {
798        self.0.magnetic_heading = v;
799        self
800    }
801
802    #[must_use]
803    pub fn with_track_angle_rate(mut self, v: DapValue) -> Self {
804        self.0.track_angle_rate = v;
805        self
806    }
807
808    #[must_use]
809    pub fn with_true_track_angle(mut self, v: DapValue) -> Self {
810        self.0.true_track_angle = v;
811        self
812    }
813
814    #[must_use]
815    pub fn with_true_airspeed(mut self, v: DapValue) -> Self {
816        self.0.true_airspeed = v;
817        self
818    }
819
820    #[must_use]
821    pub fn with_vertical_rate(mut self, v: DapValue) -> Self {
822        self.0.vertical_rate = v;
823        self
824    }
825
826    #[must_use]
827    pub fn build(self) -> DapSource {
828        self.0
829    }
830}
831
832pub struct EnhancedMode1CodeBuilder(EnhancedMode1Code);
833
834impl Default for EnhancedMode1CodeBuilder {
835    fn default() -> Self {
836        Self::new()
837    }
838}
839
840impl EnhancedMode1CodeBuilder {
841    #[must_use]
842    pub fn new() -> Self {
843        Self(EnhancedMode1Code::default())
844    }
845
846    #[must_use]
847    pub fn with_code_element_1_d(mut self, v: u16) -> Self {
848        self.0.code_element_1_d = v;
849        self
850    }
851
852    #[must_use]
853    pub fn with_code_element_2_c(mut self, v: u16) -> Self {
854        self.0.code_element_2_c = v;
855        self
856    }
857
858    #[must_use]
859    pub fn with_code_element_3_b(mut self, v: u16) -> Self {
860        self.0.code_element_3_b = v;
861        self
862    }
863
864    #[must_use]
865    pub fn with_code_element_4_a(mut self, v: u16) -> Self {
866        self.0.code_element_4_a = v;
867        self
868    }
869
870    #[must_use]
871    pub fn with_on_off_status(mut self, v: OnOffStatus) -> Self {
872        self.0.on_off_status = v;
873        self
874    }
875
876    #[must_use]
877    pub fn with_damage_status(mut self, v: DamageStatus) -> Self {
878        self.0.damage_status = v;
879        self
880    }
881
882    #[must_use]
883    pub fn with_malfunction_status(mut self, v: MalfunctionStatus) -> Self {
884        self.0.malfunction_status = v;
885        self
886    }
887
888    #[must_use]
889    pub fn build(self) -> EnhancedMode1Code {
890        self.0
891    }
892}
893
894pub struct Mode5InterrogatorBasicDataBuilder(Mode5InterrogatorBasicData);
895
896impl Default for Mode5InterrogatorBasicDataBuilder {
897    fn default() -> Self {
898        Self::new()
899    }
900}
901
902impl Mode5InterrogatorBasicDataBuilder {
903    #[must_use]
904    pub fn new() -> Self {
905        Self(Mode5InterrogatorBasicData::default())
906    }
907
908    #[must_use]
909    pub fn with_status(mut self, v: Mode5InterrogatorStatus) -> Self {
910        self.0.status = v;
911        self
912    }
913
914    #[must_use]
915    pub fn with_mode_5_message_formats_present(mut self, v: Mode5MessageFormats) -> Self {
916        self.0.mode_5_message_formats_present = v;
917        self
918    }
919
920    #[must_use]
921    pub fn with_interrogated_entity_id(mut self, v: EntityId) -> Self {
922        self.0.interrogated_entity_id = v;
923        self
924    }
925
926    #[must_use]
927    pub fn build(self) -> Mode5InterrogatorBasicData {
928        self.0
929    }
930}
931
932pub struct Mode5InterrogatorStatusBuilder(Mode5InterrogatorStatus);
933
934impl Default for Mode5InterrogatorStatusBuilder {
935    fn default() -> Self {
936        Self::new()
937    }
938}
939
940impl Mode5InterrogatorStatusBuilder {
941    #[must_use]
942    pub fn new() -> Self {
943        Self(Mode5InterrogatorStatus::default())
944    }
945
946    #[must_use]
947    pub fn with_iff_mission(mut self, v: Mode5IffMission) -> Self {
948        self.0.iff_mission = v;
949        self
950    }
951
952    #[must_use]
953    pub fn with_mode_5_message_formats_status(mut self, v: Mode5MessageFormatsStatus) -> Self {
954        self.0.mode_5_message_formats_status = v;
955        self
956    }
957
958    #[must_use]
959    pub fn with_on_off_status(mut self, v: OnOffStatus) -> Self {
960        self.0.on_off_status = v;
961        self
962    }
963
964    #[must_use]
965    pub fn with_damage_status(mut self, v: DamageStatus) -> Self {
966        self.0.damage_status = v;
967        self
968    }
969
970    #[must_use]
971    pub fn with_malfunction_status(mut self, v: MalfunctionStatus) -> Self {
972        self.0.malfunction_status = v;
973        self
974    }
975
976    #[must_use]
977    pub fn build(self) -> Mode5InterrogatorStatus {
978        self.0
979    }
980}
981
982pub struct Mode5MessageFormatsBuilder(Mode5MessageFormats);
983
984impl Default for Mode5MessageFormatsBuilder {
985    fn default() -> Self {
986        Self::new()
987    }
988}
989
990impl Mode5MessageFormatsBuilder {
991    #[must_use]
992    pub fn new() -> Self {
993        Self(Mode5MessageFormats::default())
994    }
995
996    #[must_use]
997    pub fn with_message_format_0(mut self, v: IffPresence) -> Self {
998        self.0.message_format_0 = v;
999        self
1000    }
1001
1002    #[must_use]
1003    pub fn with_message_format_1(mut self, v: IffPresence) -> Self {
1004        self.0.message_format_1 = v;
1005        self
1006    }
1007
1008    #[must_use]
1009    pub fn with_message_format_2(mut self, v: IffPresence) -> Self {
1010        self.0.message_format_2 = v;
1011        self
1012    }
1013
1014    #[must_use]
1015    pub fn with_message_format_3(mut self, v: IffPresence) -> Self {
1016        self.0.message_format_3 = v;
1017        self
1018    }
1019
1020    #[must_use]
1021    pub fn with_message_format_4(mut self, v: IffPresence) -> Self {
1022        self.0.message_format_4 = v;
1023        self
1024    }
1025
1026    #[must_use]
1027    pub fn with_message_format_5(mut self, v: IffPresence) -> Self {
1028        self.0.message_format_5 = v;
1029        self
1030    }
1031
1032    #[must_use]
1033    pub fn with_message_format_6(mut self, v: IffPresence) -> Self {
1034        self.0.message_format_6 = v;
1035        self
1036    }
1037
1038    #[must_use]
1039    pub fn with_message_format_7(mut self, v: IffPresence) -> Self {
1040        self.0.message_format_7 = v;
1041        self
1042    }
1043
1044    #[must_use]
1045    pub fn with_message_format_8(mut self, v: IffPresence) -> Self {
1046        self.0.message_format_8 = v;
1047        self
1048    }
1049
1050    #[must_use]
1051    pub fn with_message_format_9(mut self, v: IffPresence) -> Self {
1052        self.0.message_format_9 = v;
1053        self
1054    }
1055
1056    #[must_use]
1057    pub fn with_message_format_10(mut self, v: IffPresence) -> Self {
1058        self.0.message_format_10 = v;
1059        self
1060    }
1061
1062    #[must_use]
1063    pub fn with_message_format_11(mut self, v: IffPresence) -> Self {
1064        self.0.message_format_11 = v;
1065        self
1066    }
1067
1068    #[must_use]
1069    pub fn with_message_format_12(mut self, v: IffPresence) -> Self {
1070        self.0.message_format_12 = v;
1071        self
1072    }
1073
1074    #[must_use]
1075    pub fn with_message_format_13(mut self, v: IffPresence) -> Self {
1076        self.0.message_format_13 = v;
1077        self
1078    }
1079
1080    #[must_use]
1081    pub fn with_message_format_14(mut self, v: IffPresence) -> Self {
1082        self.0.message_format_14 = v;
1083        self
1084    }
1085
1086    #[must_use]
1087    pub fn with_message_format_15(mut self, v: IffPresence) -> Self {
1088        self.0.message_format_15 = v;
1089        self
1090    }
1091
1092    #[must_use]
1093    pub fn with_message_format_16(mut self, v: IffPresence) -> Self {
1094        self.0.message_format_16 = v;
1095        self
1096    }
1097
1098    #[must_use]
1099    pub fn with_message_format_17(mut self, v: IffPresence) -> Self {
1100        self.0.message_format_17 = v;
1101        self
1102    }
1103
1104    #[must_use]
1105    pub fn with_message_format_18(mut self, v: IffPresence) -> Self {
1106        self.0.message_format_18 = v;
1107        self
1108    }
1109
1110    #[must_use]
1111    pub fn with_message_format_19(mut self, v: IffPresence) -> Self {
1112        self.0.message_format_19 = v;
1113        self
1114    }
1115
1116    #[must_use]
1117    pub fn with_message_format_20(mut self, v: IffPresence) -> Self {
1118        self.0.message_format_20 = v;
1119        self
1120    }
1121
1122    #[must_use]
1123    pub fn with_message_format_21(mut self, v: IffPresence) -> Self {
1124        self.0.message_format_21 = v;
1125        self
1126    }
1127
1128    #[must_use]
1129    pub fn with_message_format_22(mut self, v: IffPresence) -> Self {
1130        self.0.message_format_22 = v;
1131        self
1132    }
1133
1134    #[must_use]
1135    pub fn with_message_format_23(mut self, v: IffPresence) -> Self {
1136        self.0.message_format_23 = v;
1137        self
1138    }
1139
1140    #[must_use]
1141    pub fn with_message_format_24(mut self, v: IffPresence) -> Self {
1142        self.0.message_format_24 = v;
1143        self
1144    }
1145
1146    #[must_use]
1147    pub fn with_message_format_25(mut self, v: IffPresence) -> Self {
1148        self.0.message_format_25 = v;
1149        self
1150    }
1151
1152    #[must_use]
1153    pub fn with_message_format_26(mut self, v: IffPresence) -> Self {
1154        self.0.message_format_26 = v;
1155        self
1156    }
1157
1158    #[must_use]
1159    pub fn with_message_format_27(mut self, v: IffPresence) -> Self {
1160        self.0.message_format_27 = v;
1161        self
1162    }
1163
1164    #[must_use]
1165    pub fn with_message_format_28(mut self, v: IffPresence) -> Self {
1166        self.0.message_format_28 = v;
1167        self
1168    }
1169
1170    #[must_use]
1171    pub fn with_message_format_29(mut self, v: IffPresence) -> Self {
1172        self.0.message_format_29 = v;
1173        self
1174    }
1175
1176    #[must_use]
1177    pub fn with_message_format_30(mut self, v: IffPresence) -> Self {
1178        self.0.message_format_30 = v;
1179        self
1180    }
1181
1182    #[must_use]
1183    pub fn with_message_format_31(mut self, v: IffPresence) -> Self {
1184        self.0.message_format_31 = v;
1185        self
1186    }
1187
1188    #[must_use]
1189    pub fn build(self) -> Mode5MessageFormats {
1190        self.0
1191    }
1192}
1193
1194pub struct Mode5TransponderBasicDataBuilder(Mode5TransponderBasicData);
1195
1196impl Default for Mode5TransponderBasicDataBuilder {
1197    fn default() -> Self {
1198        Self::new()
1199    }
1200}
1201
1202impl Mode5TransponderBasicDataBuilder {
1203    #[must_use]
1204    pub fn new() -> Self {
1205        Self(Mode5TransponderBasicData::default())
1206    }
1207
1208    #[must_use]
1209    pub fn with_status(mut self, v: Mode5TransponderStatus) -> Self {
1210        self.0.status = v;
1211        self
1212    }
1213
1214    #[must_use]
1215    pub fn with_pin(mut self, v: u16) -> Self {
1216        self.0.pin = v;
1217        self
1218    }
1219
1220    #[must_use]
1221    pub fn with_mode_5_message_formats_present(mut self, v: Mode5MessageFormats) -> Self {
1222        self.0.mode_5_message_formats_present = v;
1223        self
1224    }
1225
1226    #[must_use]
1227    pub fn with_enhanced_mode_1(mut self, v: EnhancedMode1Code) -> Self {
1228        self.0.enhanced_mode_1 = v;
1229        self
1230    }
1231
1232    #[must_use]
1233    pub fn with_national_origin(mut self, v: u16) -> Self {
1234        self.0.national_origin = v;
1235        self
1236    }
1237
1238    #[must_use]
1239    pub fn with_supplemental_data(mut self, v: Mode5TransponderSupplementalData) -> Self {
1240        self.0.supplemental_data = v;
1241        self
1242    }
1243
1244    #[must_use]
1245    pub fn with_navigation_source(mut self, v: NavigationSource) -> Self {
1246        self.0.navigation_source = v;
1247        self
1248    }
1249
1250    #[must_use]
1251    pub fn with_figure_of_merit(mut self, v: u8) -> Self {
1252        self.0.figure_of_merit = v;
1253        self
1254    }
1255
1256    #[must_use]
1257    pub fn build(self) -> Mode5TransponderBasicData {
1258        self.0
1259    }
1260}
1261
1262pub struct Mode5TransponderSupplementalDataBuilder(Mode5TransponderSupplementalData);
1263
1264impl Default for Mode5TransponderSupplementalDataBuilder {
1265    fn default() -> Self {
1266        Self::new()
1267    }
1268}
1269
1270impl Mode5TransponderSupplementalDataBuilder {
1271    #[must_use]
1272    pub fn new() -> Self {
1273        Self(Mode5TransponderSupplementalData::default())
1274    }
1275
1276    #[must_use]
1277    pub fn with_squitter_on_off_status(mut self, v: SquitterStatus) -> Self {
1278        self.0.squitter_on_off_status = v;
1279        self
1280    }
1281
1282    #[must_use]
1283    pub fn with_level_2_squitter_status(mut self, v: Level2SquitterStatus) -> Self {
1284        self.0.level_2_squitter_status = v;
1285        self
1286    }
1287
1288    #[must_use]
1289    pub fn with_iff_mission(mut self, v: Mode5IffMission) -> Self {
1290        self.0.iff_mission = v;
1291        self
1292    }
1293
1294    #[must_use]
1295    pub fn build(self) -> Mode5TransponderSupplementalData {
1296        self.0
1297    }
1298}
1299
1300pub struct Mode5TransponderStatusBuilder(Mode5TransponderStatus);
1301
1302impl Default for Mode5TransponderStatusBuilder {
1303    fn default() -> Self {
1304        Self::new()
1305    }
1306}
1307
1308impl Mode5TransponderStatusBuilder {
1309    #[must_use]
1310    pub fn new() -> Self {
1311        Self(Mode5TransponderStatus::default())
1312    }
1313
1314    #[must_use]
1315    pub fn with_mode_5_reply(mut self, v: Mode5Reply) -> Self {
1316        self.0.mode_5_reply = v;
1317        self
1318    }
1319
1320    #[must_use]
1321    pub fn with_line_test(mut self, v: EnabledStatus) -> Self {
1322        self.0.line_test = v;
1323        self
1324    }
1325
1326    #[must_use]
1327    pub fn with_antenna_selection(mut self, v: AntennaSelection) -> Self {
1328        self.0.antenna_selection = v;
1329        self
1330    }
1331
1332    #[must_use]
1333    pub fn with_crypto_control(mut self, v: IffPresence) -> Self {
1334        self.0.crypto_control = v;
1335        self
1336    }
1337
1338    #[must_use]
1339    pub fn with_lat_lon_alt_source(mut self, v: LatLonAltSource) -> Self {
1340        self.0.lat_lon_alt_source = v;
1341        self
1342    }
1343
1344    #[must_use]
1345    pub fn with_location_errors(mut self, v: Mode5LocationErrors) -> Self {
1346        self.0.location_errors = v;
1347        self
1348    }
1349
1350    #[must_use]
1351    pub fn with_platform_type(mut self, v: Mode5PlatformType) -> Self {
1352        self.0.platform_type = v;
1353        self
1354    }
1355
1356    #[must_use]
1357    pub fn with_mode_5_level_selection(mut self, v: Mode5LevelSelection) -> Self {
1358        self.0.mode_5_level_selection = v;
1359        self
1360    }
1361
1362    #[must_use]
1363    pub fn with_on_off_status(mut self, v: OnOffStatus) -> Self {
1364        self.0.on_off_status = v;
1365        self
1366    }
1367
1368    #[must_use]
1369    pub fn with_damage_status(mut self, v: DamageStatus) -> Self {
1370        self.0.damage_status = v;
1371        self
1372    }
1373
1374    #[must_use]
1375    pub fn with_malfunction_status(mut self, v: MalfunctionStatus) -> Self {
1376        self.0.malfunction_status = v;
1377        self
1378    }
1379
1380    #[must_use]
1381    pub fn build(self) -> Mode5TransponderStatus {
1382        self.0
1383    }
1384}
1385
1386pub struct ModeSAltitudeBuilder(ModeSAltitude);
1387
1388impl Default for ModeSAltitudeBuilder {
1389    fn default() -> Self {
1390        Self::new()
1391    }
1392}
1393
1394impl ModeSAltitudeBuilder {
1395    #[must_use]
1396    pub fn new() -> Self {
1397        Self(ModeSAltitude::default())
1398    }
1399
1400    #[must_use]
1401    pub fn with_altitude(mut self, v: u16) -> Self {
1402        self.0.altitude = v;
1403        self
1404    }
1405
1406    #[must_use]
1407    pub fn with_resolution(mut self, v: Mode5SAltitudeResolution) -> Self {
1408        self.0.resolution = v;
1409        self
1410    }
1411
1412    #[must_use]
1413    pub fn build(self) -> ModeSAltitude {
1414        self.0
1415    }
1416}
1417
1418pub struct ModeSInterrogatorBasicDataBuilder(ModeSInterrogatorBasicData);
1419
1420impl Default for ModeSInterrogatorBasicDataBuilder {
1421    fn default() -> Self {
1422        Self::new()
1423    }
1424}
1425
1426impl ModeSInterrogatorBasicDataBuilder {
1427    #[must_use]
1428    pub fn new() -> Self {
1429        Self(ModeSInterrogatorBasicData::default())
1430    }
1431
1432    #[must_use]
1433    pub fn with_mode_s_interrogator_status(mut self, v: ModeSInterrogatorStatus) -> Self {
1434        self.0.mode_s_interrogator_status = v;
1435        self
1436    }
1437
1438    #[must_use]
1439    pub fn with_mode_s_levels_present(mut self, v: ModeSLevelsPresent) -> Self {
1440        self.0.mode_s_levels_present = v;
1441        self
1442    }
1443
1444    #[must_use]
1445    pub fn build(self) -> ModeSInterrogatorBasicData {
1446        self.0
1447    }
1448}
1449
1450pub struct ModeSInterrogatorStatusBuilder(ModeSInterrogatorStatus);
1451
1452impl Default for ModeSInterrogatorStatusBuilder {
1453    fn default() -> Self {
1454        Self::new()
1455    }
1456}
1457
1458impl ModeSInterrogatorStatusBuilder {
1459    #[must_use]
1460    pub fn new() -> Self {
1461        Self(ModeSInterrogatorStatus::default())
1462    }
1463
1464    #[must_use]
1465    pub fn with_on_off_status(mut self, v: OnOffStatus) -> Self {
1466        self.0.on_off_status = v;
1467        self
1468    }
1469
1470    #[must_use]
1471    pub fn with_transmit_state(mut self, v: ModeSTransmitState) -> Self {
1472        self.0.transmit_state = v;
1473        self
1474    }
1475
1476    #[must_use]
1477    pub fn with_damage_status(mut self, v: DamageStatus) -> Self {
1478        self.0.damage_status = v;
1479        self
1480    }
1481
1482    #[must_use]
1483    pub fn with_malfunction_status(mut self, v: MalfunctionStatus) -> Self {
1484        self.0.malfunction_status = v;
1485        self
1486    }
1487
1488    #[must_use]
1489    pub fn build(self) -> ModeSInterrogatorStatus {
1490        self.0
1491    }
1492}
1493
1494pub struct ModeSLevelsPresentBuilder(ModeSLevelsPresent);
1495
1496impl Default for ModeSLevelsPresentBuilder {
1497    fn default() -> Self {
1498        Self::new()
1499    }
1500}
1501
1502impl ModeSLevelsPresentBuilder {
1503    #[must_use]
1504    pub fn new() -> Self {
1505        Self(ModeSLevelsPresent::default())
1506    }
1507
1508    #[must_use]
1509    pub fn with_level_1(mut self, v: IffPresence) -> Self {
1510        self.0.level_1 = v;
1511        self
1512    }
1513
1514    #[must_use]
1515    pub fn with_level_2_els(mut self, v: IffPresence) -> Self {
1516        self.0.level_2_els = v;
1517        self
1518    }
1519
1520    #[must_use]
1521    pub fn with_level_2_ehs(mut self, v: IffPresence) -> Self {
1522        self.0.level_2_ehs = v;
1523        self
1524    }
1525
1526    #[must_use]
1527    pub fn with_level_3(mut self, v: IffPresence) -> Self {
1528        self.0.level_3 = v;
1529        self
1530    }
1531
1532    #[must_use]
1533    pub fn with_level_4(mut self, v: IffPresence) -> Self {
1534        self.0.level_4 = v;
1535        self
1536    }
1537
1538    #[must_use]
1539    pub fn build(self) -> ModeSLevelsPresent {
1540        self.0
1541    }
1542}
1543
1544pub struct ModeSTransponderBasicDataBuilder(ModeSTransponderBasicData);
1545
1546impl Default for ModeSTransponderBasicDataBuilder {
1547    fn default() -> Self {
1548        Self::new()
1549    }
1550}
1551
1552impl ModeSTransponderBasicDataBuilder {
1553    #[must_use]
1554    pub fn new() -> Self {
1555        Self(ModeSTransponderBasicData::default())
1556    }
1557
1558    #[must_use]
1559    pub fn with_status(mut self, v: ModeSTransponderStatus) -> Self {
1560        self.0.status = v;
1561        self
1562    }
1563
1564    #[must_use]
1565    pub fn with_levels_present(mut self, v: ModeSLevelsPresent) -> Self {
1566        self.0.levels_present = v;
1567        self
1568    }
1569
1570    #[must_use]
1571    pub fn with_aircraft_present_domain(mut self, v: AircraftPresentDomain) -> Self {
1572        self.0.aircraft_present_domain = v;
1573        self
1574    }
1575
1576    #[must_use]
1577    pub fn with_aircraft_identification(mut self, v: String) -> Self {
1578        self.0.aircraft_identification = v;
1579        self
1580    }
1581
1582    #[must_use]
1583    pub fn with_aircraft_address(mut self, v: u32) -> Self {
1584        self.0.aircraft_address = v;
1585        self
1586    }
1587
1588    #[must_use]
1589    pub fn with_aircraft_identification_type(mut self, v: AircraftIdentificationType) -> Self {
1590        self.0.aircraft_identification_type = v;
1591        self
1592    }
1593
1594    #[must_use]
1595    pub fn with_dap_source(mut self, v: DapSource) -> Self {
1596        self.0.dap_source = v;
1597        self
1598    }
1599
1600    #[must_use]
1601    pub fn with_altitude(mut self, v: ModeSAltitude) -> Self {
1602        self.0.altitude = v;
1603        self
1604    }
1605
1606    #[must_use]
1607    pub fn with_capability_report(mut self, v: CapabilityReport) -> Self {
1608        self.0.capability_report = v;
1609        self
1610    }
1611
1612    #[must_use]
1613    pub fn build(self) -> ModeSTransponderBasicData {
1614        self.0
1615    }
1616}
1617
1618pub struct ModeSTransponderStatusBuilder(ModeSTransponderStatus);
1619
1620impl Default for ModeSTransponderStatusBuilder {
1621    fn default() -> Self {
1622        Self::new()
1623    }
1624}
1625
1626impl ModeSTransponderStatusBuilder {
1627    #[must_use]
1628    pub fn new() -> Self {
1629        Self(ModeSTransponderStatus::default())
1630    }
1631
1632    #[must_use]
1633    pub fn with_squitter_status(mut self, v: SquitterStatus) -> Self {
1634        self.0.squitter_status = v;
1635        self
1636    }
1637
1638    #[must_use]
1639    pub fn with_squitter_type(mut self, v: ModeSSquitterType) -> Self {
1640        self.0.squitter_type = v;
1641        self
1642    }
1643
1644    #[must_use]
1645    pub fn with_squitter_record_source(mut self, v: ModeSSquitterRecordSource) -> Self {
1646        self.0.squitter_record_source = v;
1647        self
1648    }
1649
1650    #[must_use]
1651    pub fn with_airborne_position_report_indicator(mut self, v: IffPresence) -> Self {
1652        self.0.airborne_position_report_indicator = v;
1653        self
1654    }
1655
1656    #[must_use]
1657    pub fn with_airborne_velocity_report_indicator(mut self, v: IffPresence) -> Self {
1658        self.0.airborne_velocity_report_indicator = v;
1659        self
1660    }
1661
1662    #[must_use]
1663    pub fn with_surface_position_report_indicator(mut self, v: IffPresence) -> Self {
1664        self.0.surface_position_report_indicator = v;
1665        self
1666    }
1667
1668    #[must_use]
1669    pub fn with_identification_report_indicator(mut self, v: IffPresence) -> Self {
1670        self.0.identification_report_indicator = v;
1671        self
1672    }
1673
1674    #[must_use]
1675    pub fn with_event_driven_report_indicator(mut self, v: IffPresence) -> Self {
1676        self.0.event_driven_report_indicator = v;
1677        self
1678    }
1679
1680    #[must_use]
1681    pub fn with_on_off_status(mut self, v: OnOffStatus) -> Self {
1682        self.0.on_off_status = v;
1683        self
1684    }
1685
1686    #[must_use]
1687    pub fn with_damage_status(mut self, v: DamageStatus) -> Self {
1688        self.0.damage_status = v;
1689        self
1690    }
1691
1692    #[must_use]
1693    pub fn with_malfunction_status(mut self, v: MalfunctionStatus) -> Self {
1694        self.0.malfunction_status = v;
1695        self
1696    }
1697
1698    #[must_use]
1699    pub fn build(self) -> ModeSTransponderStatus {
1700        self.0
1701    }
1702}
1703
1704pub struct SystemStatusBuilder(SystemStatus);
1705
1706impl Default for SystemStatusBuilder {
1707    fn default() -> Self {
1708        Self::new()
1709    }
1710}
1711
1712impl SystemStatusBuilder {
1713    #[must_use]
1714    pub fn new() -> Self {
1715        Self(SystemStatus::default())
1716    }
1717
1718    #[must_use]
1719    pub fn with_system_on_off_status(mut self, v: OnOffStatus) -> Self {
1720        self.0.system_on_off_status = v;
1721        self
1722    }
1723
1724    #[must_use]
1725    pub fn with_parameter_1_capable(mut self, v: ParameterCapable) -> Self {
1726        self.0.parameter_1_capable = v;
1727        self
1728    }
1729
1730    #[must_use]
1731    pub fn with_parameter_2_capable(mut self, v: ParameterCapable) -> Self {
1732        self.0.parameter_2_capable = v;
1733        self
1734    }
1735
1736    #[must_use]
1737    pub fn with_parameter_3_capable(mut self, v: ParameterCapable) -> Self {
1738        self.0.parameter_3_capable = v;
1739        self
1740    }
1741
1742    #[must_use]
1743    pub fn with_parameter_4_capable(mut self, v: ParameterCapable) -> Self {
1744        self.0.parameter_4_capable = v;
1745        self
1746    }
1747
1748    #[must_use]
1749    pub fn with_parameter_5_capable(mut self, v: ParameterCapable) -> Self {
1750        self.0.parameter_5_capable = v;
1751        self
1752    }
1753
1754    #[must_use]
1755    pub fn with_parameter_6_capable(mut self, v: ParameterCapable) -> Self {
1756        self.0.parameter_6_capable = v;
1757        self
1758    }
1759
1760    #[must_use]
1761    pub fn with_operational_status(mut self, v: OperationalStatus) -> Self {
1762        self.0.operational_status = v;
1763        self
1764    }
1765
1766    #[must_use]
1767    pub fn build(self) -> SystemStatus {
1768        self.0
1769    }
1770}