open_dis_rust/common/
enums.rs

1//     open-dis-rust - Rust implementation of the IEEE 1278.1-2012 Distributed Interactive
2//                     Simulation (DIS) application protocol
3//     Copyright (C) 2025 Cameron Howell
4//
5//     Licensed under the BSD 2-Clause License
6
7#![allow(deprecated)]
8
9use bitflags::bitflags;
10use bytes::{Buf, BufMut, BytesMut};
11use modular_bitfield::Specifier;
12use num_derive::FromPrimitive;
13use num_traits::FromPrimitive;
14
15use crate::pdu_macro::{FieldDeserialize, FieldLen, FieldSerialize};
16
17// SISO-REF-010-2023 Protocol Version [UID 3]
18#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
19#[allow(non_camel_case_types)]
20pub enum ProtocolVersion {
21    Other = 0,
22    DIS_PDUv1 = 1,
23    IEEE1278_1993 = 2,
24    DIS_PDUv2_Third_Draft = 3,
25    DIS_PDUv2_Fourth_Draft_Revised = 4,
26    IEEE1278_1_1995 = 5,
27    IEEE1278_1A_1998 = 6,
28    #[default]
29    IEEE1278_1_2012 = 7,
30}
31
32impl ProtocolVersion {
33    #[must_use]
34    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
35        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
36    }
37}
38
39// SISO-REF-010-2023 PDU Type [UID 4]
40#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
41pub enum PduType {
42    #[default]
43    Other = 0,
44    EntityState = 1,
45    Fire = 2,
46    Detonation = 3,
47    Collision = 4,
48    ServiceRequest = 5,
49    ResupplyOffer = 6,
50    ResupplyReceived = 7,
51    ResupplyCancel = 8,
52    RepairComplete = 9,
53    RepairResponse = 10,
54    CreateEntity = 11,
55    RemoveEntity = 12,
56    StartResume = 13,
57    StopFreeze = 14,
58    Acknowledge = 15,
59    ActionRequest = 16,
60    ActionResponse = 17,
61    DataQuery = 18,
62    SetData = 19,
63    Data = 20,
64    EventReport = 21,
65    Comment = 22,
66    ElectromagneticEmission = 23,
67    Designator = 24,
68    Transmitter = 25,
69    Signal = 26,
70    Receiver = 27,
71    IFF = 28,
72    UnderwaterAcoustic = 29,
73    SupplementalEmission = 30,
74    IntercomSignal = 31,
75    IntercomControl = 32,
76    AggregateState = 33,
77    IsGroupOf = 34,
78    TransferOwnership = 35,
79    IsPartOf = 36,
80    MinefieldState = 37,
81    MinefieldQuery = 38,
82    MinefieldData = 39,
83    MinefieldResponseNack = 40,
84    EnvironmentalProcess = 41,
85    GriddedData = 42,
86    PointObjectState = 43,
87    LinearObjectState = 44,
88    ArealObjectState = 45,
89    TimeSpacePositionInformation = 46,
90    Appearance = 47,
91    ArticulatedParts = 48,
92    LiveEntityFire = 49,
93    LiveEntityDetonation = 50,
94    CreateEntityReliable = 51,
95    RemoveEntityReliable = 52,
96    StartResumeReliable = 53,
97    StopFreezeReliable = 54,
98    AcknowledgeReliable = 55,
99    ActionRequestReliable = 56,
100    ActionResponseReliable = 57,
101    DataQueryReliable = 58,
102    SetDataReliable = 59,
103    DataReliable = 60,
104    EventReportReliable = 61,
105    CommentReliable = 62,
106    RecordReliable = 63,
107    SetRecordReliable = 64,
108    RecordQueryReliable = 65,
109    CollisionElastic = 66,
110    EntityStateUpdate = 67,
111    DirectedEnergyFire = 68,
112    EntityDamageStatus = 69,
113    InformationOperationsAction = 70,
114    InformationOperationsReport = 71,
115    Attribute = 72,
116}
117
118impl PduType {
119    #[must_use]
120    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
121        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
122    }
123}
124
125// SISO-REF-010-2023 Protocol Family [UID 5]
126#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
127pub enum ProtocolFamily {
128    #[default]
129    Other = 0,
130    EntityInformation = 1,
131    Warfare = 2,
132    Logistics = 3,
133    RadioCommunications = 4,
134    SimulationManagement = 5,
135    DistributedEmissionRegeneration = 6,
136    EntityManagement = 7,
137    Minefield = 8,
138    SyntheticEnvironment = 9,
139    SimulationManagementWithReliability = 10,
140    LiveEntityInformationInteraction = 11,
141    NonRealTime = 12,
142    InformationOperations = 13,
143}
144
145impl ProtocolFamily {
146    #[must_use]
147    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
148        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
149    }
150}
151
152// SISO-REF-010-2023 Force ID [UID 6]
153#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
154pub enum ForceId {
155    #[default]
156    Other = 0,
157    Friendly = 1,
158    Opposing = 2,
159    Neutral = 3,
160    Friendly2 = 4,
161    Opposing2 = 5,
162    Neutral2 = 6,
163    Friendly3 = 7,
164    Opposing3 = 8,
165    Neutral3 = 9,
166    Friendly4 = 10,
167    Opposing4 = 11,
168    Neutral4 = 12,
169    Friendly5 = 13,
170    Opposing5 = 14,
171    Neutral5 = 15,
172    Friendly6 = 16,
173    Opposing6 = 17,
174    Neutral6 = 18,
175    Friendly7 = 19,
176    Opposing7 = 20,
177    Neutral7 = 21,
178    Friendly8 = 22,
179    Opposing8 = 23,
180    Neutral8 = 24,
181    Friendly9 = 25,
182    Opposing9 = 26,
183    Neutral9 = 27,
184    Friendly10 = 28,
185    Opposing10 = 29,
186    Neutral10 = 30,
187}
188
189impl ForceId {
190    #[must_use]
191    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
192        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
193    }
194}
195
196impl FieldSerialize for ForceId {
197    fn serialize_field(&self, buf: &mut BytesMut) {
198        buf.put_u8(*self as u8);
199    }
200}
201
202impl FieldDeserialize for ForceId {
203    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
204        Self::deserialize(buf)
205    }
206}
207
208impl FieldLen for ForceId {
209    fn field_len(&self) -> usize {
210        1
211    }
212}
213
214// SISO-REF-010-2023 Entity Kind [UID 7]
215#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
216pub enum EntityKind {
217    #[default]
218    Other = 0,
219    Platform = 1,
220    Munition = 2,
221    LifeForm = 3,
222    Environmental = 4,
223    CulturalFeature = 5,
224    Supply = 6,
225    Radio = 7,
226    Expendable = 8,
227    SensorEmitter = 9,
228}
229
230impl EntityKind {
231    #[must_use]
232    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
233        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
234    }
235}
236
237// SISO-REF-010-2023 Other Kinds [UID 8]
238#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
239pub enum OtherKinds {
240    #[default]
241    Other = 0,
242    Land = 1,
243    Air = 2,
244    Surface = 3,
245    Subsurface = 4,
246    Space = 5,
247}
248
249impl OtherKinds {
250    #[must_use]
251    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
252        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
253    }
254}
255
256// SISO-REF-010-2023 Land Domain Categories [UID 9]
257#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
258pub enum LandDomainCategories {
259    #[default]
260    Other = 0,
261    Tank = 1,
262    ArmoredFightingVehicle,
263    ArmoredUtilityVehicle,
264    SelfPropelledArtillery,
265    TowedArtillery,
266    SmallWheeledUtilityVehicle,
267    LargeWheeledUtilityVehicle,
268    SmallTrackedUtilityVehicle,
269    LargeTrackedUtilityVehicle,
270    Mortar,
271    MinePlow,
272    MineRake,
273    MineRoller,
274    CargoTrailer,
275    FuelTrailer,
276    GeneratorTrailer,
277    WaterTrailer,
278    EngineerEquipment,
279    HeavyEquipmentTransportTrailer,
280    MaintenanceEquipmentTrailer,
281    Limber,
282    ChemicalDecontaminationTrailer,
283    WarningSystem,
284    TrainEngine,
285    TrainCar,
286    TrainCaboose,
287    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
288    CivilianVehicle,
289    AirDefenseMissileDefenseUnitEquipment,
290    C3ISystem,
291    OperationsFacility,
292    IntelligenceFacility,
293    SurveillanceFacility,
294    CommunicationsFacility,
295    CommandFacility,
296    C4IFacility,
297    ControlFacility,
298    FireControlFacility,
299    MissileDefenseFacility,
300    FieldCommandPost,
301    ObservationPost,
302    MineFlail = 41,
303    Unmanned = 50,
304    Motorcycle = 80,
305    Car = 81,
306    Bus,
307    SingleUnitCargoTruck,
308    SingleUnitUtilityEmergencyTruck,
309    MultipleUnitCargoTruck,
310    MultipleUnitUtilityEmergencyTruck,
311    ConstructionSpecialtyVehicle,
312    FarmSpecialtyVehicle,
313    Trailer,
314    Recreational,
315    NonMotorized,
316    Trains,
317    UtilityEmergencyCar,
318}
319
320impl LandDomainCategories {
321    #[must_use]
322    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
323        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
324    }
325}
326
327// SISO-REF-010-2023 Air Domain Categories [UID 10]
328#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
329pub enum AirDomainCategories {
330    #[default]
331    Other = 0,
332    FighterAirDefense = 1,
333    AttackStrike = 2,
334    Bomber = 3,
335    CargoTanker = 4,
336    ASWPatrolObservation = 5,
337    ElectronicWarfare = 6,
338    Reconnaissance = 7,
339    SurveillanceC2 = 8,
340    AirSeaRescue = 9,
341    AttackHelicopter = 20,
342    UtilityHelicopter = 21,
343    AntiSubmarineWarfarePatrolHelicopter = 22,
344    CargoHelicopter = 23,
345    ObservationHelicopter = 24,
346    SpecialOperationsHelicopter = 25,
347    TrainingHelicopter = 26,
348    Trainer = 40,
349    Unmanned = 50,
350    NonCombatantCommercialAircraft = 57,
351    CivilianUltralightAircraftNonrigidWing = 80,
352    CivilianUltralightAircraftRigidWing = 81,
353    CivilianFixedWingAircraftGlider = 83,
354    CivilianFixedWingAircraftLightSport = 84,
355    CivilianFixedWingAircraftSmall = 85,
356    CivilianFixedWingAircraftMedium = 86,
357    CivilianFixedWingAircraftLarge = 87,
358    CivilianFixedWingAircraftHeavy = 88,
359    CivilianHelicopterSmall = 90,
360    CivilianHelicopterMedium = 91,
361    CivilianHelicopterLarge = 92,
362    CivilianAutogyro = 93,
363    CivilianLighterthanAirBalloon = 100,
364    CivilianLighterthanAirAirship = 101,
365}
366
367impl AirDomainCategories {
368    #[must_use]
369    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
370        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
371    }
372}
373
374// SISO-REF-010-2023 Surface Domain Categories [UID 11]
375#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
376pub enum SurfaceDomainCategories {
377    #[default]
378    Other = 0,
379    Carrier = 1,
380    CommandShipCruiser = 2,
381    GuidedMissileCruiser = 3,
382    GuidedMissileDestroyer = 4,
383    Destroyer = 5,
384    GuidedMissileFrigate = 6,
385    LightPatrolCraft = 7,
386    MineCountermeasureShipCraft = 8,
387    DockLandingShip = 9,
388    TankLandingShip = 10,
389    LandingCraft = 11,
390    LightCarrier = 12,
391    CruiserHelicopterCarrier = 13,
392    Hydrofoil = 14,
393    AirCushionSurfaceEffect = 15,
394    Auxiliary = 16,
395    AuxiliaryMerchantMarine = 17,
396    Utility = 18,
397    UnmannedSurfaceVehicle = 19,
398    LittoralCombatShips = 20,
399    SurveillanceShip = 21,
400    Frigate = 50,
401    Battleship = 51,
402    HeavyCruiser = 52,
403    DestroyerTender = 53,
404    AmphibiousAssaultShip = 54,
405    AmphibiousCargoShip = 55,
406    AmphibiousTransportDock = 56,
407    AmmunitionShip = 57,
408    CombatStoresShip = 58,
409    SurveillanceTowedArraySonarSystem = 59,
410    FastCombatSupportShip = 60,
411    NonCombatantShip = 61,
412    CoastGuardCutters = 62,
413    CoastGuardBoats = 63,
414    FastAttackCraft = 64,
415    InflatableBoat = 65,
416    PassengerVessel = 80,
417    DryCargoShip = 81,
418    Tanker = 82,
419    OffshoreSupportVessel = 83,
420    PrivateMotorboat = 84,
421    PrivateSailboat = 85,
422    FishingVessel = 86,
423    OtherVessels = 87,
424    SearchandRescueVessels = 100,
425    LifeSavingEquipment = 101,
426}
427
428impl SurfaceDomainCategories {
429    #[must_use]
430    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
431        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
432    }
433}
434
435// SISO-REF-010-2023 Subsurface Domain Categories [UID 12]
436#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
437pub enum SubsurfaceDomainCategories {
438    #[default]
439    Other = 0,
440    SSBN = 1,
441    SSGN = 2,
442    SSN = 3,
443    SSG = 4,
444    SS = 5,
445    SSAN = 6,
446    SSA = 7,
447    UnmannedUnderwaterVehicle = 8,
448    SSB = 9,
449    SSC = 10,
450    SSP = 11,
451    SSM = 12,
452    SSNR = 13,
453    SST = 14,
454    AGSS = 15,
455    SemiSubmersibleBoats = 16,
456    CivilianSubmarines = 80,
457    CivilianSubmersibles = 81,
458    CivilianSemiSubmersibleBoats = 82,
459}
460
461impl SubsurfaceDomainCategories {
462    #[must_use]
463    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
464        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
465    }
466}
467
468// SISO-REF-010-2023 SpaceDomainCategories [UID 13]
469#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
470pub enum SpaceDomainCategories {
471    #[default]
472    Other = 0,
473    MannedSpacecraft = 1,
474    Unmanned = 2,
475    Booster = 3,
476    Debris = 10,
477    SatelliteUnknownUnspecifiedMission = 11,
478    SatelliteCommunication = 12,
479    SatelliteNavigation = 13,
480    SatelliteScienceExperimentalDemonstration = 14,
481    SatelliteInert = 15,
482    SatelliteEarthObservation = 16,
483    SatelliteSpaceSurveillance = 17,
484    SatelliteAstronomy = 18,
485}
486
487impl SpaceDomainCategories {
488    #[must_use]
489    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
490        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
491    }
492}
493
494// SISO-REF-010-2023 MunitionKind [UID 14]
495#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
496pub enum MunitionKind {
497    #[default]
498    Other = 0,
499    AntiAir = 1,
500    AntiArmor = 2,
501    AntiGuidedWeapon = 3,
502    AntiRadar = 4,
503    AntiSatellite = 5,
504    AntiShip = 6,
505    AntiSubmarine = 7,
506    AntiPersonnel = 8,
507    BattlefieldSupport = 9,
508    Strategic = 10,
509    Tactical = 11,
510    DirectedEnergyWeapon = 12,
511}
512
513impl MunitionKind {
514    #[must_use]
515    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
516        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
517    }
518}
519
520// SISO-REF-010-2023 MunitionCategory [UID 15]
521#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
522pub enum MunitionCategory {
523    #[default]
524    Other = 0,
525    Guided = 1,
526    Ballistic = 2,
527    Fixed = 3,
528}
529
530impl MunitionCategory {
531    #[must_use]
532    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
533        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
534    }
535}
536
537// SISO-REF-010-2023 USWeaponSubcategories [UID 16]
538#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
539#[allow(non_camel_case_types)]
540pub enum USWeaponSubcategories {
541    #[default]
542    AssaultmachinepistolKFAMP = 1,
543    Automaticmodel1911A1_45 = 2,
544    CombatMasterMarkVI_45Detronics = 3,
545    DecockerKP90DC_45 = 4,
546    DecockerKP91DC_40 = 5,
547    GeneralofficersModel15_45 = 6,
548    Nova9mmLaFrance = 7,
549    PersonalDefenseWeaponMP5KPDW9mm = 8,
550    SilencedColt_45LaFrance = 9,
551    _5900series9mmSmithWessonSW = 10,
552    M9 = 11,
553    Model1911A1SpringfieldArmory = 12,
554    Model20009mm = 13,
555    P99mmSpringfieldArmory = 14,
556    P129mm = 15,
557    P85MarkII9mmRuger = 16,
558    AdvancedCombatRifle5_56mmAAI = 17,
559    CommandoassaultrifleModel7335_56mmColt = 18,
560    InfantryrifleMini1420GB5_56mmRuger = 19,
561    Mini145_56mmRuger = 20,
562    MiniThirty7_62mmRuger = 21,
563    Semiautomaticmodel82A2_50Barrett = 22,
564    SniperWeaponSystemM247_62mm = 23,
565    SnipingrifleM21SpringfieldArmory = 24,
566    SnipingrifleM40A17_62mm = 25,
567    SnipingrifleM6007_62mm = 26,
568    AR15M165_56mm = 27,
569    M1_30_1 = 28,
570    M147_62mmNATO = 29,
571    M14M1AM1A1A1SpringfieldArmory = 30,
572    M14KassaultrifleLaFrance = 31,
573    M16A2assaultrifle5_56mmColt = 32,
574    M217_62mmU_S_ = 33,
575    M77MarkII5_56mmRuger = 34,
576    M77V7_62mmRuger = 35,
577    S167_62x36mmGrendel = 36,
578    SAR87_62mm = 37,
579    SAR48007_62mm = 38,
580    AssaultcarbineM16KLaFrance = 39,
581    M1_30_2 = 40,
582    M4Model7205_56mmColt = 41,
583    M9009mmCalico = 42,
584    AC556F5_56mmRuger = 43,
585    M3_45 = 44,
586    M11Cobray = 45,
587    M9519mmCalico = 46,
588    MP51010mm = 47,
589    _9mmColt = 48,
590    Ingram = 49,
591    ExternallypoweredEPG7_62mmAres = 50,
592    GECAL50 = 51,
593    GeneralpurposeM607_62mm = 52,
594    HeavyM2HBQCB_50RAMO = 53,
595    LightassaultM60E3Enhanced7_62mm = 54,
596    LightM16A25_56mmColt = 55,
597    Light5_56mmAres = 56,
598    LightweightM2_50RAMO = 57,
599    LightweightassaultM60E37_62mm = 58,
600    MinigunM1347_62mmGeneralElectric = 59,
601    MGsystemMK19Mod340mm = 60,
602    MGsystemorkitM2HBQCB_50SacoDefense = 61,
603    M1919A4_30calBrowning = 62,
604    _50calBrowning = 63,
605    ColoredsmokehandgrenadeM18 = 64,
606    ColoredsmokegrenadesFederalLaboratories = 65,
607    InfraredsmokegrenadeM76 = 66,
608    SmokehandgrenadeANM8HC = 67,
609    DelayfragmentationhandgrenadeM61 = 68,
610    DelayfragmentationhandgrenadeM67 = 69,
611    ImpactfragmentationhandgrenadeM57 = 70,
612    ImpactfragmentationhandgrenadeM68 = 71,
613    IncendiaryhandgrenadeANM14TH3 = 72,
614    LauncherIM20340mm = 73,
615    LauncherM7940mm = 74,
616    MultiplegrenadelauncherMM140mm = 75,
617    MultishotportableflameweaponM202A266mm = 76,
618    PortableABCM97 = 77,
619    PortableM2A17 = 78,
620    PortableM9E17 = 79,
621    DragonmediumAntiArmormissileM47FGM77A = 80,
622    JavelinAAWSM = 81,
623    LightAntiTankWeaponM72LAWII = 82,
624    RedeyeFIM43GeneralDynamics = 83,
625    Saberdualpurposemissilesystem = 84,
626    StingerFIM92GeneralDynamics = 85,
627    TOWheavyAntiTankweapon = 86,
628    BearTrapAPdevicePancor = 87,
629    ChainGunautomaticweaponEX347_62mm = 88,
630    CloseAssaultWeaponSystemCAWSAAI = 89,
631    CAWSOlinHecklerandKoch = 90,
632    CrossfireSAMModel88 = 91,
633    DragonandM16 = 92,
634    FiringportweaponM2315_56mmColt = 93,
635    FoxholeDiggerExplosiveKitEXFODA = 94,
636    InfantrySupportWeaponASP30RM30mm = 95,
637    JackhammerMk3A2Pancor = 96,
638    LightAntiArmorweaponM136AT4 = 97,
639    M26A2 = 98,
640    MasterKeyS = 99,
641    Minigun5_56mm = 100,
642    MultipurposeIndividualMunitionMPIMMarquardt = 101,
643    MultipurposeweaponAT8 = 102,
644    RecoillessrifleM40M40A2andM40A4106mm = 103,
645    RecoillessrifleM6790mm = 104,
646    RevolverSP101 = 105,
647    RevolverSuperRedhawk_44magnumRuger = 106,
648    RAWrocket140mmBrunswick = 107,
649    RiflelauncherAntiArmorMunitionRAAMOlin = 108,
650    RocketlauncherM203_5in = 109,
651    RocketlauncherEnhancedM72EseriesHEAT66mm = 110,
652    SelectivefireweaponAC5565_56mmRuger = 111,
653    SelectivefireweaponAC556F5_56mmRuger = 112,
654    ShotgunM870Mk1U_S_MarineCorpsRemington = 113,
655    SMAWMk19383mmMcDonnellDouglas = 114,
656    SMAWDDisposableSMAW = 115,
657    SquadAutomaticWeaponSAWM2495_56mm = 116,
658    TacticalSupportWeapon5012_50calPeregrine = 117,
659    TelescopedAmmunitionRevolverGunTARG_50calAres = 118,
660    UltimateoverundercombinationCiener = 119,
661    M18A1Claymoremine = 120,
662    Mortar81mm = 121,
663    MachinegunM2407_62mm = 134,
664}
665
666impl USWeaponSubcategories {
667    #[must_use]
668    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
669        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
670    }
671}
672
673// SISO-REF-010-2023 RussiaWeaponSubcategories [UID 17]
674#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
675pub enum RussiaWeaponSubcategories {
676    #[default]
677    Automatic9mmStechkin = 201,
678    PSM5_45mm = 202,
679    Selfloading9mmMakarov = 203,
680    TT337_62mmTokarev = 204,
681    AssaultrifleAKandAKM7_62mm = 205,
682    AssaultrifleAK74andAKS745_45mm = 206,
683    Selfloadingrifle7_62mmSimonov = 207,
684    SniperrifleSVD7_62mmDragunov = 208,
685    AKSU745_45mm = 209,
686    PPS437_62mm = 210,
687    PPSh417_62mm = 211,
688    GeneralpurposePK7_62mm = 212,
689    HeavyDShK38andModel384612_7mmDegtyarev = 213,
690    HeavyNSV12_7mm = 214,
691    LightRPD7_62mm = 215,
692    LightRPK7_62mm = 216,
693    LightRPK745_45mm = 217,
694    HandgrenadeM75 = 218,
695    HandgrenadeRGD5 = 219,
696    APhandgrenadeF1 = 220,
697    AThandgrenadeRKG3 = 221,
698    AThandgrenadeRKG3M = 222,
699    AThandgrenadeRKG3T = 223,
700    FragmentationhandgrenadeRGN = 224,
701    FragmentationhandgrenadeRGO = 225,
702    SmokehandgrenadeRDG1 = 226,
703    Plamyalauncher30mmAGS17 = 227,
704    RiflemountedlauncherBG1540mm = 228,
705    LPO50 = 229,
706    ROKS3 = 230,
707    CartmountedTPO50 = 231,
708    GimletSA16 = 232,
709    GrailSA7 = 233,
710    GremlinSA14 = 234,
711    SaggerAT3 = 235,
712    SaxhornAT7 = 236,
713    SpigotABAT14 = 237,
714    SA18 = 238,
715    SA19 = 239,
716    Grad1Pmanportabletripodrocketlauncher122mm = 240,
717    LightAntiArmorweaponRPG18 = 241,
718    LightAntiTankweaponRPG22 = 242,
719    MGRPG = 243,
720    PortablerocketlauncherRPG16 = 244,
721    Recoillessgun73mmSPG9 = 245,
722    VATrocketlauncherRPG7 = 246,
723    Mon50AntiPersonnelmine = 248,
724    RPG29Vampir = 249,
725    LaserDesignator = 250,
726    AT4Spigot = 251,
727    SA24IglaS = 252,
728    Type69RPG = 253,
729}
730
731impl RussiaWeaponSubcategories {
732    #[must_use]
733    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
734        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
735    }
736}
737
738// SISO-REF-010-2023 UKWeaponSubcategories [UID 18]
739#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
740pub enum UKWeaponSubcategories {
741    #[default]
742    LAW80 = 1,
743    Blowpipe = 2,
744    Javelin = 3,
745    _51mmmortar = 4,
746    SLR7_62mmrifle = 5,
747    Sterling9mmsubmachinegun = 6,
748    L7A2generalpurposeMG = 7,
749    L6WombatRecoillessrifle = 8,
750    CarlGustav89mmrecoillessrifle = 9,
751    SA80Individuallightsupportweapon = 10,
752    Trigat = 11,
753    MilanATmissile = 12,
754}
755
756impl UKWeaponSubcategories {
757    #[must_use]
758    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
759        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
760    }
761}
762
763// SISO-REF-010-2023 FrenchWeaponSubcategories [UID 19]
764#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
765pub enum FrenchWeaponSubcategories {
766    #[default]
767    ACLSTRIM = 1,
768    Mistralmissile = 2,
769    MilanATmissile = 3,
770    LRACF189mmATrocketlauncher = 4,
771    FAMASrifle = 5,
772    AA52machinegun = 6,
773    _58mmriflegrenade = 7,
774    FRF1sniperrifle = 8,
775}
776
777impl FrenchWeaponSubcategories {
778    #[must_use]
779    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
780        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
781    }
782}
783
784// SISO-REF-010-2023 LifeFormsSubcategoryGermanWeapons [UID 20]
785#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
786pub enum LifeFormsSubcategoryGermanWeapons {
787    #[default]
788    G3rifle = 1,
789    G11rifle = 2,
790    P1pistol = 3,
791    MG3machinegun = 4,
792    Milanmissile = 5,
793    MP1Uzisubmachinegun = 6,
794    Panzerfaust3LightAntiTankWeapon = 7,
795    DM19handgrenade = 8,
796    DM29handgrenade = 9,
797}
798
799impl LifeFormsSubcategoryGermanWeapons {
800    #[must_use]
801    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
802        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
803    }
804}
805
806// SISO-REF-010-2023 EnvironmentalSubcategory [UID 21]
807#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
808pub enum EnvironmentalSubcategory {
809    #[default]
810    Other = 0,
811    VerySmall = 20,
812    Small = 40,
813    Medium = 60,
814    Large = 80,
815    VeryLarge = 100,
816}
817
818impl EnvironmentalSubcategory {
819    #[must_use]
820    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
821        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
822    }
823}
824
825// SISO-REF-010-2023 RadioCategory [UID 22]
826#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
827pub enum RadioCategory {
828    #[default]
829    Other = 0,
830    VoiceTransmissionReception = 1,
831    DataLinkTransmissionReception = 2,
832    VoiceandDataLinkTransmissionReception = 3,
833    InstrumentedLandingSystemGlideslopeTransmitter = 4,
834    InstrumentedLandingSystemLocalizerTransmitter = 5,
835    InstrumentedLandingSystemOuterMarkerBeacon = 6,
836    InstrumentedLandingSystemMiddleMarkerBeacon = 7,
837    InstrumentedLandingSystemInnerMarkerBeacon = 8,
838    InstrumentedLandingSystem = 9,
839    TacticalAirNavigationTACANTransmitter = 10,
840    TacticalAirNavigationTACANReceiver = 11,
841    TacticalAirNavigationTACANTransmitterReceiver = 12,
842    VariableOmniRangingVORTransmitter = 13,
843    VariableOmniRangingVORWithDistanceMeasuringEquipmentTransmitter = 14,
844    CombinedVORILSReceiver = 15,
845    CombinedVORTACANTransmitter = 16,
846    NonDirectionalBeaconTransmitter = 17,
847    NonDirectionalBeaconReceiver = 18,
848    NonDirectionalBeaconWithDistanceMeasuringEquipmentTransmitter = 19,
849    DistanceMeasuringEquipment = 20,
850    Link16Terminal = 21,
851    Link11Terminal = 22,
852    Link11BTerminal = 23,
853    EPLRSSADLTerminal = 24,
854    F22IntraFlightDataLink = 25,
855    F35MultifunctionAdvancedDataLink = 26,
856    SINCGARSTerminal = 27,
857    LBandSATCOMTerminal = 28,
858    IBSTerminal = 29,
859    GPS = 30,
860    TacticalVideo = 31,
861    AirtoAirMissileDatalink = 32,
862    Link16SurrogateforNonNATOTDLTerminal = 33,
863    MQ19CBandLOSDatalink = 34,
864    MQ19KuBandSATCOMDatalink = 35,
865    AirtoGroundWeaponDatalink = 36,
866    AutomaticIdentificationSystem = 37,
867    JPALSDataLink = 38,
868    CombatSearchandRescueRadio = 40,
869    CounterUnmannedAircraftSystemRadio = 41,
870    EmergencyPositionIndicatingRadioBeacons = 42,
871    ElectronicAttackSystems = 50,
872    TacticalTargetingNetworkTechnology = 51,
873}
874
875impl RadioCategory {
876    #[must_use]
877    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
878        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
879    }
880}
881
882// SISO-REF-010-2023 RadioSubcategory [UID 23]
883#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
884pub enum RadioSubcategory {
885    #[default]
886    Other = 0,
887    JointElectronicsTypeDesignationSystemNonspecificSeries = 1,
888    ManufacturerDesignation = 2,
889    NationalDesignation = 3,
890    JETDSARCSet1 = 11,
891    JETDSARCSet2 = 12,
892    JETDSARCSet3 = 13,
893    JETDSARCSet4 = 14,
894    JETDSBRCSet1 = 15,
895    JETDSBRCSet2 = 16,
896    JETDSBRCSet3 = 17,
897    JETDSBRCSet4 = 18,
898    JETDSCRCSet1 = 19,
899    JETDSCRCSet2 = 20,
900    JETDSCRCSet3 = 21,
901    JETDSCRCSet4 = 22,
902    JETDSDRCSet1 = 23,
903    JETDSDRCSet2 = 24,
904    JETDSDRCSet3 = 25,
905    JETDSDRCSet4 = 26,
906    JETDSFRCSet1 = 27,
907    JETDSFRCSet2 = 28,
908    JETDSFRCSet3 = 29,
909    JETDSFRCSet4 = 30,
910    JETDSGRCSet1 = 31,
911    JETDSGRCSet2 = 32,
912    JETDSGRCSet3 = 33,
913    JETDSGRCSet4 = 34,
914    JETDSKRCSet1 = 35,
915    JETDSKRCSet2 = 36,
916    JETDSKRCSet3 = 37,
917    JETDSKRCSet4 = 38,
918    JETDSMRCSet1 = 39,
919    JETDSMRCSet2 = 40,
920    JETDSMRCSet3 = 41,
921    JETDSMRCSet4 = 42,
922    JETDSPRCSet1 = 43,
923    JETDSPRCSet2 = 44,
924    JETDSPRCSet3 = 45,
925    JETDSPRCSet4 = 46,
926    JETDSSRCSet1 = 47,
927    JETDSSRCSet2 = 48,
928    JETDSSRCSet3 = 49,
929    JETDSSRCSet4 = 50,
930    JETDSTRCSet1 = 51,
931    JETDSTRCSet2 = 52,
932    JETDSTRCSet3 = 53,
933    JETDSTRCSet4 = 54,
934    JETDSVRCSet1 = 55,
935    JETDSVRCSet2 = 56,
936    JETDSVRCSet3 = 57,
937    JETDSVRCSet4 = 58,
938    JETDSWRCSet1 = 59,
939    JETDSWRCSet2 = 60,
940    JETDSWRCSet3 = 61,
941    JETDSWRCSet4 = 62,
942    JETDSZRCSet1 = 63,
943    JETDSZRCSet2 = 64,
944    JETDSZRCSet3 = 65,
945    JETDSZRCSet4 = 66,
946}
947
948impl RadioSubcategory {
949    #[must_use]
950    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
951        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
952    }
953}
954
955// SISO-REF-010-2023 ExpendableAirCategory [UID 25]
956#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
957pub enum ExpendableAirCategory {
958    #[default]
959    Other = 0,
960    Chaff = 1,
961    Flare = 2,
962    CombinedChaffandFlare = 3,
963    ActiveEmitter = 4,
964    PassiveDecoy = 5,
965    WingedDecoy = 6,
966    SignalIlluminationFlare = 7,
967    SmokeGenerator = 8,
968    CombinedFlareandSmokeGenerator = 12,
969    SARNightLight = 13,
970    SARBuoy = 14,
971}
972
973impl ExpendableAirCategory {
974    #[must_use]
975    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
976        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
977    }
978}
979
980// SISO-REF-010-2023 ExpendableSurfaceCategory [UID 26]
981#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
982pub enum ExpendableSurfaceCategory {
983    #[default]
984    Other = 0,
985    Flare = 2,
986    ActiveEmitter = 4,
987    PassiveDecoy = 5,
988    SmokeGenerator = 8,
989    CombinedFlareandSmokeGenerator = 12,
990    SARBuoy = 14,
991}
992
993impl ExpendableSurfaceCategory {
994    #[must_use]
995    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
996        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
997    }
998}
999
1000// SISO-REF-010-2023 ExpendableSubsurfaceCategory [UID 27]
1001#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1002pub enum ExpendableSubsurfaceCategory {
1003    #[default]
1004    Other = 0,
1005    Activeemitter = 4,
1006    Passivedecoy = 5,
1007    Signal = 7,
1008    NoiseMakerDecoy = 9,
1009    BubbleMakerDecoy = 10,
1010    MultiModeDecoy = 11,
1011}
1012
1013impl ExpendableSubsurfaceCategory {
1014    #[must_use]
1015    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1016        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
1017    }
1018}
1019
1020// SISO-REF-010-2023 SensorEmitterCategory [UID 28]
1021#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1022pub enum SensorEmitterCategory {
1023    #[default]
1024    Other = 0,
1025    Multispectral = 1,
1026    RFActive = 2,
1027    RFPassive = 3,
1028    Optical = 4,
1029    ElectroOptical = 5,
1030    Seismic = 6,
1031    Chemicalpointdetector = 7,
1032    Chemicalstandoff = 8,
1033    Thermal = 9,
1034    AcousticActive = 10,
1035    AcousticPassive = 11,
1036    ContactPressure = 12,
1037    ElectroMagneticRadiation = 13,
1038    ParticleRadiation = 14,
1039    Magnetic = 15,
1040    Gravitational = 16,
1041}
1042
1043impl SensorEmitterCategory {
1044    #[must_use]
1045    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1046        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
1047    }
1048}
1049
1050// SISO-REF-010-2023 Country [UID 29]
1051#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1052pub enum Country {
1053    #[default]
1054    Other = 0,
1055    Afghanistan = 1,
1056    Albania = 2,
1057    Algeria = 3,
1058    AmericanSamoa = 4,
1059    Andorra = 5,
1060    Angola = 6,
1061    Anguilla = 7,
1062    Antarctica = 8,
1063    AntiguaandBarbuda = 9,
1064    Argentina = 10,
1065    Aruba = 11,
1066    AshmoreandCartierIslands = 12,
1067    Australia = 13,
1068    Austria = 14,
1069    Bahamas = 15,
1070    Bahrain = 16,
1071    BakerIsland = 17,
1072    Bangladesh = 18,
1073    Barbados = 19,
1074    BassasdaIndia = 20,
1075    Belgium = 21,
1076    Belize = 22,
1077    Benin = 23,
1078    Bermuda = 24,
1079    Bhutan = 25,
1080    Bolivia = 26,
1081    Botswana = 27,
1082    BouvetIsland = 28,
1083    Brazil = 29,
1084    BritishIndianOceanTerritory = 30,
1085    VirginIslandsBritish = 31,
1086    BruneiDarussalam = 32,
1087    Bulgaria = 33,
1088    BurkinaFaso = 34,
1089    Myanmar = 35,
1090    Burundi = 36,
1091    Cambodia = 37,
1092    Cameroon = 38,
1093    Canada = 39,
1094    CaboVerde = 40,
1095    CaymanIslands = 41,
1096    CentralAfricanRepublic = 42,
1097    Chad = 43,
1098    Chile = 44,
1099    ChinaPeoplesRepublicof = 45,
1100    ChristmasIsland = 46,
1101    Cocos = 47,
1102    Colombia = 48,
1103    Comoros = 49,
1104    Congo = 50,
1105    CookIslands = 51,
1106    CoralSeaIslands = 52,
1107    CostaRica = 53,
1108    Cuba = 54,
1109    Cyprus = 55,
1110    Czechoslovakia = 56,
1111    Denmark = 57,
1112    Djibouti = 58,
1113    Dominica = 59,
1114    DominicanRepublic = 60,
1115    Ecuador = 61,
1116    Egypt = 62,
1117    ElSalvador = 63,
1118    EquatorialGuinea = 64,
1119    Ethiopia = 65,
1120    EuropaIsland = 66,
1121    FalklandIslands = 67,
1122    FaroeIslands = 68,
1123    Fiji = 69,
1124    Finland = 70,
1125    France = 71,
1126    FrenchGuiana = 72,
1127    FrenchPolynesia = 73,
1128    FrenchSouthernTerritories = 74,
1129    Gabon = 75,
1130    GambiaThe = 76,
1131    GazaStrip = 77,
1132    Germany = 78,
1133    Ghana = 79,
1134    Gibraltar = 80,
1135    GloriosoIslands = 81,
1136    Greece = 82,
1137    Greenland = 83,
1138    Grenada = 84,
1139    Guadeloupe = 85,
1140    Guam = 86,
1141    Guatemala = 87,
1142    Guernsey = 88,
1143    Guinea = 89,
1144    GuineaBissau = 90,
1145    Guyana = 91,
1146    Haiti = 92,
1147    HeardIslandandMcDonaldIslands = 93,
1148    Honduras = 94,
1149    HongKong = 95,
1150    HowlandIsland = 96,
1151    Hungary = 97,
1152    Iceland = 98,
1153    India = 99,
1154    Indonesia = 100,
1155    Iran = 101,
1156    Iraq = 102,
1157    Ireland = 104,
1158    Israel = 105,
1159    Italy = 106,
1160    CotedIvoire = 107,
1161    Jamaica = 108,
1162    JanMayen = 109,
1163    Japan = 110,
1164    JarvisIsland = 111,
1165    Jersey = 112,
1166    JohnstonAtoll = 113,
1167    Jordan = 114,
1168    JuandeNovaIsland = 115,
1169    Kenya = 116,
1170    KingmanReef = 117,
1171    Kiribati = 118,
1172    KoreaDemocraticPeoplesRepublicOf = 119,
1173    KoreaRepublicOf = 120,
1174    Kuwait = 121,
1175    LaoPeoplesDemocraticRepublic = 122,
1176    Lebanon = 123,
1177    Lesotho = 124,
1178    Liberia = 125,
1179    Libya = 126,
1180    Liechtenstein = 127,
1181    Luxembourg = 128,
1182    Madagascar = 129,
1183    Macao = 130,
1184    Malawi = 131,
1185    Malaysia = 132,
1186    Maldives = 133,
1187    Mali = 134,
1188    Malta = 135,
1189    IsleofMan = 136,
1190    MarshallIslands = 137,
1191    Martinique = 138,
1192    Mauritania = 139,
1193    Mauritius = 140,
1194    Mayotte = 141,
1195    Mexico = 142,
1196    Micronesia = 143,
1197    Monaco = 144,
1198    Mongolia = 145,
1199    Montserrat = 146,
1200    Morocco = 147,
1201    Mozambique = 148,
1202    Namibia = 149,
1203    Nauru = 150,
1204    NavassaIsland = 151,
1205    Nepal = 152,
1206    Netherlands = 153,
1207    NetherlandsAntilles = 154,
1208    NewCaledonia = 155,
1209    NewZealand = 156,
1210    Nicaragua = 157,
1211    Niger = 158,
1212    Nigeria = 159,
1213    Niue = 160,
1214    NorfolkIsland = 161,
1215    NorthernMarianaIslands = 162,
1216    Norway = 163,
1217    Oman = 164,
1218    Pakistan = 165,
1219    PalmyraAtoll = 166,
1220    Panama = 168,
1221    PapuaNewGuinea = 169,
1222    ParacelIslands = 170,
1223    Paraguay = 171,
1224    Peru = 172,
1225    Philippines = 173,
1226    Pitcairn = 174,
1227    Poland = 175,
1228    Portugal = 176,
1229    PuertoRico = 177,
1230    Qatar = 178,
1231    Reunion = 179,
1232    Romania = 180,
1233    Rwanda = 181,
1234    SaintKittsandNevis = 182,
1235    SaintHelenaAscensionandTristandaCunha = 183,
1236    SaintLucia = 184,
1237    SaintPierreandMiquelon = 185,
1238    SaintVincentandtheGrenadines = 186,
1239    SanMarino = 187,
1240    SaoTomeandPrincipe = 188,
1241    SaudiArabia = 189,
1242    Senegal = 190,
1243    Seychelles = 191,
1244    SierraLeone = 192,
1245    Singapore = 193,
1246    SolomonIslands = 194,
1247    Somalia = 195,
1248    SouthGeorgiaandtheSouthSandwichIslands = 196,
1249    SouthAfrica = 197,
1250    Spain = 198,
1251    SpratlyIslands = 199,
1252    SriLanka = 200,
1253    Sudan = 201,
1254    Suriname = 202,
1255    Svalbard = 203,
1256    Eswatini = 204,
1257    Sweden = 205,
1258    Switzerland = 206,
1259    SyrianArabRepublic = 207,
1260    TaiwanProvinceofChina = 208,
1261    TanzaniaUnitedRepublicof = 209,
1262    Thailand = 210,
1263    Togo = 211,
1264    Tokelau = 212,
1265    Tonga = 213,
1266    TrinidadandTobago = 214,
1267    TromelinIsland = 215,
1268    Palau = 216,
1269    Tunisia = 217,
1270    Turkey = 218,
1271    TurksandCaicosIslands = 219,
1272    Tuvalu = 220,
1273    Uganda = 221,
1274    Russia = 222,
1275    UnitedArabEmirates = 223,
1276    UnitedKingdomofGreatBritainandNorthernIreland = 224,
1277    UnitedStatesofAmerica = 225,
1278    Uruguay = 226,
1279    Vanuatu = 227,
1280    HolySee = 228,
1281    Venezuela = 229,
1282    VietNam = 230,
1283    VirginIslandsUS = 231,
1284    WakeIsland = 232,
1285    WallisandFutuna = 233,
1286    WesternSahara = 234,
1287    WestBank = 235,
1288    Samoa = 236,
1289    Yemen = 237,
1290    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
1291    SerbiaandMontenegro_ = 240,
1292    Zaire = 241,
1293    Zambia = 242,
1294    Zimbabwe = 243,
1295    Armenia = 244,
1296    Azerbaijan = 245,
1297    Belarus = 246,
1298    BosniaandHerzegovina = 247,
1299    ClippertonIsland = 248,
1300    Croatia = 249,
1301    Estonia = 250,
1302    Georgia = 251,
1303    Kazakhstan = 252,
1304    Kyrgyzstan = 253,
1305    Latvia = 254,
1306    Lithuania = 255,
1307    NorthMacedonia = 256,
1308    MidwayIslands = 257,
1309    Moldova = 258,
1310    Montenegro = 259,
1311    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
1312    Russia_ = 260,
1313    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
1314    SerbiaAndMontenegro__ = 261,
1315    Slovenia = 262,
1316    Tajikistan = 263,
1317    Turkmenistan = 264,
1318    Ukraine = 265,
1319    Uzbekistan = 266,
1320    CzechRepublic = 267,
1321    Slovakia = 268,
1322    AalandIslands = 269,
1323    BonaireSintEustatiusandSaba = 270,
1324    CongoDemocraticRepublicOfThe = 271,
1325    Curacao = 272,
1326    Eritrea = 273,
1327    SaintBarthelemy = 274,
1328    SaintMartin = 275,
1329    Serbia = 276,
1330    SintMaarten = 277,
1331    SouthSudan = 278,
1332    SvalbardandJanMayen = 279,
1333    TimorLeste = 280,
1334    UnitedStatesMinorOutlyingIslands = 281,
1335    PalestineStateof = 282,
1336}
1337
1338impl Country {
1339    #[must_use]
1340    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1341        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
1342    }
1343}
1344
1345// SISO-REF-010-2023 LandPlatformAppearance [UID 31]
1346bitflags! {
1347    #[derive(Copy, Clone, Debug, PartialEq, Eq)]
1348    pub struct LandPlatformAppearance: u32 {
1349        const PaintScheme = 1 << 0;
1350        const MobilityKilled = 1 << 1;
1351        const FirePowerKilled = 1 << 2;
1352        const Damage = 1 << 3;
1353        const IsSmokeEmanating = 1 << 5;
1354        const IsEngineEmittingSmoke = 1 << 6;
1355        const TrailingDustCloud = 1 << 7;
1356        const PrimaryHatch = 1 << 9;
1357        const HeadLightsOn = 1 << 12;
1358        const TailLightsOn = 1 << 13;
1359        const BrakeLightsOn = 1 << 14;
1360        const IsFlaming = 1 << 15;
1361        const LauncherOperational = 1 << 16;
1362        const CamouflageType = 1 << 17;
1363        const ConcealedPosition = 1 << 19;
1364        const IsFrozen = 1 << 21;
1365        const PowerPlantOn = 1 << 22;
1366        const State = 1 << 23;
1367        const TentExtended = 1 << 24;
1368        const RampExtended = 1 << 25;
1369        const BlackoutLightsOn = 1 << 26;
1370        const BlackoutBrakeLightsOn = 1 << 27;
1371        const SpotSearchLight1On = 1 << 28;
1372        const InteriorLightsOn = 1 << 29;
1373        const OccupantsSurrendered = 1 << 30;
1374        const MaskedCloaked = 1 << 31;
1375    }
1376}
1377
1378impl Default for LandPlatformAppearance {
1379    fn default() -> Self {
1380        Self::empty()
1381    }
1382}
1383
1384impl LandPlatformAppearance {
1385    #[must_use]
1386    pub const fn as_u32(&self) -> u32 {
1387        self.bits()
1388    }
1389
1390    #[must_use]
1391    pub const fn from_u32(bits: u32) -> Option<Self> {
1392        Self::from_bits(bits)
1393    }
1394}
1395
1396// TODO(@anyone) Implement bitfields [UID 31 - 43]
1397
1398// SISO-REF-010-2023 DeadReckoningAlgorithm [UID 44]
1399#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1400pub enum DeadReckoningAlgorithm {
1401    #[default]
1402    Other = 0,
1403    StaticNonmovingEntity = 1,
1404    DRMConstantVelocityLowAccelerationLinearMotionEntity = 2,
1405    DRMConstantVelocityLowAccelerationLinearMotionEntitywithExtrapolationofOrientation = 3,
1406    DRMHighSpeedorManeuveringEntitywithExtrapolationofOrientation = 4,
1407    DRMHighSpeedorManeuveringEntity = 5,
1408    DRMSimilartoFPWexceptinBodyCoordinates = 6,
1409    DRMSimilartoRPWexceptinBodyCoordinates = 7,
1410    DRMSimilartoRVWexceptinBodyCoordinates = 8,
1411    DRMSimilartoFVWexceptinBodyCoordinates = 9,
1412}
1413
1414impl DeadReckoningAlgorithm {
1415    #[must_use]
1416    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1417        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
1418    }
1419}
1420
1421impl FieldSerialize for DeadReckoningAlgorithm {
1422    fn serialize_field(&self, buf: &mut BytesMut) {
1423        buf.put_u8(*self as u8);
1424    }
1425}
1426
1427impl FieldDeserialize for DeadReckoningAlgorithm {
1428    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
1429        Self::deserialize(buf)
1430    }
1431}
1432
1433impl FieldLen for DeadReckoningAlgorithm {
1434    fn field_len(&self) -> usize {
1435        1
1436    }
1437}
1438
1439// SISO-REF-010-2023 EntityMarkingCharacterSet [UID 45]
1440#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1441pub enum EntityMarkingCharacterSet {
1442    #[default]
1443    Unused = 0,
1444    ASCII = 1,
1445    USArmyMarking = 2,
1446    DigitChevron = 3,
1447}
1448
1449impl EntityMarkingCharacterSet {
1450    #[must_use]
1451    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1452        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
1453    }
1454}
1455
1456// SISO-REF-010-2023 EntityCapabilities [UID 55]
1457#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1458pub enum EntityCapabilities {
1459    #[default]
1460    LandPlatformEntityCapabilities = 0,
1461    AirPlatformEntityCapabilities = 1,
1462    SurfacePlatformEntityCapabilities = 2,
1463    SubsurfacePlatformEntityCapabilities = 3,
1464    SpacePlatformEntityCapabilities = 4,
1465    MunitionEntityCapabilities = 5,
1466    LifeFormsEntityCapabilities = 6,
1467    EnvironmentalEntityCapabilities = 7,
1468    CulturalFeatureEntityCapabilities = 8,
1469    SupplyEntityCapabilities = 9,
1470    RadioEntityCapabilities = 10,
1471    ExpendableEntityCapabilities = 11,
1472    SensorEmitterEntityCapabilities = 12,
1473}
1474
1475impl EntityCapabilities {
1476    #[must_use]
1477    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1478        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
1479    }
1480}
1481
1482impl FieldSerialize for EntityCapabilities {
1483    fn serialize_field(&self, buf: &mut BytesMut) {
1484        buf.put_u32(*self as u32);
1485    }
1486}
1487
1488impl FieldDeserialize for EntityCapabilities {
1489    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
1490        Self::deserialize(buf)
1491    }
1492}
1493
1494impl FieldLen for EntityCapabilities {
1495    fn field_len(&self) -> usize {
1496        4
1497    }
1498}
1499
1500// SISO-REF-010-2023 VariableParameterRecordType [UID 56]
1501#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1502pub enum VariableParameterRecordType {
1503    #[default]
1504    ArticulatedPart = 0,
1505    AttachedPart = 1,
1506    Separation = 2,
1507    EntityType = 3,
1508    EntityAssociation = 4,
1509}
1510
1511impl VariableParameterRecordType {
1512    #[must_use]
1513    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1514        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
1515    }
1516}
1517
1518// SISO-REF-010-2023 AttachedParts [UID 57]
1519#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1520pub enum AttachedParts {
1521    #[default]
1522    NothingEmpty = 0,
1523    SequentialIDsformodelspecificstations = 1,
1524    FuselageStations = 512,
1525    LeftwingStations = 640,
1526    RightwingStations = 768,
1527    M16A42rifle = 896,
1528    M249SAW = 897,
1529    M60Machinegun = 898,
1530    M203GrenadeLauncher = 899,
1531    M136AT4 = 900,
1532    M47Dragon = 901,
1533    AAWSMJavelin = 902,
1534    M18A1ClaymoreMine = 903,
1535    MK19GrenadeLauncher = 904,
1536    M2MachineGun = 905,
1537}
1538
1539impl AttachedParts {
1540    #[must_use]
1541    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1542        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
1543    }
1544}
1545
1546// SISO-REF-010-2023 ArticulatedPartsTypeMetric [UID 58]
1547#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1548pub enum ArticulatedPartsTypeMetric {
1549    #[default]
1550    NotSpecified = 0,
1551    Position = 1,
1552    PositionRate = 2,
1553    Extension = 3,
1554    ExtensionRate = 4,
1555    X = 5,
1556    XRate = 6,
1557    Y = 7,
1558    YRate = 8,
1559    Z = 9,
1560    ZRate = 10,
1561    Azimuth = 11,
1562    AzimuthRate = 12,
1563    Elevation = 13,
1564    ElevationRate = 14,
1565    Rotation1 = 15,
1566    RotationRate = 16,
1567}
1568
1569impl ArticulatedPartsTypeMetric {
1570    #[must_use]
1571    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1572        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
1573    }
1574}
1575
1576// SISO-REF-010-2023 ArticulatedPartsTypeClass [UID 59]
1577#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1578pub enum ArticulatedPartsTypeClass {
1579    #[default]
1580    NotSpecified = 0,
1581    Rudder = 1024,
1582    LeftFlap = 1056,
1583    RightFlap = 1088,
1584    LeftAileron = 1120,
1585    RightAileron = 1152,
1586    HelicopterMainRotor = 1184,
1587    HelicopterTailRotor = 1216,
1588    OtherAircraftControlSurfacesDefinedasNeeded = 1248,
1589    PropellerNumber1 = 1280,
1590    PropellerNumber2 = 1312,
1591    PropellerNumber3 = 1344,
1592    PropellerNumber4 = 1376,
1593    LeftStabilator = 1408,
1594    RightStabilator = 1440,
1595    LeftRuddervator = 1472,
1596    RightRuddervator = 1504,
1597    LeftLeadingEdgeFlapSlat = 1536,
1598    RightLeadingEdgeFlapSlat = 1568,
1599    LeftElevator = 1600,
1600    RightElevator = 1632,
1601    CanardLeft = 1664,
1602    CanardRight = 1696,
1603    ElevonInnerLeft = 1728,
1604    ElevonInnerRight = 1760,
1605    ElevonMiddleLeft = 1792,
1606    ElevonMiddleRight = 1824,
1607    ElevonOuterLeft = 1856,
1608    ElevonOuterRight = 1888,
1609    Canopy = 1920,
1610    SpoilerLeft = 1952,
1611    SpoilerRight = 1984,
1612    Periscope = 2048,
1613    GenericAntenna = 2080,
1614    Snorkel = 2112,
1615    OtherExtendiblePartsDefinedasNeeded = 2144,
1616    DivePlaneSailLeft = 2176,
1617    DivePlaneSailRight = 2208,
1618    DivePlaneBowLeft = 2240,
1619    DivePlaneBowRight = 2272,
1620    DivePlaneSternLeft = 2304,
1621    DivePlaneSternRight = 2336,
1622    LandingGear = 3072,
1623    TailHook = 3104,
1624    SpeedBrake = 3136,
1625    LeftDoorofPrimaryWeaponBay = 3168,
1626    RightDoorofPrimaryWeaponBay = 3200,
1627    TankorAPCHatch = 3232,
1628    Wingsweep = 3264,
1629    BridgeLauncher = 3296,
1630    BridgeSection1 = 3328,
1631    BridgeSection2 = 3360,
1632    BridgeSection3 = 3392,
1633    PrimaryBlade1 = 3424,
1634    PrimaryBlade2 = 3456,
1635    PrimaryBoom = 3488,
1636    PrimaryLauncherArm = 3520,
1637    OtherFixedPositionPartsDefinedasNeeded = 3552,
1638    LandingGearNose = 3584,
1639    LandingGearLeftMain = 3616,
1640    LandingGearRightMain = 3648,
1641    DoorsofLeftSideWeaponBay = 3680,
1642    DoorsofRightSideWeaponBay = 3712,
1643    SpotSearchLight1 = 3744,
1644    SpotSearchLight2 = 3776,
1645    SpotSearchLight3 = 3808,
1646    SpotSearchLight4 = 3840,
1647    LandingLight = 3872,
1648    PrimaryTurretNumber1 = 4096,
1649    PrimaryTurretNumber2 = 4128,
1650    PrimaryTurretNumber3 = 4160,
1651    PrimaryTurretNumber4 = 4192,
1652    PrimaryTurretNumber5 = 4224,
1653    PrimaryTurretNumber6 = 4256,
1654    PrimaryTurretNumber7 = 4288,
1655    PrimaryTurretNumber8 = 4320,
1656    PrimaryTurretNumber9 = 4352,
1657    PrimaryTurretNumber10 = 4384,
1658    PrimaryGunNumber1 = 4416,
1659    PrimaryGunNumber2 = 4448,
1660    PrimaryGunNumber3 = 4480,
1661    PrimaryGunNumber4 = 4512,
1662    PrimaryGunNumber5 = 4544,
1663    PrimaryGunNumber6 = 4576,
1664    PrimaryGunNumber7 = 4608,
1665    PrimaryGunNumber8 = 4640,
1666    PrimaryGunNumber9 = 4672,
1667    PrimaryGunNumber10 = 4704,
1668    PrimaryLauncher1 = 4736,
1669    PrimaryLauncher2 = 4768,
1670    PrimaryLauncher3 = 4800,
1671    PrimaryLauncher4 = 4832,
1672    PrimaryLauncher5 = 4864,
1673    PrimaryLauncher6 = 4896,
1674    PrimaryLauncher7 = 4928,
1675    PrimaryLauncher8 = 4960,
1676    PrimaryLauncher9 = 4992,
1677    PrimaryLauncher10 = 5024,
1678    PrimaryDefenseSystems1 = 5056,
1679    PrimaryDefenseSystems2 = 5088,
1680    PrimaryDefenseSystems3 = 5120,
1681    PrimaryDefenseSystems4 = 5152,
1682    PrimaryDefenseSystems5 = 5184,
1683    PrimaryDefenseSystems6 = 5216,
1684    PrimaryDefenseSystems7 = 5248,
1685    PrimaryDefenseSystems8 = 5280,
1686    PrimaryDefenseSystems9 = 5312,
1687    PrimaryDefenseSystems10 = 5344,
1688    PrimaryRadar1 = 5376,
1689    PrimaryRadar2 = 5408,
1690    PrimaryRadar3 = 5440,
1691    PrimaryRadar4 = 5472,
1692    PrimaryRadar5 = 5504,
1693    PrimaryRadar6 = 5536,
1694    PrimaryRadar7 = 5568,
1695    PrimaryRadar8 = 5600,
1696    PrimaryRadar9 = 5632,
1697    PrimaryRadar10 = 5664,
1698    SecondaryTurretNumber1 = 5696,
1699    SecondaryTurretNumber2 = 5728,
1700    SecondaryTurretNumber3 = 5760,
1701    SecondaryTurretNumber4 = 5792,
1702    SecondaryTurretNumber5 = 5824,
1703    SecondaryTurretNumber6 = 5856,
1704    SecondaryTurretNumber7 = 5888,
1705    SecondaryTurretNumber8 = 5920,
1706    SecondaryTurretNumber9 = 5952,
1707    SecondaryTurretNumber10 = 5984,
1708    SecondaryGunNumber1 = 6016,
1709    SecondaryGunNumber2 = 6048,
1710    SecondaryGunNumber3 = 6080,
1711    SecondaryGunNumber4 = 6112,
1712    SecondaryGunNumber5 = 6144,
1713    SecondaryGunNumber6 = 6176,
1714    SecondaryGunNumber7 = 6208,
1715    SecondaryGunNumber8 = 6240,
1716    SecondaryGunNumber9 = 6272,
1717    SecondaryGunNumber10 = 6304,
1718    SecondaryLauncher1 = 6336,
1719    SecondaryLauncher2 = 6368,
1720    SecondaryLauncher3 = 6400,
1721    SecondaryLauncher4 = 6432,
1722    SecondaryLauncher5 = 6464,
1723    SecondaryLauncher6 = 6496,
1724    SecondaryLauncher7 = 6528,
1725    SecondaryLauncher8 = 6560,
1726    SecondaryLauncher9 = 6592,
1727    SecondaryLauncher10 = 6624,
1728    SecondaryDefenseSystems1 = 6656,
1729    SecondaryDefenseSystems2 = 6688,
1730    SecondaryDefenseSystems3 = 6720,
1731    SecondaryDefenseSystems4 = 6752,
1732    SecondaryDefenseSystems5 = 6784,
1733    SecondaryDefenseSystems6 = 6816,
1734    SecondaryDefenseSystems7 = 6848,
1735    SecondaryDefenseSystems8 = 6880,
1736    SecondaryDefenseSystems9 = 6912,
1737    SecondaryDefenseSystems10 = 6944,
1738    SecondaryRadar1 = 6976,
1739    SecondaryRadar2 = 7008,
1740    SecondaryRadar3 = 7040,
1741    SecondaryRadar4 = 7072,
1742    SecondaryRadar5 = 7104,
1743    SecondaryRadar6 = 7136,
1744    SecondaryRadar7 = 7168,
1745    SecondaryRadar8 = 7200,
1746    SecondaryRadar9 = 7232,
1747    SecondaryRadar10 = 7264,
1748    DeckElevator1 = 7296,
1749    DeckElevator2 = 7328,
1750    Catapult1 = 7360,
1751    Catapult2 = 7392,
1752    JetBlastDeflector1 = 7424,
1753    JetBlastDeflector2 = 7456,
1754    ArrestorWires1 = 7488,
1755    ArrestorWires2 = 7520,
1756    ArrestorWires3 = 7552,
1757    WingFold = 7584,
1758    FuselageFold = 7616,
1759    MainCargoDoor = 7648,
1760    CargoRamp = 7680,
1761    AirtoAirRefuelingBoom = 7712,
1762    PrimaryAerialRefuelingReceptacleDoor = 7744,
1763    SecondaryAerialRefuelingReceptacleDoor = 7776,
1764    AerialRefuelingReceptacleLatch = 7808,
1765    CargoDoor1 = 7840,
1766    CargoDoor2 = 7872,
1767    CargoDoor3 = 7904,
1768    CargoDoor4 = 7936,
1769    CargoDoor5 = 7968,
1770    CargoDoor6 = 8000,
1771    CargoDoor7 = 8032,
1772    CargoDoor8 = 8064,
1773    CargoDoor9 = 8096,
1774    CargoDoor10 = 8128,
1775    CentreRefuellingDrogue = 8160,
1776    PortRefuellingDrogue = 8192,
1777    StarboardRefuellingDrogue = 8224,
1778    SubmarineEngineExhaustMast = 8256,
1779    SubmarineMast1 = 8288,
1780    SubmarineMast2 = 8320,
1781    SubmarineMast3 = 8352,
1782    SubmarineMast4 = 8384,
1783    SubmarineMast5 = 8416,
1784    SubmarineMast6 = 8448,
1785    SubmarineMast7 = 8480,
1786    SubmarineMast8 = 8512,
1787    SubmarineMast9 = 8544,
1788    SubmarineMast10 = 8576,
1789    VectoredThrustNozzle = 8608,
1790    LeftDooroftheLeftWeaponBay = 8640,
1791    RightDooroftheLeftWeaponBay = 8672,
1792    LeftDooroftheRightWeaponBay = 8704,
1793    RightDooroftheRightWeaponBay = 8736,
1794    GunDoor = 8768,
1795    CountermeasureDoorLeft = 8800,
1796    CountermeasureDoorRight = 8832,
1797    HookDoorForward = 8864,
1798    HookDoorAft = 8896,
1799    LiftFanUpperDoor = 8928,
1800    LiftFanLowerDoorLeft = 8960,
1801    LiftFanLowerDoorRight = 8992,
1802    RefuelProbeDoor = 9024,
1803    LeftEngineNacelle = 9056,
1804    RightEngineNacelle = 9088,
1805    _1stLeftWheel = 9120,
1806    _1stRightWheel = 9152,
1807    _2ndLeftWheel = 9184,
1808    _2ndRightWheel = 9216,
1809    _3rdLeftWheel = 9248,
1810    _3rdRightWheel = 9280,
1811    _4thLeftWheel = 9312,
1812    _4thRightWheel = 9344,
1813    _5thLeftWheel = 9376,
1814    _5thRightWheel = 9408,
1815    _6thLeftWheel = 9440,
1816    _6thRightWheel = 9472,
1817    _7thLeftWheel = 9504,
1818    _7thRightWheel = 9536,
1819    _8thLeftWheel = 9568,
1820    _8thRightWheel = 9600,
1821    _9thLeftWheel = 9632,
1822    _9thRightWheel = 9664,
1823    _10thLeftWheel = 9696,
1824    _10thRightWheel = 9728,
1825    RefuelingProbe = 9760,
1826    SteeringWheel = 9792,
1827    CraneBody = 9824,
1828    CraneArm1 = 9856,
1829    CraneArm2 = 9888,
1830    CraneArm3 = 9920,
1831    CraneBoom = 9952,
1832    CraneHook = 9984,
1833    Trailer = 10016,
1834    RollerLeft = 10048,
1835    RollerRight = 10080,
1836    PrimaryGunRecoil = 10112,
1837    SecondaryGunRecoil = 10144,
1838}
1839
1840impl ArticulatedPartsTypeClass {
1841    #[must_use]
1842    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1843        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
1844    }
1845}
1846
1847// SISO-REF-010-2023 MunitionDescriptorWarhead [UID 60]
1848#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1849pub enum MunitionDescriptorWarhead {
1850    #[default]
1851    Other = 0,
1852    Cargo = 10,
1853    FuelAirExplosive = 20,
1854    GlassBeads = 30,
1855    _1um = 31,
1856    _5um = 32,
1857    _10um = 33,
1858    HighExplosive = 1000,
1859    HEPlastic = 1100,
1860    HEIncendiary = 1200,
1861    HEFragmentation = 1300,
1862    HEAntiTank = 1400,
1863    HEBomblets = 1500,
1864    HEShapedCharge = 1600,
1865    HEContinuousRod = 1610,
1866    HETungstenBall = 1615,
1867    HEBlastFragmentation = 1620,
1868    HESteerableDartswithHE = 1625,
1869    HEDarts = 1630,
1870    HEFlechettes = 1635,
1871    HEDirectedFragmentation = 1640,
1872    HESemiArmorPiercing = 1645,
1873    HEShapedChargeFragmentation = 1650,
1874    HESemiArmorPiercingFragmentation = 1655,
1875    HEHollowCharge = 1660,
1876    HEDoubleHollowCharge = 1665,
1877    HEGeneralPurpose = 1670,
1878    HEBlastPenetrator = 1675,
1879    HERodPenetrator = 1680,
1880    HEAntiPersonnel = 1685,
1881    HEShapedChargeFragmentationIncendiary = 1690,
1882    HEPenetratorBlastFragmentation = 1695,
1883    Smoke = 2000,
1884    WP = 2005,
1885    FOGO = 2010,
1886    HC = 2015,
1887    Illumination = 3000,
1888    Practice = 4000,
1889    Blank = 4001,
1890    Dummy = 4002,
1891    Kinetic = 5000,
1892    Mines = 6000,
1893    Nuclear = 7000,
1894    NuclearIMT = 7010,
1895    NuclearVariousYields = 7011,
1896    ChemicalGeneral = 8000,
1897    ChemicalBlisterAgent = 8100,
1898    HD = 8110,
1899    ThickenedHD = 8115,
1900    DustyHD = 8120,
1901    L = 8125,
1902    HN3 = 8130,
1903    HL = 8135,
1904    CX = 8140,
1905    DMMP = 8145,
1906    DMHP = 8150,
1907    DMA = 8155,
1908    DEM = 8160,
1909    PX = 8165,
1910    ChemicalBloodAgent = 8200,
1911    AC = 8210,
1912    CK = 8215,
1913    CG = 8220,
1914    ChemicalNerveAgent = 8300,
1915    VX = 8310,
1916    ThickenedVX = 8315,
1917    DustyVX = 8320,
1918    GA = 8325,
1919    ThickenedGA = 8330,
1920    DustyGA = 8335,
1921    GB = 8340,
1922    ThickenedGB = 8345,
1923    DustyGB = 8350,
1924    GD = 8355,
1925    ThickenedGD = 8360,
1926    DustyGD = 8365,
1927    GF = 8370,
1928    ThickenedGF = 8375,
1929    DustyGF = 8380,
1930    SVX = 8385,
1931    BIS = 8410,
1932    TCP = 8415,
1933    MS = 8425,
1934    TEP = 8430,
1935    H2O = 8445,
1936    TO1 = 8450,
1937    TO2 = 8455,
1938    TO3 = 8460,
1939    SulfurHexafluoride = 8465,
1940    AA = 8470,
1941    HF = 8475,
1942    Biological = 9000,
1943    BiologicalVirus = 9100,
1944    BiologicalBacteria = 9200,
1945    BiologicalRickettsia = 9300,
1946    BiologicalGeneticallyModifiedMicroorganisms = 9400,
1947    BiologicalToxin = 9500,
1948}
1949
1950impl MunitionDescriptorWarhead {
1951    #[must_use]
1952    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
1953        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
1954    }
1955}
1956
1957// SISO-REF-010-2023 MunitionDescriptorFuse [UID 61]
1958#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
1959pub enum MunitionDescriptorFuse {
1960    #[default]
1961    Other = 0,
1962    IntelligentInfluence = 10,
1963    Sensor = 20,
1964    Selfdestruct = 30,
1965    UltraQuick = 40,
1966    Body = 50,
1967    DeepIntrusion = 60,
1968    Multifunction = 100,
1969    PointDetonation = 200,
1970    BaseDetonation = 300,
1971    Contact = 1000,
1972    ContactInstant = 1100,
1973    ContactDelayed = 1200,
1974    _10msDelay = 1201,
1975    _20msDelay = 1202,
1976    _50msDelay = 1205,
1977    _60msDelay = 1206,
1978    _100msDelay = 1210,
1979    _125msDelay = 1212,
1980    _250msDelay = 1225,
1981    _5msDelay = 1250,
1982    _15msDelay = 1251,
1983    _25msDelay = 1252,
1984    _30msDelay = 1253,
1985    _35msDelay = 1254,
1986    _40msDelay = 1255,
1987    _45msDelay = 1256,
1988    _90msDelay = 1257,
1989    _120msDelay = 1258,
1990    _180msDelay = 1259,
1991    _240msDelay = 1260,
1992    ContactElectronic = 1300,
1993    ContactGraze = 1400,
1994    ContactCrush = 1500,
1995    ContactHydrostatic = 1600,
1996    ContactMechanical = 1700,
1997    ContactChemical = 1800,
1998    ContactPiezoelectric = 1900,
1999    ContactPointInitiating = 1910,
2000    ContactPointInitiatingBaseDetonating = 1920,
2001    ContactBaseDetonating = 1930,
2002    ContactBallisticCapandBase = 1940,
2003    ContactBase = 1950,
2004    ContactNose = 1960,
2005    ContactFittedinStandoffProbe = 1970,
2006    ContactNonaligned = 1980,
2007    Timed = 2000,
2008    TimedProgrammable = 2100,
2009    TimedBurnout = 2200,
2010    TimedPyrotechnic = 2300,
2011    TimedElectronic = 2400,
2012    TimedBaseDelay = 2500,
2013    TimedReinforcedNoseImpactDelay = 2600,
2014    TimedShortDelayImpact = 2700,
2015    _10msDelay2 = 2701,
2016    _20msDelay2 = 2702,
2017    _50msDelay2 = 2705,
2018    _60msDelay2 = 2706,
2019    _100msDelay2 = 2710,
2020    _125msDelay2 = 2712,
2021    _250msDelay2 = 2725,
2022    TimedNoseMountedVariableDelay = 2800,
2023    TimedLongDelaySide = 2900,
2024    TimedSelectableDelay = 2910,
2025    TimedImpact = 2920,
2026    TimedSequence = 2930,
2027    Proximity = 3000,
2028    ProximityActiveLaser = 3100,
2029    ProximityMagnetic = 3200,
2030    ProximityActiveRadar = 3300,
2031    ProximityRadioFrequency = 3400,
2032    ProximityProgrammable = 3500,
2033    ProximityProgrammablePrefragmented = 3600,
2034    ProximityInfrared = 3700,
2035    Command = 4000,
2036    CommandElectronicRemotelySet = 4100,
2037    Altitude1 = 5000,
2038    AltitudeRadioAltimeter = 5100,
2039    AltitudeAirBurst = 5200,
2040    Depth = 6000,
2041    Acoustic = 7000,
2042    Pressure = 8000,
2043    PressureDelay = 8010,
2044    Inert = 8100,
2045    Dummy = 8110,
2046    Practice = 8120,
2047    PlugRepresenting = 8130,
2048    Training = 8150,
2049    Pyrotechnic = 9000,
2050    PyrotechnicDelay = 9010,
2051    Electrooptical = 9100,
2052    Electromechanical = 9110,
2053    ElectromechanicalNose = 9120,
2054    Strikerless = 9200,
2055    StrikerlessNoseImpact = 9210,
2056    StrikerlessCompressionIgnition = 9220,
2057    CompressionIgnition = 9300,
2058    CompressionIgnitionStrikerlessNoseImpact = 9310,
2059    Percussion = 9400,
2060    PercussionInstantaneous = 9410,
2061    Electronic = 9500,
2062    ElectronicInternallyMounted = 9510,
2063    ElectronicRangeSetting = 9520,
2064    ElectronicProgrammed = 9530,
2065    Mechanical = 9600,
2066    MechanicalNose = 9610,
2067    MechanicalTail = 9620,
2068}
2069
2070impl MunitionDescriptorFuse {
2071    #[must_use]
2072    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
2073        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
2074    }
2075}
2076
2077// SISO-REF-010-2023 DetonationResult [UID 62]
2078#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
2079pub enum DetonationResult {
2080    #[default]
2081    Other = 0,
2082    EntityImpact = 1,
2083    EntityProximateDetonation = 2,
2084    GroundImpact = 3,
2085    GroundProximateDetonation = 4,
2086    Detonation = 5,
2087    NoneorNoDetonation = 6,
2088    HEhitsmall = 7,
2089    HEhitmedium = 8,
2090    HEhitlarge = 9,
2091    Armorpiercinghit = 10,
2092    Dirtblastsmall = 11,
2093    Dirtblastmedium = 12,
2094    Dirtblastlarge = 13,
2095    Waterblastsmall = 14,
2096    Waterblastmedium = 15,
2097    Waterblastlarge = 16,
2098    Airhit = 17,
2099    Buildinghitsmall = 18,
2100    Buildinghitmedium = 19,
2101    Buildinghitlarge = 20,
2102    Mineclearinglinecharge = 21,
2103    Environmentobjectimpact = 22,
2104    Environmentobjectproximatedetonation = 23,
2105    WaterImpact = 24,
2106    AirBurst = 25,
2107    Killwithfragmenttype1 = 26,
2108    Killwithfragmenttype2 = 27,
2109    Killwithfragmenttype3 = 28,
2110    Killwithfragmenttype1afterflyoutfailure = 29,
2111    Killwithfragmenttype2afterflyoutfailure = 30,
2112    Missduetoflyoutfailure = 31,
2113    Missduetoendgamefailure = 32,
2114    Missduetoflyoutandendgamefailure = 33,
2115}
2116
2117impl DetonationResult {
2118    #[must_use]
2119    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
2120        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
2121    }
2122}
2123
2124impl FieldSerialize for DetonationResult {
2125    fn serialize_field(&self, buf: &mut BytesMut) {
2126        buf.put_u8(*self as u8);
2127    }
2128}
2129
2130impl FieldDeserialize for DetonationResult {
2131    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
2132        Self::deserialize(buf)
2133    }
2134}
2135
2136impl FieldLen for DetonationResult {
2137    fn field_len(&self) -> usize {
2138        1
2139    }
2140}
2141
2142// SISO-REF-010-2023 ServiceRequestServiceTypeRequested [UID 63]
2143#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
2144pub enum ServiceRequestServiceTypeRequested {
2145    #[default]
2146    Other = 0,
2147    Resupply = 1,
2148    Repair = 2,
2149    AerialRefuelingHighFidelity = 3,
2150    AerialRefuelingLowFidelity = 4,
2151}
2152
2153impl ServiceRequestServiceTypeRequested {
2154    #[must_use]
2155    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
2156        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
2157    }
2158}
2159
2160impl FieldSerialize for ServiceRequestServiceTypeRequested {
2161    fn serialize_field(&self, buf: &mut BytesMut) {
2162        buf.put_u8(*self as u8);
2163    }
2164}
2165
2166impl FieldDeserialize for ServiceRequestServiceTypeRequested {
2167    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
2168        Self::deserialize(buf)
2169    }
2170}
2171
2172impl FieldLen for ServiceRequestServiceTypeRequested {
2173    fn field_len(&self) -> usize {
2174        1
2175    }
2176}
2177
2178// SISO-REF-010-2023 RepairCompleteRepair [UID 64]
2179#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
2180pub enum RepairCompleteRepair {
2181    #[default]
2182    NoRepairsPerformed = 0,
2183    AllRequestedrepairSperformed = 1,
2184    MotorEngine = 10,
2185    Starter = 20,
2186    Alternator = 30,
2187    Generator = 40,
2188    Battery = 50,
2189    EngineCoolantLeak = 60,
2190    FuelFilter = 70,
2191    TransmissionOilLeak = 80,
2192    EngineOilLeak = 90,
2193    Pumps = 100,
2194    DriveTrainFilters = 110,
2195    Transmission = 120,
2196    Brakes = 130,
2197    SuspensionSystem = 140,
2198    OilFilter = 150,
2199    Hull = 1000,
2200    Airframe = 1010,
2201    TruckBody = 1020,
2202    TankBody = 1030,
2203    TrailerBody = 1040,
2204    Turret = 1050,
2205    Propeller = 1500,
2206    EnvironmentFilters = 1520,
2207    Wheels = 1540,
2208    Tire = 1550,
2209    Track = 1560,
2210    GunElevationDrive = 2000,
2211    GunStabilizationSystem = 2010,
2212    GunnersPrimarySight = 2020,
2213    CommandersExtensionToTheGPS = 2030,
2214    LoadingMechanism = 2040,
2215    GunnersAuxiliarySight = 2050,
2216    GunnersControlPanel = 2060,
2217    GunnersControlAssemblyHandle = 2070,
2218    CommandersControlHandlesAssembly = 2090,
2219    CommandersWeaponStation = 2100,
2220    CommandersIndependentThermalViewer = 2110,
2221    GeneralWeapons = 2120,
2222    FuelTransferPump = 4000,
2223    FuelLines = 4010,
2224    Gauges = 4020,
2225    GeneralFuelSystem = 4030,
2226    ElectronicWarfareSystems = 4500,
2227    DetectionSystems = 4600,
2228    DetectionSystemsRadioFrequency = 4610,
2229    DetectionSystemsMicrowave = 4620,
2230    DetectionSystemsInfrared = 4630,
2231    DetectionSystemsLaser = 4640,
2232    RangeFinders = 4700,
2233    RangeOnlyrAdar = 4710,
2234    LaserRangeFinder = 4720,
2235    ElectronicSystems = 4800,
2236    ElectronicsSystemsRadioFrequency = 4810,
2237    ElectronicsSystemsMicrowave = 4820,
2238    ElectronicsSystemsInfrared = 4830,
2239    ElectronicsSystemsLaser = 4840,
2240    Radios = 5000,
2241    CommunicationSystems = 5010,
2242    Intercoms = 5100,
2243    Encoders = 5200,
2244    EncryptionDevices = 5250,
2245    Decoders = 5300,
2246    DecryptionDevices = 5350,
2247    Computers = 5500,
2248    NavigationAndControlSystems = 6000,
2249    FireControlSystems = 6500,
2250    AirSupply = 8000,
2251    LifeSupportSystemsFilters = 8010,
2252    WaterSupply = 8020,
2253    RefrigerationSystem = 8030,
2254    ChemicalBiologicalAndRadiologicalProtection = 8040,
2255    WaterWashdownSystems = 8050,
2256    DecontaminationSystems = 8060,
2257    Watersupply = 9000,
2258    Coolingsystem = 9010,
2259    Winches = 9020,
2260    Catapults = 9030,
2261    Cranes = 9040,
2262    Launchers = 9050,
2263    Lifeboats = 10000,
2264    Landingcraft = 10010,
2265    Ejectionseats = 10020,
2266}
2267
2268impl RepairCompleteRepair {
2269    #[must_use]
2270    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
2271        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
2272    }
2273}
2274
2275impl FieldSerialize for RepairCompleteRepair {
2276    fn serialize_field(&self, buf: &mut BytesMut) {
2277        buf.put_u16(*self as u16);
2278    }
2279}
2280
2281impl FieldDeserialize for RepairCompleteRepair {
2282    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
2283        Self::deserialize(buf)
2284    }
2285}
2286
2287impl FieldLen for RepairCompleteRepair {
2288    fn field_len(&self) -> usize {
2289        2
2290    }
2291}
2292
2293// SISO-REF-010-2023 RepairResponseRepairResult [UID 65]
2294#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
2295pub enum RepairResponseRepairResult {
2296    #[default]
2297    Other = 0,
2298    RepairEnded = 1,
2299    InvalidRepair = 2,
2300    RepairInterrupted = 3,
2301    ServiceCanceledByTheSupplier = 4,
2302}
2303
2304impl RepairResponseRepairResult {
2305    #[must_use]
2306    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
2307        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
2308    }
2309}
2310
2311impl FieldSerialize for RepairResponseRepairResult {
2312    fn serialize_field(&self, buf: &mut BytesMut) {
2313        buf.put_u8(*self as u8);
2314    }
2315}
2316
2317impl FieldDeserialize for RepairResponseRepairResult {
2318    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
2319        Self::deserialize(buf)
2320    }
2321}
2322
2323impl FieldLen for RepairResponseRepairResult {
2324    fn field_len(&self) -> usize {
2325        1
2326    }
2327}
2328
2329// SISO-REF-010-2023 VariableRecordTypes [UID 66]
2330#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
2331pub enum VariableRecordTypes {
2332    #[default]
2333    EntityIDList = 1,
2334    DDCPJoinTransactionJoinRequestMessage = 1001,
2335    DDCPSetPlaybackWindowTransactionSetPlaybackWindowRequestMessage = 1002,
2336    DDCPLoadMissionRecordingTransactionLoadMissionRecordingRequestMessage = 1003,
2337    DDCPCueTransactionCueRequestMessage = 1004,
2338    DDCPPlayTransactionPlayRequestMessage = 1005,
2339    DDCPStopTransactionStopRequestMessage = 1006,
2340    DDCPPauseTransactionPauseRequestMessage = 1007,
2341    DDCPEndTransactionEndRequestMessage = 1009,
2342    DDCPJoinResponseMessage = 1051,
2343    DDCPRequestReceiptMessage = 1052,
2344    DDCPPlaybackWindowConfirmedMessage = 1053,
2345    DDCPMissionRecordingLoadedMessage = 1054,
2346    DDCPCueConfirmedMessage = 1055,
2347    DDCPTimetoCompleteMessage = 1056,
2348    DDCPPlayCommencedMessage = 1057,
2349    DDCPStopConfirmedMessage = 1058,
2350    DDCPPauseConfirmedMessage = 1059,
2351    DDCPEndResponseMessage = 1061,
2352    DDCPMasterAnnounceMessage = 1111,
2353    DDCPDeviceAnnounceMessage = 1112,
2354    DDCPDeviceExitMessage = 1114,
2355    DDCPDeviceHeartbeatMessage = 1115,
2356    DDCPMasterTimeSyncMessage = 1116,
2357    DDCPErrorMessage = 1118,
2358    DDCPMasterStopSyncMessage = 1119,
2359    DDCPMasterTransitionMessage = 1120,
2360    MissionTime = 1200,
2361    HighFidelityHAVEQUICKSATURNRadio = 3000,
2362    BlankingSectorattributerecord = 3500,
2363    AngleDeceptionattributerecord = 3501,
2364    FalseTargetsattributerecord = 3502,
2365    DEPrecisionAimpointrecord = 4000,
2366    DEAreaAimpointrecord = 4001,
2367    DirectedEnergyDamageDescriptionrecord = 4500,
2368    CryptoControl = 5000,
2369    Mode5STransponderLocation = 5001,
2370    Mode5STransponderLocationError = 5002,
2371    SquitterAirbornePositionReport = 5003,
2372    SquitterAirborneVelocityReport = 5004,
2373    SquitterSurfacePositionReport = 5005,
2374    SquitterIdentificationReport = 5006,
2375    GICB = 5007,
2376    SquitterEventDrivenReport = 5008,
2377    AntennaLocation = 5009,
2378    BasicInteractive = 5010,
2379    InteractiveMode4Reply = 5011,
2380    InteractiveMode5Reply = 5012,
2381    InteractiveBasicMode5 = 5013,
2382    InteractiveBasicModeS = 5014,
2383    IOEffect = 5500,
2384    IOCommunicationsNode = 5501,
2385    Identification1 = 10000,
2386    TrainerInitialConditionsFilename = 10010,
2387    Increment3_1MissionDataLoadName = 10020,
2388    Increment2MissionDataLoadName = 10030,
2389    SetMarkpointCommand = 10110,
2390    MarkpointID = 10115,
2391    ReactionLevel = 10140,
2392    WeaponReload = 10150,
2393    CESEntitySetClearStatus = 10157,
2394    ActivateEntity = 10160,
2395    DisengageReengage1 = 10170,
2396    FuelFreeze = 10190,
2397    FireLaunchDispense = 10250,
2398    TargetAssignment = 10254,
2399    CICEnable = 10256,
2400    ShootInhibit = 10258,
2401    Posture = 10259,
2402    JammerState = 10262,
2403    JammerType = 10263,
2404    DynamicTargeting = 10264,
2405    ManualJammingOnOverride = 10267,
2406    SOJAxis = 10268,
2407    EmitterOverride1 = 10280,
2408    Shields1 = 10290,
2409    CrashOverride = 10300,
2410    StopBuzzer = 10306,
2411    TargetLasingOnOff = 10307,
2412    TargetLasingLaserCode = 10308,
2413    PowerPlant = 10310,
2414    TacticalLightingOnOffControlLightControl = 10311,
2415    TacticalLightingBlinkerControlBlinkerValue = 10312,
2416    TacticalLightingOnOffControlLightControlType = 10313,
2417    ParkVehicle = 10314,
2418    SignalingOnOff = 10315,
2419    SignalingDevice = 10316,
2420    OwnshipID = 10400,
2421    StateChange = 10600,
2422    EntityType1 = 11000,
2423    Concatenated = 11100,
2424    Kind = 11110,
2425    Domain = 11120,
2426    Country = 11130,
2427    Category = 11140,
2428    Subcategory = 11150,
2429    Specific = 11160,
2430    Extra = 11170,
2431    ForceID1 = 11180,
2432    ForceID2 = 11200,
2433    Description = 11300,
2434    TankerBoomControl = 11500,
2435    AirportLights = 11501,
2436    WeatherPost = 11502,
2437    LocalizerandGlideSlope = 11503,
2438    TACANNavAids = 11504,
2439    AlternativeEntityType1 = 12000,
2440    Kind2 = 12110,
2441    Domain2 = 12120,
2442    Country2 = 12130,
2443    Category2 = 12140,
2444    Subcategory2 = 12150,
2445    Specific2 = 12160,
2446    Extra2 = 12170,
2447    Description2 = 12300,
2448    EntityMarking = 13000,
2449    EntityMarkingCharacters = 13100,
2450    CrewID = 13200,
2451    TaskOrganization = 14000,
2452    RegimentName = 14200,
2453    BattalionName = 14300,
2454    CompanyName = 14400,
2455    PlatoonName = 14500,
2456    SquadName = 14520,
2457    TeamName = 14540,
2458    BumperNumber = 14600,
2459    VehicleNumber = 14700,
2460    UnitNumber = 14800,
2461    DISIdentity = 15000,
2462    DISSiteID = 15100,
2463    DISHostID = 15200,
2464    DISEntityID = 15300,
2465    MountIntent = 15400,
2466    TetherUnthetherCommandID = 15500,
2467    TeleportEntityDataRecord = 15510,
2468    DISAggregateID = 15600,
2469    OwnershipStatus = 15800,
2470    Reconstitute = 19177,
2471    Loads = 20000,
2472    CrewMembers = 21000,
2473    CrewMemberID = 21100,
2474    Health = 21200,
2475    JobAssignment = 21300,
2476    Fuel = 23000,
2477    Quantity1 = 23100,
2478    Quantity2 = 23105,
2479    Ammunition = 24000,
2480    _120mmHEATquantity = 24001,
2481    _120mmSABOTquantity = 24002,
2482    _12_7mmM8quantity = 24003,
2483    _12_7mmM20quantity = 24004,
2484    _7_62mmM62quantity = 24005,
2485    M250UKL8A1quantity = 24006,
2486    M250UKL8A3quantity = 24007,
2487    _7_62mmM80quantity = 24008,
2488    _12_7mmquantity = 24009,
2489    _7_62mmquantity = 24010,
2490    Minesquantity = 24060,
2491    Type = 24100,
2492    Kind3 = 24110,
2493    Domain3 = 24120,
2494    Country3 = 24130,
2495    Category3 = 24140,
2496    Subcategory3 = 24150,
2497    Extra3 = 24160,
2498    Description3 = 24300,
2499    Cargo = 25000,
2500    VehicleMass = 26000,
2501    SupplyQuantity = 27000,
2502    Armament = 28000,
2503    Status = 30000,
2504    Activateentity = 30010,
2505    SubscriptionState = 30100,
2506    Roundtriptimedelay = 30300,
2507    TADILJmessagecountLabel0 = 30400,
2508    TADILJmessagecountLabel1 = 30401,
2509    TADILJmessagecountLabel2 = 30402,
2510    TADILJmessagecountLabel3 = 30403,
2511    TADILJmessagecountLabel4 = 30404,
2512    TADILJmessagecountLabel5 = 30405,
2513    TADILJmessagecountLabel6 = 30406,
2514    TADILJmessagecountLabel7 = 30407,
2515    TADILJmessagecountLabel8 = 30408,
2516    TADILJmessagecountLabel9 = 30409,
2517    TADILJmessagecountLabel10 = 30410,
2518    TADILJmessagecountLabel11 = 30411,
2519    TADILJmessagecountLabel12 = 30412,
2520    TADILJmessagecountLabel13 = 30413,
2521    TADILJmessagecountLabel14 = 30414,
2522    TADILJmessagecountLabel15 = 30415,
2523    TADILJmessagecountLabel16 = 30416,
2524    TADILJmessagecountLabel17 = 30417,
2525    TADILJmessagecountLabel18 = 30418,
2526    TADILJmessagecountLabel19 = 30419,
2527    TADILJmessagecountLabel20 = 30420,
2528    TADILJmessagecountLabel21 = 30421,
2529    TADILJmessagecountLabel22 = 30422,
2530    TADILJmessagecountLabel23 = 30423,
2531    TADILJmessagecountLabel24 = 30424,
2532    TADILJmessagecountLabel25 = 30425,
2533    TADILJmessagecountLabel26 = 30426,
2534    TADILJmessagecountLabel27 = 30427,
2535    TADILJmessagecountLabel28 = 30428,
2536    TADILJmessagecountLabel29 = 30429,
2537    TADILJmessagecountLabel30 = 30430,
2538    TADILJmessagecountLabel31 = 30431,
2539    Position = 31000,
2540    Routetype = 31010,
2541    MilGrid10 = 31100,
2542    GeocentricCoordinates = 31200,
2543    X = 31210,
2544    Y = 31220,
2545    Z = 31230,
2546    Latitude1 = 31300,
2547    Longitude1 = 31400,
2548    LineofSight = 31500,
2549    X1 = 31510,
2550    Y1 = 31520,
2551    Z1 = 31530,
2552    Altitude2 = 31600,
2553    DestinationLatitude = 31700,
2554    DestinationLongitude = 31800,
2555    DestinationAltitude = 31900,
2556    Orientation = 32000,
2557    HullHeadingAngle = 32100,
2558    HullPitchAngle = 32200,
2559    RollAngle = 32300,
2560    X2 = 32500,
2561    Y2 = 32600,
2562    Z2 = 32700,
2563    Appearance = 33000,
2564    AmbientLighting = 33100,
2565    Lights1 = 33101,
2566    PaintScheme = 33200,
2567    Smoke = 33300,
2568    TrailingEffects = 33400,
2569    Flaming = 33500,
2570    Marking = 33600,
2571    MinePlowsAttached = 33710,
2572    MineRollersAttached = 33720,
2573    TankTurretAzimuth = 33730,
2574    FailuresandMalfunctions = 34000,
2575    Age = 34100,
2576    Kilometers = 34110,
2577    Damage = 35000,
2578    Cause = 35050,
2579    MobilityKill1 = 35100,
2580    FirePowerKill = 35200,
2581    PersonnelCasualties = 35300,
2582    Velocity = 36000,
2583    Xvelocity = 36100,
2584    Yvelocity = 36200,
2585    Zvelocity = 36300,
2586    Speed1 = 36400,
2587    Acceleration = 37000,
2588    Xacceleration = 37100,
2589    Yacceleration = 37200,
2590    Zacceleration = 37300,
2591    EngineStatus = 38100,
2592    PrimaryTargetLine = 39000,
2593    Exercise = 40000,
2594    ExerciseState = 40010,
2595    RestartRefresh = 40015,
2596    AFATDSFileName = 40020,
2597    TerrainDatabase = 41000,
2598    Missions = 42000,
2599    MissionID = 42100,
2600    MissionType = 42200,
2601    MissionRequestTimeStamp = 42300,
2602    ExerciseDescription = 43000,
2603    Name = 43100,
2604    Entities = 43200,
2605    Version = 43300,
2606    GuiseMode = 43410,
2607    SimulationApplicationActiveStatus = 43420,
2608    SimulationApplicationRoleRecord = 43430,
2609    SimulationApplicationState = 43440,
2610    VisualOutputMode = 44000,
2611    SimulationManagerRole = 44100,
2612    SimulationManagerSiteID = 44110,
2613    SimulationManagerApplicID = 44120,
2614    SimulationManagerEntityID = 44130,
2615    SimulationManagerActiveStatus = 44140,
2616    AfterActiveReviewRole = 44200,
2617    AfterActiveReviewSiteID = 44210,
2618    AfterActiveApplicID = 44220,
2619    AfterActiveReviewEntityID = 44230,
2620    AfterActiveReviewActiveStatus = 44240,
2621    ExerciseLoggerRole = 44300,
2622    ExerciseLoggerSiteID = 44310,
2623    ExerciseLoggerApplicID = 44320,
2624    ExerciseEntityID = 44330,
2625    ExerciseLoggerActiveStatus = 44340,
2626    SyntheticEnvironmentManagerRole = 44400,
2627    SyntheticEnvironmentManagerSiteID = 44410,
2628    SyntheticEnvironmentManagerApplicID = 44420,
2629    SyntheticEnvironmentManagerEntityID = 44430,
2630    SyntheticEnvironmentManagerActiveStatus = 44440,
2631    SIMNETDISTranslatorRole = 44500,
2632    SIMNETDISTranslatorSiteID = 44510,
2633    SIMNETDISTranslatorApplicID = 44520,
2634    SIMNETDISTranslatorEntityID = 44530,
2635    SIMNETDISTranslatorActiveStatus = 44540,
2636    ApplicationRate = 45000,
2637    ApplicationTime = 45005,
2638    ApplicationTimestep = 45010,
2639    FeedbackTime = 45020,
2640    SimulationRate = 45030,
2641    SimulationTime = 45040,
2642    SimulationTimestep = 45050,
2643    TimeInterval = 45060,
2644    TimeLatency = 45070,
2645    TimeScheme = 45080,
2646    ExerciseElapsedTime = 46000,
2647    ElapsedTime = 46010,
2648    Environment = 50000,
2649    ScenarioDate = 50103,
2650    TimeDateValid = 50106,
2651    ScenarioTime = 50118,
2652    SnowEnableDisable = 50120,
2653    WeatherAttributesRequest = 50124,
2654    METHeartbeatMessage = 50126,
2655    ContrailsEnable = 50600,
2656    ContrailAltitudes = 50700,
2657    Weather1 = 51000,
2658    WeatherCondition = 51010,
2659    ThermalCondition = 51100,
2660    ThermalVisibility1 = 51110,
2661    ThermalVisibility2 = 51111,
2662    Time1 = 52000,
2663    Time2 = 52001,
2664    TimeofDayDiscrete = 52100,
2665    TimeofDayContinuous = 52200,
2666    TimeMode = 52300,
2667    TimeScene = 52305,
2668    CurrentHour = 52310,
2669    CurrentMinute = 52320,
2670    CurrentSecond = 52330,
2671    Azimuth1 = 52340,
2672    MaximumElevation = 52350,
2673    TimeZone = 52360,
2674    TimeRate = 52370,
2675    TheNumberOfSimulationSecondsSinceTheStartOfTheExercise = 52380,
2676    TimeSunriseEnabled = 52400,
2677    SunriseHour = 52410,
2678    SunriseMinute = 52420,
2679    SunriseSecond = 52430,
2680    SunriseAzimuth = 52440,
2681    TimeSunsetEnabled = 52500,
2682    SunsetHour1 = 52510,
2683    SunsetHour2 = 52511,
2684    SunsetMinute = 52520,
2685    SunsetSecond = 52530,
2686    Date1 = 52600,
2687    DateEuropean = 52601,
2688    DateUS = 52602,
2689    Month = 52610,
2690    Day = 52620,
2691    Year = 52630,
2692    Clouds = 53000,
2693    CloudLayerEnable = 53050,
2694    CloudLayerSelection = 53060,
2695    Visibility = 53100,
2696    BaseAltitude1 = 53200,
2697    BaseAltitude2 = 53250,
2698    Ceiling1 = 53300,
2699    Ceiling2 = 53350,
2700    Characteristics = 53400,
2701    ConcentrationLength = 53410,
2702    Transmittance = 53420,
2703    Radiance = 53430,
2704    Precipitation = 54000,
2705    Rain = 54100,
2706    Fog = 55000,
2707    Visibility1 = 55100,
2708    Visibility2 = 55101,
2709    Visibility3 = 55105,
2710    Density1 = 55200,
2711    Base = 55300,
2712    ViewLayerfromabove_ = 55401,
2713    TransitionRange = 55410,
2714    Bottom1 = 55420,
2715    Bottom2 = 55425,
2716    Ceiling3 = 55430,
2717    Ceiling4 = 55435,
2718    HeavenlyBodies = 56000,
2719    Sun = 56100,
2720    SunVisible = 56105,
2721    Position1 = 56110,
2722    SunPositionElevationDegrees = 56111,
2723    PositionAzimuth1 = 56120,
2724    SunPositionAzimuthDegrees = 56121,
2725    PositionElevation1 = 56130,
2726    PositionIntensity1 = 56140,
2727    Moon = 56200,
2728    MoonVisible = 56205,
2729    Position2 = 56210,
2730    PositionAzimuth2 = 56220,
2731    MoonPositionAzimuthDegrees = 56221,
2732    PositionElevation2 = 56230,
2733    MoonPositionElevationDegrees = 56231,
2734    PositionIntensity2 = 56240,
2735    Horizon = 56310,
2736    HorizonAzimuth = 56320,
2737    HorizonElevation = 56330,
2738    HorizonHeading = 56340,
2739    HorizonIntensity = 56350,
2740    Humidity = 57200,
2741    Visibility4 = 57300,
2742    Winds = 57400,
2743    Speed2 = 57410,
2744    WindSpeedKnots = 57411,
2745    WindDirection1 = 57420,
2746    WindDirectionDegrees = 57421,
2747    Rainsoak = 57500,
2748    TideSpeed = 57610,
2749    TideSpeedKnots = 57611,
2750    TideDirection = 57620,
2751    TideDirectionDegrees = 57621,
2752    Haze = 58000,
2753    Visibility5 = 58100,
2754    Visibility6 = 58105,
2755    Density2 = 58200,
2756    Ceiling5 = 58430,
2757    Ceiling6 = 58435,
2758    ContaminantsandObscurants = 59000,
2759    ContaminantObscurantType = 59100,
2760    Persistence = 59110,
2761    ChemicalDosage = 59115,
2762    ChemicalAirConcentration = 59120,
2763    ChemicalGroundDeposition = 59125,
2764    ChemicalMaximumGroundDeposition = 59130,
2765    ChemicalDosageThreshold = 59135,
2766    BiologicalDosage = 59140,
2767    BiologicalAirConcentration = 59145,
2768    BiologicalDosageThreshold = 59150,
2769    BiologicalBinnedParticleCount = 59155,
2770    RadiologicalDosage = 59160,
2771    Communications = 60000,
2772    FireBottleReload = 61005,
2773    ChannelType1 = 61100,
2774    ChannelType2 = 61101,
2775    ChannelIdentification = 61200,
2776    AlphaIdentification = 61300,
2777    RadioIdentification = 61400,
2778    LandLineIdentification = 61500,
2779    IntercomIdentification = 61600,
2780    GroupNetworkChannelNumber = 61700,
2781    RadioCommunicationsStatus = 62100,
2782    BoomInterphone = 62101,
2783    StationaryRadioTransmittersDefaultTime = 62200,
2784    MovingRadioTransmittersDefaultTime = 62300,
2785    StationaryRadioSignalsDefaultTime = 62400,
2786    MovingRadioSignalDefaultTime = 62500,
2787    RadioInitializationTransecSecurityKey = 63101,
2788    RadioInitializationInternalNoiseLevel = 63102,
2789    RadioInitializationSquelchThreshold = 63103,
2790    RadioInitializationAntennaLocation = 63104,
2791    RadioInitializationAntennaPatternType = 63105,
2792    RadioInitializationAntennaPatternLength = 63106,
2793    RadioInitializationBeamDefinition = 63107,
2794    RadioInitializationTransmitHeartbeatTime = 63108,
2795    RadioInitializationTransmitDistanceThresholdVariableRecord = 63109,
2796    RadioChannelInitializationLockoutID = 63110,
2797    RadioChannelInitializationHopsetID = 63111,
2798    RadioChannelInitializationPresetFrequency = 63112,
2799    RadioChannelInitializationFrequencySyncTime = 63113,
2800    RadioChannelInitializationComsecKey = 63114,
2801    RadioChannelInitializationAlpha = 63115,
2802    AlgorithmParameters = 70000,
2803    DeadReckoningAlgorithm1 = 71000,
2804    DRALocationThreshold = 71100,
2805    DRAOrientationThreshold = 71200,
2806    DRATimeThreshold = 71300,
2807    SimulationManagementParameters = 72000,
2808    CheckpointInterval = 72100,
2809    TransmitterTimeThreshold = 72600,
2810    ReceiverTimeThreshold = 72700,
2811    InteroperabilityMode = 73000,
2812    SIMNETDataCollection = 74000,
2813    EventID = 75000,
2814    SourceSiteID = 75100,
2815    SourceHostID = 75200,
2816    ArticulatedParts = 90000,
2817    PartID = 90050,
2818    Index = 90070,
2819    Position3 = 90100,
2820    PositionRate = 90200,
2821    Extension = 90300,
2822    ExtensionRate = 90400,
2823    X3 = 90500,
2824    Xrate = 90600,
2825    Y3 = 90700,
2826    Yrate = 90800,
2827    Z3 = 90900,
2828    Zrate = 91000,
2829    Azimuth2 = 91100,
2830    AzimuthRate = 91200,
2831    Elevation = 91300,
2832    ElevationRate = 91400,
2833    Rotation2 = 91500,
2834    RotationRate = 91600,
2835    DRAAngularXVelocity = 100_001,
2836    DRAAngularYVelocity = 100_002,
2837    DRAAngularZVelocity = 100_003,
2838    AppearanceTrailingEffects = 100_004,
2839    AppearanceHatch = 100_005,
2840    AppearanceCharacterSet = 100_008,
2841    CapabilityAmmunitionSupplier = 100_010,
2842    CapabilityMiscellaneousSupplier = 100_011,
2843    CapabilityRepairProvider = 100_012,
2844    ArticulationParameter = 100_014,
2845    ArticulationParameterType1 = 100_047,
2846    ArticulationParameterValue1 = 100_048,
2847    TimeofDayScene = 100_058,
2848    LatitudeNorth = 100_061,
2849    LongitudeEast = 100_063,
2850    TacticalDriverStatus = 100_068,
2851    SonarSystemStatus = 100_100,
2852    Accomplishedaccept = 100_160,
2853    Upperlatitude = 100_161,
2854    LatitudeSouth = 100_162,
2855    Westernlongitude = 100_163,
2856    LongitudeWest = 100_164,
2857    CDROMNumber = 100_165,
2858    DTEDdiskID = 100_166,
2859    Altitude3 = 100_167,
2860    TacticalSystemStatus = 100_169,
2861    JTIDSStatus = 100_170,
2862    TADILJStatus = 100_171,
2863    DSDDStatus = 100_172,
2864    WeaponSystemStatus = 100_200,
2865    Subsystemstatus = 100_205,
2866    Numberofinterceptorsfired = 100_206,
2867    Numberofinterceptordetonations = 100_207,
2868    Numberofmessagebuffersdropped = 100_208,
2869    Satellitesensorbackground1 = 100_213,
2870    Satellitesensorbackground2 = 100_214,
2871    ScriptNumber = 100_218,
2872    EntityTrackUpdateData = 100_300,
2873    LocalForceTraining = 100_400,
2874    EntityTrackIdentityData = 100_500,
2875    EntityforTrackEvent = 100_510,
2876    IFFstatus = 100_520,
2877    EngagementData = 100_600,
2878    TargetLatitude = 100_610,
2879    TargetLongitude = 100_620,
2880    AreaofInterestCenterLatitude = 100_631,
2881    AreaofInterestCenterLongitude = 100_632,
2882    AreaofInterestRadius = 100_633,
2883    AreaofInterestType = 100_634,
2884    TargetAggregateID = 100_640,
2885    GICIdentificationNumber = 100_650,
2886    EstimatedTimeofFlighttoTBMImpact = 100_660,
2887    EstimatedInterceptTime = 100_661,
2888    EstimatedTimeofFlighttoNextWaypoint = 100_662,
2889    EntityTrackEquipmentData = 100_700,
2890    EmissionEWData = 100_800,
2891    AppearanceData = 100_900,
2892    CommandOrderData = 101_000,
2893    EnvironmentalData = 101_100,
2894    SignificantEventData = 101_200,
2895    OperatorActionData = 101_300,
2896    ADAEngagementMode = 101_310,
2897    ADAShootingStatus = 101_320,
2898    ADAMode = 101_321,
2899    ADARadarStatus = 101_330,
2900    ShootCommand = 101_340,
2901    ADAWeaponStatus = 101_350,
2902    ADAFiringDisciple = 101_360,
2903    OrderStatus = 101_370,
2904    TimeSynchronization = 101_400,
2905    TomahawkData = 101_500,
2906    NumberofDetonations = 102_100,
2907    NumberofIntercepts = 102_200,
2908    OBTControlMT201 = 200_201,
2909    SensorDataMT202 = 200_202,
2910    EnvironmentalDataMT203 = 200_203,
2911    OwnshipDataMT204 = 200_204,
2912    AcousticContactDataMT205 = 200_205,
2913    SonobuoyDataMT207 = 200_207,
2914    SonobuoyContactDataMT210 = 200_210,
2915    HeloControlMT211 = 200_211,
2916    ESMControlData = 200_213,
2917    ESMContactDataMT214 = 200_214,
2918    ESMEmitterDataMT215 = 200_215,
2919    WeaponDefinitionDataMT217 = 200_216,
2920    WeaponPresetDataMT217 = 200_217,
2921    OBTControlMT301 = 200_301,
2922    SensorDataMT302 = 200_302,
2923    EnvironmentalDataMT303m = 200_303,
2924    OwnshipDataMT304 = 200_304,
2925    AcousticContactDataMT305 = 200_305,
2926    SonobuoyDataMT307 = 200_307,
2927    SonobuoyContactDataMT310 = 200_310,
2928    HeloScenarioEquipmentStatus = 200_311,
2929    ESMControlDataMT313 = 200_313,
2930    ESMContactDataMT314 = 200_314,
2931    ESMEmitterDataMT315 = 200_315,
2932    WeaponDefinitionDataMT316 = 200_316,
2933    WeaponPresetDataMT317 = 200_317,
2934    PairingAssociation = 200_400,
2935    Pointer = 200_401,
2936    ReportingResponsibility = 200_402,
2937    TrackNumber = 200_403,
2938    IDforLink11Reporting = 200_404,
2939    RemoteTrack = 200_405,
2940    Link11ErrorRate = 200_406,
2941    TrackQuality = 200_407,
2942    Gridlock = 200_408,
2943    Kill = 200_409,
2944    TrackIDChangeResolution = 200_410,
2945    WeaponsStatus = 200_411,
2946    Link11Operator = 200_412,
2947    ForceTrainingTransmit = 200_413,
2948    ForceTrainingReceive = 200_414,
2949    InterceptorAmplification1 = 200_415,
2950    Consumables1 = 200_416,
2951    Link11LocalTrackQuality = 200_417,
2952    DLRP = 200_418,
2953    ForceOrder = 200_419,
2954    WilcoCantco = 200_420,
2955    EMCBearing = 200_421,
2956    ChangeTrackEligibility = 200_422,
2957    LandMassReferencePoint = 200_423,
2958    SystemReferencePoint = 200_424,
2959    PUAmplification = 200_425,
2960    SetDrift = 200_426,
2961    BeginInitialization = 200_427,
2962    StatusandControl = 200_428,
2963    ScintillationChange = 200_429,
2964    Link11IDControl = 200_430,
2965    PUGuardList = 200_431,
2966    WindsAloft = 200_432,
2967    SurfaceWinds = 200_433,
2968    SeaState = 200_434,
2969    MagneticVariation = 200_435,
2970    TrackEligibility = 200_436,
2971    TrainingTrackNotification = 200_437,
2972    TacanData = 200_501,
2973    InterceptorAmplification2 = 200_502,
2974    TacanAssignment = 200_503,
2975    AutopilotStatus = 200_504,
2976    Consumables2 = 200_505,
2977    Downlink = 200_506,
2978    TINReport = 200_507,
2979    SpecialPointControl = 200_508,
2980    ControlDiscretes = 200_509,
2981    RequestTargetDiscretes = 200_510,
2982    TargetDiscretes = 200_511,
2983    ReplyDiscretes = 200_512,
2984    CommandManeuvers = 200_513,
2985    TargetData = 200_514,
2986    TargetPointer = 200_515,
2987    InterceptData = 200_516,
2988    DecrementMissileInventory = 200_517,
2989    Link4AAlert = 200_518,
2990    StrikeControl = 200_519,
2991    SpeedChange = 200_521,
2992    CourseChange = 200_522,
2993    AltitudeChange = 200_523,
2994    ACLSANSPN46Status = 200_524,
2995    ACLSAircraftReport = 200_525,
2996    SPS67RadarOperatorFunctions = 200_600,
2997    SPS55RadarOperatorFunctions = 200_601,
2998    SPQ9ARadarOperatorFunctions = 200_602,
2999    SPS49RadarOperatorFunctions = 200_603,
3000    MK23RadarOperatorFunctions = 200_604,
3001    SPS48RadarOperatorFunctions = 200_605,
3002    SPS40RadarOperatorFunctions = 200_606,
3003    MK95RadarOperatorFunctions = 200_607,
3004    KillNoKill = 200_608,
3005    CMTpc = 200_609,
3006    CMC4AirGlobalData = 200_610,
3007    CMC4GlobalData = 200_611,
3008    LINKSIMCOMMENTPDU = 200_612,
3009    NSSTOwnshipControl = 200_613,
3010    Other = 240_000,
3011    MassOfTheVehicle = 240_001,
3012    ForceID3 = 240_002,
3013    EntityTypeKind = 240_003,
3014    EntityTypeDomain = 240_004,
3015    EntityTypeCountry = 240_005,
3016    EntityTypeCategory = 240_006,
3017    EntityTypeSubCategory = 240_007,
3018    EntityTypeSpecific = 240_008,
3019    EntityTypeExtra = 240_009,
3020    AlternativeEntityTypeKind = 240_010,
3021    AlternativeEntityTypeDomain = 240_011,
3022    AlternativeEntityTypeCountry = 240_012,
3023    AlternativeEntityTypeCategory = 240_013,
3024    AlternativeEntityTypeSubCategory = 240_014,
3025    AlternativeEntityTypeSpecific = 240_015,
3026    AlternativeEntityTypeExtra = 240_016,
3027    EntityLocationX = 240_017,
3028    EntityLocationY = 240_018,
3029    EntityLocationZ = 240_019,
3030    EntityLinearVelocityX = 240_020,
3031    EntityLinearVelocityY = 240_021,
3032    EntityLinearVelocityZ = 240_022,
3033    EntityOrientationPsi = 240_023,
3034    EntityOrientationTheta = 240_024,
3035    EntityOrientationPhi = 240_025,
3036    DeadReckoningAlgorithm2 = 240_026,
3037    DeadReckoningLinearAccelerationX = 240_027,
3038    DeadReckoningLinearAccelerationY = 240_028,
3039    DeadReckoningLinearAccelerationZ = 240_029,
3040    DeadReckoningAngularVelocityX = 240_030,
3041    DeadReckoningAngularVelocityY = 240_031,
3042    DeadReckoningAngularVelocityZ = 240_032,
3043    EntityAppearance = 240_033,
3044    EntityMarkingCharacterSet = 240_034,
3045    EntityMarking11Bytes = 240_035,
3046    Capability = 240_036,
3047    NumberArticulationParameters = 240_037,
3048    ArticulationParameterID = 240_038,
3049    ArticulationParameterType2 = 240_039,
3050    ArticulationParameterValue2 = 240_040,
3051    TypeOfStores = 240_041,
3052    QuantityOfStores = 240_042,
3053    FuelQuantity = 240_043,
3054    RadarSystemStatus = 240_044,
3055    RadioCommunicationSystemStatus = 240_045,
3056    DefaultTimeForRadioTransmissionForStationaryTransmitters = 240_046,
3057    DefaultTimeForRadioTransmissionForMovingTransmitters = 240_047,
3058    BodyPartDamagedRatio = 240_048,
3059    NameOfTheTerrainDatabaseFile = 240_049,
3060    NameOfLocalFile = 240_050,
3061    AimpointBearing = 240_051,
3062    AimpointElevation = 240_052,
3063    AimpointRange = 240_053,
3064    AirSpeed = 240_054,
3065    Altitude = 240_055,
3066    ApplicationStatus = 240_056,
3067    AutoIff = 240_057,
3068    BeaconDelay = 240_058,
3069    BingoFuelSetting = 240_059,
3070    CloudBottom = 240_060,
3071    CloudTop = 240_061,
3072    Direction = 240_062,
3073    EndAction = 240_063,
3074    Frequency = 240_064,
3075    Freeze = 240_065,
3076    Heading = 240_066,
3077    Identification2 = 240_067,
3078    InitialPointData = 240_068,
3079    Latitude2 = 240_069,
3080    Lights2 = 240_070,
3081    Linear = 240_071,
3082    Longitude2 = 240_072,
3083    LowAltitude = 240_073,
3084    MfdFormats = 240_074,
3085    Nctr = 240_075,
3086    NumberProjectiles = 240_076,
3087    OperationCode = 240_077,
3088    Pitch = 240_078,
3089    Profiles = 240_079,
3090    Quantity3 = 240_080,
3091    RadarModes = 240_081,
3092    RadarSearchVolume = 240_082,
3093    Roll = 240_083,
3094    Rotation = 240_084,
3095    ScaleFactorX = 240_085,
3096    ScaleFactorY = 240_086,
3097    Shields2 = 240_087,
3098    Steerpoint = 240_088,
3099    Spare1 = 240_089,
3100    Spare2 = 240_090,
3101    Team = 240_091,
3102    Text = 240_092,
3103    TimeOfDay = 240_093,
3104    TrailFlag = 240_094,
3105    TrailSize = 240_095,
3106    TypeOfProjectile = 240_096,
3107    TypeOfTarget = 240_097,
3108    TypeOfThreat = 240_098,
3109    UhfFrequency = 240_099,
3110    UtmAltitude = 240_100,
3111    UtmLatitude = 240_101,
3112    UtmLongitude = 240_102,
3113    VhfFrequency = 240_103,
3114    VisibilityRange = 240_104,
3115    VoidAaaHit = 240_105,
3116    VoidCollision = 240_106,
3117    VoidEarthHit = 240_107,
3118    VoidFriendly = 240_108,
3119    VoidGunHit = 240_109,
3120    VoidRocketHit = 240_110,
3121    VoidSamHit = 240_111,
3122    WeaponData = 240_112,
3123    WeaponType = 240_113,
3124    Weather2 = 240_114,
3125    WindDirection2 = 240_115,
3126    WindSpeed = 240_116,
3127    WingStation = 240_117,
3128    Yaw = 240_118,
3129    MemoryOffset = 240_119,
3130    MemoryData = 240_120,
3131    VASI = 240_121,
3132    Beacon = 240_122,
3133    Strobe = 240_123,
3134    Culture = 240_124,
3135    Approach = 240_125,
3136    RunwayEnd = 240_126,
3137    Obstruction = 240_127,
3138    RunwayEdge = 240_128,
3139    RampTaxiway = 240_129,
3140    LaserBombCode = 240_130,
3141    RackType = 240_131,
3142    HUD = 240_132,
3143    RoleFileName = 240_133,
3144    PilotName = 240_134,
3145    PilotDesignation = 240_135,
3146    ModelType = 240_136,
3147    DISType = 240_137,
3148    Class = 240_138,
3149    Channel = 240_139,
3150    EntityType2 = 240_140,
3151    AlternativeEntityType2 = 240_141,
3152    EntityLocation = 240_142,
3153    EntityLinearVelocity = 240_143,
3154    EntityOrientation = 240_144,
3155    DeadReckoning = 240_145,
3156    FailureSymptom = 240_146,
3157    MaxFuel = 240_147,
3158    RefuelingBoomConnect = 240_148,
3159    AltitudeAGL = 240_149,
3160    CalibratedAirspeed = 240_150,
3161    TACANChannel1 = 240_151,
3162    TACANBand1 = 240_152,
3163    TACANMode1 = 240_153,
3164    FuelFlowRate = 270_115,
3165    FuelTemperature = 270_116,
3166    FuelPressure = 270_117,
3167    SKESlot = 270_150,
3168    SKELead = 270_151,
3169    SKEFrequency = 270_152,
3170    FCICmd = 270_153,
3171    FCINum = 270_154,
3172    SKEBitField = 270_155,
3173    FormationPosition = 270_156,
3174    FormationNumber = 270_157,
3175    FFSModeActive = 270_158,
3176    FFSRole = 270_159,
3177    FFSVCAS = 270_160,
3178    FFSBitField = 270_161,
3179    FFSCallSign = 270_162,
3180    FFSGuidanceData = 270_163,
3181    FFSTextData = 270_164,
3182    FFSAirdropRequestData = 270_165,
3183    FFSAirdropData = 270_166,
3184    HorizontalCircularErrorProbable = 300_000,
3185    HorizontalPositionError = 300_001,
3186    VerticalPositionError = 300_002,
3187    HorizontalVelocityError = 300_003,
3188    VerticalVelocityError = 300_004,
3189    _4thLowestJammertoSignalRatioforP1 = 300_005,
3190    _4thLowestJammertoSignalRatioforP2 = 300_006,
3191    GPSFigureofMerit = 300_007,
3192    WeaponTransferGPSState = 300_008,
3193    WeaponTransferHorizontalPositionError = 300_009,
3194    WeaponTransferVerticalPositionError1 = 300_010,
3195    WeaponTransferVerticalPositionError2 = 300_011,
3196    WeaponTransferHorizontalVelocityError = 300_012,
3197    TimeTransferError = 300_013,
3198    AgeofEphemeris = 300_014,
3199    NonFlyoutMunitionEntityRequestDISTypeEnumeration = 300_016,
3200    NonFlyoutMunitionEntityRequestLaunchPointX = 300_017,
3201    NonFlyoutMunitionEntityRequestLaunchPointY = 300_018,
3202    NonFlyoutMunitionEntityRequestLaunchPointZ = 300_019,
3203    NonFlyoutMunitionEntityRequestMaximumAltitude = 300_020,
3204    NonFlyoutMunitionEntityRequestFlightPath = 300_021,
3205    NonFlyoutMunitionEntityRequestImpactPointX = 300_022,
3206    NonFlyoutMunitionEntityRequestImpactPointY = 300_023,
3207    NonFlyoutMunitionEntityRequestImpactPointZ = 300_024,
3208    NonFlyoutMunitionEntityRequestElapsedFlightTime = 300_025,
3209    NonFlyoutMunitionEntityRequestLaunchTime = 300_026,
3210    TimeError = 300_027,
3211    Link16CommandVariety1 = 301_100,
3212    Push = 301_130,
3213    Rolex = 301_140,
3214    TerminateIntercept = 301_150,
3215    HealDamage = 301_151,
3216    Destroy = 301_152,
3217    TransferControlManagement = 301_160,
3218    Link16ControlsPPLIEnable = 301_170,
3219    Link16ControlsCommandControlEnable = 301_171,
3220    Link16ReferencePointMessageInitiation = 301_174,
3221    AssignExternalEntityLink16TrackNumber = 301_175,
3222    Link16IntelligenceInfo = 301_176,
3223    Link16TrackManagement = 301_177,
3224    Link16ControlsCESGlobalPPLIPublish = 301_178,
3225    Link16ControlsCESGlobalSurveillancePublish = 301_179,
3226    RequestGlobalLink16Configuration = 301_180,
3227    Link16ControlsSurveillanceEnable = 301_181,
3228    Link16Pointer = 301_182,
3229    Link16Vector = 301_183,
3230    Link16ControlUnitChange = 301_184,
3231    Link16Text = 301_185,
3232    RequestLink16Objects = 301_186,
3233    Link16RefObjectNameList = 301_187,
3234    TotalNumberofPDUsinLink16RefObjectsResponse = 301_189,
3235    PDUNumberinLink16RefObjectsResponse = 301_190,
3236    TotalNumberofLink16RefObjects = 301_191,
3237    Link16ControlsF2FAEnable = 301_197,
3238    Link16ControlsF2FBEnable = 301_198,
3239    STNofFormationLeader = 301_199,
3240    FormationName = 301_200,
3241    FormationRole = 301_201,
3242    SurveillanceContributorSensorBasedDetection = 301_202,
3243    F2FANPG = 301_220,
3244    Link16ControlsF2FANet = 301_221,
3245    F2FBNPG = 301_222,
3246    Link16ControlsF2FBNet = 301_223,
3247    SurveillanceEnabledNPB = 301_224,
3248    SurveillanceEnabledNet = 301_225,
3249    ControlUnitEnabled = 301_226,
3250    ControlUnitEnabledNPG = 301_227,
3251    ControlUnitEnabledNet = 301_228,
3252    VoiceFrequency = 301_229,
3253    Link16JTIDSVoiceCallsign = 301_234,
3254    EntityIDofControlUnit = 301_237,
3255    STNofControlUnit = 301_238,
3256    NTRParticipationLevel = 301_239,
3257    Link16ControlsCESGlobalPPLISubscribe = 301_240,
3258    Link16ControlsCESGlobalSurveillanceSubscribe = 301_241,
3259    NTRinMission = 301_242,
3260    NTRMarking = 301_243,
3261    NTRReceiptCompliance = 301_244,
3262    FormationF2FNPG = 301_255,
3263    FormationF2FChannel = 301_256,
3264    JLVCLogReport = 400_008,
3265    JLVCSupplyAdjust = 400_009,
3266    JLVCEntityControl = 400_010,
3267    JLVCHealthUpdate = 400_011,
3268    JLVCRepairComplete = 400_012,
3269    JLVCUnitActivation = 400_013,
3270    JLVCBattleDamageRepair = 400_014,
3271    JLVCMinefield = 400_015,
3272    JLVCWire = 400_016,
3273    JLVCAbatis = 400_017,
3274    JLVCCrater = 400_018,
3275    JLVCDitch = 400_019,
3276    JLVCLanes = 400_020,
3277    JLVCIED = 400_021,
3278    JLVCRubble = 400_022,
3279    JLVCSubmergedBarrier = 400_023,
3280    JLVCFloatingBarrier = 400_024,
3281    JLVCFoxhole = 400_025,
3282    JLVCVehicleHole = 400_026,
3283    JLVCVehicleFortification = 400_027,
3284    JLVCSandbag = 400_028,
3285    JLVCCheckpoint = 400_029,
3286    JLVCContamCloud2D = 400_030,
3287    JLVCPopulationEffect = 400_031,
3288    JLVCMine = 400_032,
3289    JLVCSeaMinefield = 400_033,
3290    Munition = 500_001,
3291    EngineFuel = 500_002,
3292    StorageFuel = 500_003,
3293    NotUsed = 500_004,
3294    Expendable = 500_005,
3295    TotalRecordSets = 500_006,
3296    LaunchedMunition = 500_007,
3297    Association = 500_008,
3298    Sensor = 500_009,
3299    MunitionReload = 500_010,
3300    EngineFuelReload = 500_011,
3301    StorageFuelReload = 500_012,
3302    ExpendableReload = 500_013,
3303    IFFChangeControlMode1Code = 500_014,
3304    IFFChangeControlMode2Code = 500_015,
3305    IFFChangeControlMode3Code = 500_016,
3306    IFFChangeControlMode4Code = 500_017,
3307    IFFChangeControlMode5Code = 500_018,
3308    IFFChangeControlMode6Code = 500_019,
3309    Link16Data = 500_021,
3310    ARMAlert = 500_022,
3311    IFFChangeControlModeOnOff = 500_023,
3312    WeaponStatusData = 500_024,
3313    ExpendableStatusData = 500_025,
3314    TacticStatusData = 500_026,
3315    EmitterSensorData = 500_027,
3316    IOSControlData = 500_028,
3317    StaticStatusData = 500_029,
3318    RequestInactiveEntities = 500_200,
3319    InactiveEntityQuantity = 500_201,
3320    InactiveEntityID = 500_202,
3321    InactiveEntityType = 500_203,
3322    ActivationTriggerType = 500_204,
3323    ActivationTriggerValue = 500_205,
3324    AirtoAirMissileQty = 551_001,
3325    AIM7MissileQty = 551_002,
3326    AIM9MissileQty = 551_003,
3327    AIM120MissileQty = 551_004,
3328    AirtoGroundMissileQty = 551_005,
3329    SurfacetoAirMissileQty = 551_006,
3330    BulletQty1 = 551_007,
3331    ChaffQty = 552_001,
3332    FlareQty = 552_002,
3333    FuelLevel = 553_001,
3334    RouteType = 553_002,
3335    ThreatMode = 553_003,
3336    TargetOccluded = 553_004,
3337    TerrainHeight = 553_005,
3338    EntityStatus = 553_006,
3339    MarshalStatus = 553_007,
3340    PowerPlantStatus = 553_008,
3341    NavLightStatus = 553_009,
3342    InteriorLightStatus = 553_010,
3343    LandingLightStatus = 553_011,
3344    FormationLightStatus = 553_012,
3345    AntiCollisionLightStatus = 553_013,
3346    NavFormationFlashRate = 553_014,
3347    AntiColOnDuration = 553_015,
3348    AntiColOffDuration = 553_016,
3349    InterceptStatus = 553_017,
3350    LifeFormSignalingDeviceType = 553_018,
3351    LifeFormMovementType = 553_019,
3352    LifeFormInVehicle = 553_020,
3353    MobilityKill2 = 553_021,
3354    FirepowerKill = 553_022,
3355    TankerEnabledDisabled = 553_028,
3356    ThreatStatusTacticOKtoShootDownWeapons = 553_029,
3357    TACANChannel2 = 554_001,
3358    TACANBand2 = 554_002,
3359    TACANMode2 = 554_003,
3360    RWRStatus = 554_004,
3361    UHFRadioFrequency = 554_005,
3362    EmitJammingStatus = 554_006,
3363    EmitJammingType = 554_007,
3364    ReceiveJammingStatus = 554_008,
3365    RADARMode = 554_009,
3366    AvailableRADARModes = 554_010,
3367    JammerPodEnumeration = 554_100,
3368    JammerPodBehavior = 554_101,
3369    JammerPodPrograms = 554_102,
3370    JammerPodReceiverSensitivity = 554_103,
3371    JammerPodReceiverFrequencyMinimum = 554_104,
3372    JammerPodReceiverFrequencyMaximum = 554_105,
3373    JammerPodPower = 554_106,
3374    JammerPodVariability = 554_107,
3375    JammerPodNumberofFalseTargets = 554_108,
3376    JammerPodJammerKnob = 554_109,
3377    JammerPodMissileJamming = 554_110,
3378    EmitterOverride2 = 555_001,
3379    JammerOverride = 555_002,
3380    DisengageReengage2 = 555_003,
3381    HeadingOverride = 555_004,
3382    AltitudeOverride = 555_005,
3383    SpeedOverride = 555_006,
3384    VerboseOverride = 555_007,
3385    OcclusionOverride = 555_008,
3386    CommitRange = 556_001,
3387    CurrentScenarioIFFMode4ACodeforThisThreatsAffiliation = 556_007,
3388    CurrentScenarioIFFMode4BCodeforThisThreatsAffiliation = 556_008,
3389    OktoEngageWaypointNumber = 556_016,
3390    MaxSpeedatSeaLevel = 556_017,
3391    MaxSpeed = 556_018,
3392    CurrentWaypointNumber = 556_019,
3393    RouteInformation = 556_020,
3394    ThreatStatusStaticMultiTargetTrack = 556_029,
3395    AirAirIRMissileQty = 557_001,
3396    AirAirRadarMissileQty = 557_002,
3397    AirGroundIRMissileQty = 557_003,
3398    AirGroundRadarMissileQty = 557_004,
3399    AirGroundAntiRadiationMissileQty = 557_005,
3400    AirGroundBombQty = 557_006,
3401    AirGroundRocketQty = 557_007,
3402    SurfaceAirIRMissileQty = 557_008,
3403    SurfaceAirRadarMissileQty = 557_009,
3404    BulletQty2 = 557_010,
3405    PPLIPublishEnabled = 559_001,
3406    SurveillancePublishEnabled = 559_002,
3407    NPG = 559_003,
3408    NPGChannel = 559_004,
3409    JTIDSTrackNumber = 559_005,
3410    Link16ControlsSurveillanceReportable = 559_006,
3411    Link16ControlsSurveillanceTrackQuality = 559_007,
3412    Link16ControlsTargetPositionQuality = 559_008,
3413    Link16ControlsQualityErrorType = 559_009,
3414    Link16ControlsAffiliationDeterminationRule = 559_010,
3415    Link16ControlsResetEntityAffiliation = 559_011,
3416    Link16ControlsResetAllAffiliation = 559_012,
3417    EndofMessages = 559_999,
3418    MalfunctionActivateDeactivateSet = 600_001,
3419    MalfunctionStatus = 600_002,
3420    RequestJTIDSTrackNumbers = 600_210,
3421    TrackNumbersvsEID = 600_212,
3422    TotalNumberofJTIDSTrackNumbers = 600_214,
3423    PDUNumberinJTIDSTrackNumberResponse = 600_215,
3424    TotalNumberofPDUsinJTIDSTrackNumberResponse = 600_216,
3425    AirtoAirRefuelerEntitiesRequest = 600_218,
3426    AirtoAirRefuelingCount = 600_219,
3427    AirToAirRefuelerEntity = 600_220,
3428    FormationLibraryRequest = 600_300,
3429    TotalNumberFormationLibraryPDUs1 = 600_301,
3430    PDUNumberinFormationLibraryResponse1 = 600_302,
3431    TotalNumberFormationLibraryItemsinPDU = 600_303,
3432    FormationLibraryVariable = 600_304,
3433    CreateRuntimeFormation = 600_305,
3434    FormationRequestHeader = 600_306,
3435    FormationPositionAbsolute = 600_307,
3436    FormationPositionRelative = 600_308,
3437    ExpendablesReload = 610_006,
3438    PositionFreeze = 610_007,
3439    ActivateOwnship = 610_008,
3440    Chocks = 610_009,
3441    WarmupCooldownOverride = 610_010,
3442    GroundPower = 610_011,
3443    ScrambleStart = 610_012,
3444    OwnshipasaThreat = 610_013,
3445    FuelExternal = 610_015,
3446    FuelInternal = 610_016,
3447    FuelTankTemp = 610_017,
3448    GrossWeight = 610_025,
3449    AngleOfAttack = 610_026,
3450    GLoad = 610_027,
3451    WeightOnWheels = 610_029,
3452    StoredEnergySystemReload = 610_032,
3453    KillOverride = 610_035,
3454    ExpendablesFreeze = 610_036,
3455    GPSSatellitesEnableDisable = 610_037,
3456    OwnshipMessageDisplay = 610_040,
3457    WeaponQuantityFreeze = 610_042,
3458    GlobalControlFreezeWeaponsQuantityOnAllOwnships = 610_043,
3459    GlobalControlFreezeFuelQuantityOnAllOwnships = 610_044,
3460    GlobalControlFreezeKillOverrideOnAllOwnships = 610_045,
3461    GlobalControlFreezeCrashOverrideOnAllOwnships = 610_046,
3462    OwnshipOFPBlockNumber = 610_047,
3463    WaypointInformationQuery = 610_048,
3464    WaypointInformation = 610_049,
3465    OwnshipSubsystemStatusData = 610_050,
3466    CockpitSwitchStatus = 613_002,
3467    IntegratedControlPanelMessages = 613_003,
3468    ThrottlePositions = 613_004,
3469    CurrentCriticalSwitchPosition = 613_005,
3470    CorrectCriticalSwitchPosition = 613_006,
3471    CurrentCriticalSwitchData = 613_007,
3472    CorrectCriticalSwitchData = 613_008,
3473    MissionInitialConditionsSet = 613_013,
3474    GlobalControlMalfunctionActiveonAllOwnships = 613_016,
3475    GlobalControlMalfunctionClearOnAllOwnships = 613_017,
3476    ValidatedCriticalSwitchReport = 613_020,
3477    SARMapPathname = 613_021,
3478    ValidatedCriticalSwitchOwnshipID = 613_022,
3479    LowerBoomEventReport = 613_027,
3480    RaiseBoomEventReport = 613_028,
3481    BreakawayEventReport = 613_029,
3482    CompleteEventReport = 613_030,
3483    AuxCommPanelFrequencyDisplay = 613_031,
3484    NetworkStationInformation = 615_000,
3485    GlobalControlSelectNetworkStation = 615_001,
3486    NetworkStationUnderGlobalControl = 615_002,
3487    GlobalControlStillControlling = 615_003,
3488    GlobalControlReleaseControlofNetworkStation = 615_004,
3489    GlobalControlFreezeWeaponQuantity = 615_005,
3490    GlobalControlFreezeFuelQuantity = 615_006,
3491    GlobalControlFreezeKillOverride = 615_007,
3492    GlobalControlFreezeCrashOverride = 615_008,
3493    GlobalControlMalfunctionActive = 615_009,
3494    GlobalControlMalfunctionClear = 615_010,
3495    GlobalControlStartDevices = 615_011,
3496    GlobalControlFreezeDevices = 615_012,
3497    GlobalControlJTIDSCommand = 615_013,
3498    NetworkStationICSetInformation = 615_015,
3499    GlobalControlResetICSet = 615_017,
3500    NumberofControllingUnits = 615_018,
3501    NetworkStationJTIDSControllingUnits = 615_019,
3502    NetworkStationJTIDSObjectiveTracks = 615_020,
3503    NumberofReferenceObjects = 615_021,
3504    NetworkStationJTIDSReferenceObjects = 615_022,
3505    NetworkedStationStillUnderControl = 615_023,
3506    GlobalControlDeleteThreatEntities = 615_024,
3507    NetworkStationOwnshipCallsigns = 615_025,
3508    GlobalControlRequestFormationLibraryData = 615_026,
3509    TotalNumberFormationLibraryPDUs2 = 615_027,
3510    PDUNumberinFormationLibraryResponse2 = 615_028,
3511    TotalNumberFormationLibraryItemsinPDUs = 615_029,
3512    NetworkStationFormationLibraryItem = 615_030,
3513    GlobalControlAddRelativeFormation = 615_031,
3514    NetworkStationTICFilename = 615_032,
3515    GlobalControlFreezeWarmupOverride = 615_033,
3516    GlobalControlReloadSES = 615_034,
3517    GlobalControlReloadWeapons = 615_035,
3518    GlobalControlReloadExpendables = 615_036,
3519    GlobalControlReloadFuel = 615_037,
3520    GlobalControlReloadFirebottle = 615_038,
3521    TestPattern = 700_000,
3522    AudioTest = 700_001,
3523    AudioTone = 700_002,
3524    CalibrateThrottles = 700_003,
3525    OperationalLimitsEventReport = 700_004,
3526    OperationalLimits = 700_005,
3527    EventMarkerMessage = 1_000_620,
3528    ReceiverAircraftAeroModelData = 2_000_000,
3529    TankerAircraftAeroModelData = 2_000_010,
3530    BoomAircraftAeroModelData = 2_000_020,
3531    AccesstoImageGeneratorData1 = 2_000_030,
3532    AccesstoImageGeneratorData2 = 2_000_031,
3533    AccesstoImageGeneratorData3 = 2_000_032,
3534    AccesstoImageGeneratorData4 = 2_000_033,
3535    AccesstoImageGeneratorData5 = 2_000_034,
3536    AccesstoImageGeneratorData6 = 2_000_035,
3537    AccesstoImageGeneratorData7 = 2_000_036,
3538    AccesstoImageGeneratorData8 = 2_000_037,
3539    AccesstoImageGeneratorData9 = 2_000_038,
3540    AccesstoImageGeneratorData10 = 2_000_039,
3541    AccesstoImageGeneratorData11 = 2_000_040,
3542    AccesstoImageGeneratorData12 = 2_000_041,
3543    AccesstoImageGeneratorData13 = 2_000_042,
3544    AccesstoImageGeneratorData14 = 2_000_043,
3545    AccesstoImageGeneratorData15 = 2_000_044,
3546    AccesstoImageGeneratorData16 = 2_000_045,
3547    HostLoadNumber = 2_000_050,
3548    ExtendedFireEventReports = 5_005_001,
3549    BattleDamageAssessmentEventReport = 5_005_002,
3550    ExtendedFireEventLauncher = 5_005_003,
3551    ExtendedFireEventMissile = 5_005_006,
3552    ExtendedFireEventMRMWeapon = 5_005_008,
3553    ExtendedFireEventGunFireControl = 5_005_009,
3554    ExtendedFireEventBomb = 5_005_010,
3555    ExtendedFireEventExpendable = 5_005_011,
3556    BattleDamageAssessment = 5_005_012,
3557    ExtendedFirePickleEvent = 5_005_014,
3558    RadarTrackReport = 5_005_055,
3559    JammerReport = 5_005_060,
3560    JammerFalseTargetsReport = 5_005_061,
3561    DetectEventReport = 5_005_063,
3562    MALDBeamReport = 5_005_070,
3563    TransmitterRadiationVolume = 5_005_080,
3564    TransmitterRadiationVolumev2 = 5_005_081,
3565    PhysicalNetworkDefinition = 5_007_010,
3566    NetworkChannelDefinition = 5_007_020,
3567    LogicalNetworkDefinition = 5_007_030,
3568    LogicalNetworkEntityDefinition = 5_007_040,
3569    PhysicalNetworkEntityDefinition = 5_007_050,
3570    C2Message = 5_008_010,
3571    CandidateObject = 5_008_020,
3572    SetofCandidateObjects = 5_008_030,
3573    BoundedRegion = 5_008_040,
3574    AngularRegion = 5_008_050,
3575    RoEObject = 5_008_060,
3576    TrackObject = 5_008_070,
3577    SetOfTrackObjects = 5_008_080,
3578    LogicalEntityDefinition = 5_009_010,
3579    LogicalEntityRelationshipDefinition = 5_009_020,
3580    IntentBasedEWMessage = 5_507_010,
3581}
3582
3583impl VariableRecordTypes {
3584    #[must_use]
3585    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3586        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
3587    }
3588}
3589
3590impl FieldSerialize for VariableRecordTypes {
3591    fn serialize_field(&self, buf: &mut BytesMut) {
3592        buf.put_u32(*self as u32);
3593    }
3594}
3595
3596impl FieldDeserialize for VariableRecordTypes {
3597    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3598        Self::deserialize(buf)
3599    }
3600}
3601
3602impl FieldLen for VariableRecordTypes {
3603    fn field_len(&self) -> usize {
3604        4
3605    }
3606}
3607
3608// SISO-REF-010-2023 Reason [UID 67]
3609#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3610pub enum Reason {
3611    #[default]
3612    Other = 0,
3613    Recess = 1,
3614    Termination = 2,
3615    SystemFailure = 3,
3616    SecurityViolation = 4,
3617    EntityReconstitution = 5,
3618    StopForReset = 6,
3619    StopForRestart = 7,
3620    AbortTrainingReturnToTacticalOperations = 8,
3621}
3622
3623impl Reason {
3624    #[must_use]
3625    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3626        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
3627    }
3628}
3629
3630impl FieldSerialize for Reason {
3631    fn serialize_field(&self, buf: &mut BytesMut) {
3632        buf.put_u8(*self as u8);
3633    }
3634}
3635
3636impl FieldDeserialize for Reason {
3637    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3638        Self::deserialize(buf)
3639    }
3640}
3641
3642impl FieldLen for Reason {
3643    fn field_len(&self) -> usize {
3644        1
3645    }
3646}
3647
3648// SISO-REF-010-2023 FrozenBehavior [UID 68]
3649bitflags! {
3650    #[derive(Copy, Clone, Debug, PartialEq, Eq)]
3651    pub struct FrozenBehavior: u8 {
3652        const RunSimulationClock = 1 << 0;
3653        const TransmitUpdates = 1 << 1;
3654        const ProcessUpdates = 1 << 2;
3655    }
3656}
3657
3658impl Default for FrozenBehavior {
3659    fn default() -> Self {
3660        Self::empty()
3661    }
3662}
3663
3664impl FrozenBehavior {
3665    #[must_use]
3666    pub const fn as_u8(&self) -> u8 {
3667        self.bits()
3668    }
3669
3670    #[must_use]
3671    pub const fn from_u8(bits: u8) -> Option<Self> {
3672        Self::from_bits(bits)
3673    }
3674}
3675
3676impl FieldSerialize for FrozenBehavior {
3677    fn serialize_field(&self, buf: &mut BytesMut) {
3678        buf.put_u8(self.as_u8());
3679    }
3680}
3681
3682impl FieldDeserialize for FrozenBehavior {
3683    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3684        let bits = buf.get_u8();
3685        Self::from_u8(bits).unwrap_or_default()
3686    }
3687}
3688
3689impl FieldLen for FrozenBehavior {
3690    fn field_len(&self) -> usize {
3691        1
3692    }
3693}
3694
3695// SISO-REF-010-2023 AcknowledgeFlag [UID 69]
3696#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3697pub enum AcknowledgeFlag {
3698    #[default]
3699    CreateEntity = 1,
3700    RemoveEntity = 2,
3701    StartResume = 3,
3702    StopFreeze = 4,
3703    TransferOwnership = 5,
3704}
3705
3706impl AcknowledgeFlag {
3707    #[must_use]
3708    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3709        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
3710    }
3711}
3712
3713impl FieldSerialize for AcknowledgeFlag {
3714    fn serialize_field(&self, buf: &mut BytesMut) {
3715        buf.put_u16(*self as u16);
3716    }
3717}
3718
3719impl FieldDeserialize for AcknowledgeFlag {
3720    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3721        Self::deserialize(buf)
3722    }
3723}
3724
3725impl FieldLen for AcknowledgeFlag {
3726    fn field_len(&self) -> usize {
3727        2
3728    }
3729}
3730
3731// SISO-REF-010-2023 AcknowledgeResponseFlag [UID 70]
3732#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3733pub enum AcknowledgeResponseFlag {
3734    #[default]
3735    Other = 0,
3736    AbleToComply = 1,
3737    UnableToComply = 2,
3738    PendingOperatorAction = 3,
3739}
3740
3741impl AcknowledgeResponseFlag {
3742    #[must_use]
3743    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3744        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
3745    }
3746}
3747
3748impl FieldSerialize for AcknowledgeResponseFlag {
3749    fn serialize_field(&self, buf: &mut BytesMut) {
3750        buf.put_u16(*self as u16);
3751    }
3752}
3753
3754impl FieldDeserialize for AcknowledgeResponseFlag {
3755    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3756        Self::deserialize(buf)
3757    }
3758}
3759
3760impl FieldLen for AcknowledgeResponseFlag {
3761    fn field_len(&self) -> usize {
3762        2
3763    }
3764}
3765
3766// SISO-REF-010-2023 ActionRequestActionID [UID 71]
3767#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3768pub enum ActionRequestActionID {
3769    #[default]
3770    Other = 0,
3771    Localstorageoftherequestedinformation = 1,
3772    InformSMofeventranoutofammunition = 2,
3773    InformSMofeventkilledinaction = 3,
3774    InformSMofeventdamage = 4,
3775    InformSMofeventmobilitydisabled = 5,
3776    InformSMofeventfiredisabled = 6,
3777    InformSMofeventranoutoffuel = 7,
3778    Recallcheckpointdata = 8,
3779    Recallinitialparameters = 9,
3780    Initiatetetherlead = 10,
3781    Initiatetetherfollow = 11,
3782    Unthether = 12,
3783    Initiateservicestationresupply = 13,
3784    Initiatetailgateresupply = 14,
3785    Initiatehitchlead = 15,
3786    Initiatehitchfollow = 16,
3787    Unhitch = 17,
3788    Mount = 18,
3789    Dismount = 19,
3790    StartDRC = 20,
3791    StopDRC = 21,
3792    DataQuery = 22,
3793    StatusRequest = 23,
3794    SendObjectStateData = 24,
3795    Reconstitute = 25,
3796    LockSiteConfiguration = 26,
3797    UnlockSiteConfiguration = 27,
3798    UpdateSiteConfiguration = 28,
3799    QuerySiteConfiguration = 29,
3800    TetheringInformation = 30,
3801    MountIntent = 31,
3802    AcceptSubscription = 33,
3803    Unsubscribe = 34,
3804    Teleportentity = 35,
3805    Changeaggregatestate = 36,
3806    RequestStartPDU = 37,
3807    Wakeupgetreadyforinitialization = 38,
3808    Initializeinternalparameters = 39,
3809    Sendplandata = 40,
3810    Synchronizeinternalclocks = 41,
3811    Run = 42,
3812    Saveinternalparameters = 43,
3813    Simulatemalfunction = 44,
3814    Joinexercise = 45,
3815    Resignexercise = 46,
3816    Timeadvance = 47,
3817    TACCSFLOSRequestType1 = 100,
3818    TACCSFLOSRequestType2 = 101,
3819    AirmountMountRequest = 4303,
3820    AirmountDismountRequest = 4304,
3821    AirmountInformationRequest = 4305,
3822}
3823
3824impl ActionRequestActionID {
3825    #[must_use]
3826    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3827        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
3828    }
3829}
3830
3831// SISO-REF-010-2023 ActionResponseRequestStatus [UID 72]
3832#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3833pub enum ActionResponseRequestStatus {
3834    #[default]
3835    Other = 0,
3836    Pending = 1,
3837    Executing = 2,
3838    PartiallyComplete = 3,
3839    Complete = 4,
3840    RequestRejected = 5,
3841    RetransmitRequestNow = 6,
3842    RetransmitRequestLater = 7,
3843    InvalidTimeParameters = 8,
3844    SimulationTimeExceeded = 9,
3845    RequestDone = 10,
3846    TACCSFLOSReplyTypeOne = 100,
3847    TACCSFLOSReplyTypeTwo = 101,
3848    JoinExerciseRequestRejected = 201,
3849}
3850
3851impl ActionResponseRequestStatus {
3852    #[must_use]
3853    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3854        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
3855    }
3856}
3857
3858impl FieldSerialize for ActionResponseRequestStatus {
3859    fn serialize_field(&self, buf: &mut BytesMut) {
3860        buf.put_u32(*self as u32);
3861    }
3862}
3863
3864impl FieldDeserialize for ActionResponseRequestStatus {
3865    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3866        Self::deserialize(buf)
3867    }
3868}
3869
3870impl FieldLen for ActionResponseRequestStatus {
3871    fn field_len(&self) -> usize {
3872        4
3873    }
3874}
3875
3876// SISO-REF-010-2023 EventType [UID 73]
3877#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3878pub enum EventType {
3879    #[default]
3880    Other = 0,
3881    RanOutOfAmmunition = 2,
3882    KilledInAction = 3,
3883    Damage = 4,
3884    MobilityDisabled = 5,
3885    FireDisabled = 6,
3886    RanOutOfFuel = 7,
3887    EntityInitialization = 8,
3888    RequestForIndirectFireOrCASMission = 9,
3889    IndirectFireOrCASFire = 10,
3890    MinefieldEntry = 11,
3891    MinefieldDetonation = 12,
3892    VehicleMasterPowerOn = 13,
3893    VehicleMasterPowerOff = 14,
3894    AggregateStateChangeRequested = 15,
3895    PreventCollisionDetonation = 16,
3896    OwnershipReport = 17,
3897    RadarPerception = 18,
3898    Detect = 19,
3899}
3900
3901impl EventType {
3902    #[must_use]
3903    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3904        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
3905    }
3906}
3907
3908impl FieldSerialize for EventType {
3909    fn serialize_field(&self, buf: &mut BytesMut) {
3910        buf.put_u32(*self as u32);
3911    }
3912}
3913
3914impl FieldDeserialize for EventType {
3915    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3916        Self::deserialize(buf)
3917    }
3918}
3919
3920impl FieldLen for EventType {
3921    fn field_len(&self) -> usize {
3922        4
3923    }
3924}
3925
3926// SISO-REF-010-2023 RequiredReliabilityService [UID 74]
3927#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3928pub enum RequiredReliabilityService {
3929    #[default]
3930    Acknowledged = 0,
3931    Unacknowledged = 1,
3932}
3933
3934impl RequiredReliabilityService {
3935    #[must_use]
3936    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
3937        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
3938    }
3939}
3940
3941impl FieldSerialize for RequiredReliabilityService {
3942    fn serialize_field(&self, buf: &mut BytesMut) {
3943        buf.put_u8(*self as u8);
3944    }
3945}
3946
3947impl FieldDeserialize for RequiredReliabilityService {
3948    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
3949        Self::deserialize(buf)
3950    }
3951}
3952
3953impl FieldLen for RequiredReliabilityService {
3954    fn field_len(&self) -> usize {
3955        1
3956    }
3957}
3958
3959// SISO-REF-010-2023 EmitterName [UID 75]
3960#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
3961#[allow(deprecated, non_camel_case_types)]
3962pub enum EmitterName {
3963    #[default]
3964    _12456X = 2,
3965    _1L117 = 3,
3966    _1L121E = 4,
3967    _1L250 = 5,
3968    _1L220U = 6,
3969    _1L1221E = 7,
3970    _1RL257 = 9,
3971    _1RL138 = 10,
3972    _1RL257Jammer = 11,
3973    _5N20 = 12,
3974    _5H62B = 13,
3975    _5P10 = 14,
3976    _5P10E = 15,
3977    _5P1001 = 16,
3978    _5P1001E = 17,
3979    _5P1002 = 18,
3980    _5P1002E = 19,
3981    _5P1003 = 20,
3982    _5P1003E = 21,
3983    _5P10EMOD = 22,
3984    _621A3 = 25,
3985    _860F1AL101 = 40,
3986    _9B1103M2 = 42,
3987    _1226DECCAMIL = 45,
3988    _9B1348 = 46,
3989    _3KM6 = 47,
3990    _9KR400 = 48,
3991    _50N6A = 49,
3992    _55G61 = 50,
3993    _59N6 = 55,
3994    _5N69 = 57,
3995    _67N6 = 60,
3996    _76T6 = 63,
3997    _77T6ABM = 64,
3998    _80K6 = 65,
3999    _91N6A = 66,
4000    _96L6E = 70,
4001    _96L6TsP = 75,
4002    _9C18M3 = 76,
4003    _9C36M = 77,
4004    _9GR400 = 80,
4005    _9GR400A = 81,
4006    _9GR600 = 90,
4007    _9GR606 = 91,
4008    _9LV100 = 125,
4009    _9LV200TA = 135,
4010    _9LV200TV = 180,
4011    _9LV200TT = 181,
4012    _9LV200MKIII = 183,
4013    _9LV326 = 185,
4014    _9M96E2Seeker = 190,
4015    _9S15M2 = 195,
4016    _9S19M2 = 196,
4017    _9S19ME = 197,
4018    _9S32M = 198,
4019    _9S32ME = 199,
4020    _9S36E = 200,
4021    _9S112 = 215,
4022    A310Z = 225,
4023    A325A = 270,
4024    A346Z = 315,
4025    A353B = 360,
4026    A372A = 405,
4027    A372B = 450,
4028    A372C = 495,
4029    A377A = 540,
4030    A377B = 585,
4031    A380Z = 630,
4032    A381Z = 675,
4033    A398Z = 720,
4034    A403Z = 765,
4035    A409A = 810,
4036    A418A = 855,
4037    A419Z = 900,
4038    A429Z = 945,
4039    A432Z = 990,
4040    A434Z = 1035,
4041    AA6CAcrid = 1070,
4042    AA7CApex = 1073,
4043    A401A = 1080,
4044    AA10A = 1081,
4045    AA10CAlamoC = 1082,
4046    AA13ArrowSeeker = 1085,
4047    AAM4BMH = 1090,
4048    AA300 = 1094,
4049    AA12Seeker = 1095,
4050    AD4A = 1096,
4051    ADES = 1097,
4052    ADS4LRSR = 1098,
4053    ACR430 = 1099,
4054    Agave = 1100,
4055    ACSOPRIE = 1101,
4056    ABD2000 = 1102,
4057    ADACMK1 = 1110,
4058    ADACMK2 = 1111,
4059    ADAR = 1113,
4060    ADOUR = 1115,
4061    AGAT9B1348 = 1117,
4062    AdrosKT01AV = 1118,
4063    Agat9E420 = 1120,
4064    AGM158JASSMSAR = 1122,
4065    AGM88HARMMMW = 1123,
4066    AGRION15 = 1125,
4067    AHV7 = 1130,
4068    AHV17 = 1150,
4069    AIMK23 = 1170,
4070    AIDAII = 1215,
4071    AIM120A = 1216,
4072    AIM7MSparrow = 1218,
4073    _1L271 = 1230,
4074    ALA51 = 1240,
4075    AlbatrosMK2 = 1260,
4076    ALT50 = 1263,
4077    ALTAIR = 1264,
4078    AMAPS717 = 1265,
4079    AMES13MK1 = 1268,
4080    WGU16B = 1270,
4081    _1L133BoxSpring = 1280,
4082    _1L133BoxSpringB = 1282,
4083    AMDR3D = 1288,
4084    ANASPS502 = 1305,
4085    Anemone = 1306,
4086    ANRITSUElectricAR30A = 1350,
4087    AntilopeV = 1395,
4088    ANAAQ24 = 1397,
4089    ANADM160 = 1398,
4090    AN_ALE50 = 1400,
4091    AN_ALQ76 = 1410,
4092    AN_ALQ99 = 1440,
4093    AN_ALQ99Band4 = 1441,
4094    AN_ALQ99LBT = 1442,
4095    AN_ALQ100 = 1485,
4096    AN_ALQ101 = 1530,
4097    AN_ALQ119 = 1575,
4098    AN_ALQ122 = 1585,
4099    AN_ALQ126A = 1620,
4100    AN_ALQ128 = 1621,
4101    AN_ALQ126B = 1622,
4102    AN_ALQ131 = 1626,
4103    AN_ALQ131BlkII = 1627,
4104    AN_ALQ135CD = 1628,
4105    AN_ALQ144A3 = 1630,
4106    AN_ALQ153 = 1632,
4107    AN_ALQ157Jammer = 1633,
4108    AN_ALQ155 = 1634,
4109    AN_ALQ156 = 1635,
4110    AN_ALQ161A = 1636,
4111    AN_ALQ161 = 1637,
4112    AN_ALQ162 = 1638,
4113    AN_ALQ164 = 1639,
4114    AN_ALQ165 = 1640,
4115    AN_ALQ187Jammer = 1641,
4116    AN_ALQ167 = 1642,
4117    AN_ALQ1721 = 1643,
4118    AN_ALQ1722 = 1644,
4119    AN_ALQ1723 = 1645,
4120    AN_ALQ176 = 1646,
4121    AN_ALQ178 = 1647,
4122    AN_ALQ184 = 1648,
4123    AN_ALQ1849 = 1649,
4124    AN_ALQ188 = 1650,
4125    AN_ALQ214 = 1651,
4126    AN_ALR56 = 1652,
4127    AN_ALQ221 = 1653,
4128    AN_ALR69 = 1654,
4129    AN_ALQ211 = 1655,
4130    AN_ALT16A = 1656,
4131    AN_ALQ173 = 1657,
4132    AN_ALT28 = 1658,
4133    AN_ALR66BJammer = 1659,
4134    AN_ALT32A = 1660,
4135    AN_ALQ196 = 1661,
4136    ALQ249NextGenerationJammer = 1662,
4137    AN_ALQ2401Jammer = 1663,
4138    AN_ALR66BJammer2 = 1664,
4139    AN_APD10 = 1665,
4140    AN_ALQ213 = 1670,
4141    ALQ214A45Jammer = 1672,
4142    AN_ALQ218 = 1680,
4143    ANAPG50 = 1700,
4144    ANAPG53 = 1710,
4145    ANAPG59 = 1755,
4146    ANAPG63 = 1800,
4147    ANAPG631 = 1805,
4148    ANAPG632 = 1807,
4149    ANAPG633 = 1809,
4150    ANAPG65 = 1845,
4151    ANAPG66 = 1870,
4152    ANAPG66V = 1871,
4153    ANAPG66V2 = 1872,
4154    ANAPG67 = 1880,
4155    ANAPG68 = 1890,
4156    ANAPG689 = 1895,
4157    ANAPG70 = 1935,
4158    ANAPG71 = 1940,
4159    ANAPG73 = 1945,
4160    ANAPG77 = 1960,
4161    ANAPG78 = 1970,
4162    ANAPG79 = 1971,
4163    ANAPG80 = 1972,
4164    ANAPG81 = 1974,
4165    ANAPG821 = 1975,
4166    ANAPG83 = 1976,
4167    ANAPG502 = 1980,
4168    ANAPN1 = 2025,
4169    ANAPN22 = 2070,
4170    ANAPN59 = 2115,
4171    ANAPN69 = 2160,
4172    ANAPN81 = 2205,
4173    ANAPN102 = 2220,
4174    ANAPN117 = 2250,
4175    ANAPN118 = 2295,
4176    ANAPN122 = 2320,
4177    ANAPN130 = 2340,
4178    ANAPN131 = 2385,
4179    ANAPN133 = 2430,
4180    ANAPN134 = 2475,
4181    ANAPN141 = 2476,
4182    ANAPN147 = 2520,
4183    ANAPN150 = 2565,
4184    ANAPN153 = 2610,
4185    ANAPN154 = 2655,
4186    ANAPN155 = 2700,
4187    ANAPN159 = 2745,
4188    ANAPN177 = 2746,
4189    ANAPN179 = 2747,
4190    ANAPN169 = 2748,
4191    ANAPN182 = 2790,
4192    ANAPN187 = 2835,
4193    ANAPN190 = 2880,
4194    ANAPN194 = 2925,
4195    ANAPN195 = 2970,
4196    ANAPN198 = 3015,
4197    ANAPN200 = 3060,
4198    ANAPN202 = 3105,
4199    ANAPN215 = 3106,
4200    ANAPN209 = 3120,
4201    ANAPN209D = 3121,
4202    ANAPN209A = 3122,
4203    ANAPN215_2 = 3148,
4204    ANAPN217 = 3150,
4205    ANAPN218 = 3152,
4206    ANAPN224 = 3153,
4207    ANAPN227 = 3154,
4208    ANAPN230 = 3155,
4209    ANAPN232 = 3156,
4210    ANAPN237A = 3157,
4211    ANAPN234 = 3158,
4212    ANAPN235 = 3159,
4213    ANAPN238 = 3160,
4214    ANAPN222 = 3161,
4215    ANAPN239 = 3162,
4216    ANAPN241 = 3164,
4217    ANAPN242 = 3166,
4218    ANAPN243 = 3170,
4219    ANAPN506 = 3195,
4220    ANAPQ72 = 3240,
4221    ANAPQ99 = 3285,
4222    ANAPQ100 = 3330,
4223    ANAPQ102 = 3375,
4224    ANAPQ107 = 3376,
4225    ANAPQ109 = 3420,
4226    ANAPQ113 = 3465,
4227    ANAPQ120 = 3510,
4228    ANAPQ122 = 3512,
4229    ANAPQ126 = 3555,
4230    ANAPQ128 = 3600,
4231    ANAPQ129 = 3645,
4232    ANAPQ148 = 3690,
4233    ANAPQ150A = 3700,
4234    ANAPQ153 = 3735,
4235    ANAPQ155 = 3770,
4236    ANAPQ159 = 3780,
4237    ANAPQ164 = 3785,
4238    ANAPQ166 = 3788,
4239    ANAPQ170 = 3790,
4240    ANAPQ174 = 3791,
4241    ANAPQ180 = 3794,
4242    ANAPQ181 = 3795,
4243    ANAPQ186 = 3800,
4244    ANAPS15J = 3810,
4245    ANAPS162 = 3813,
4246    ANAPS31 = 3820,
4247    ANAPS42 = 3825,
4248    ANAPS80 = 3870,
4249    ANAPS88 = 3915,
4250    ANAPS88A = 3916,
4251    ANAPS94 = 3920,
4252    ANAPS96 = 3922,
4253    ANAPS113 = 3958,
4254    ANAPS115 = 3960,
4255    ANAPS116 = 4005,
4256    ANAPS120 = 4050,
4257    ANAPS121 = 4095,
4258    ANAPS124 = 4140,
4259    ANAPS125 = 4185,
4260    ANAPS127 = 4190,
4261    ANAPS128 = 4230,
4262    ANAPS130 = 4275,
4263    ANAPS133 = 4320,
4264    ANAPS134 = 4365,
4265    ANAPS137 = 4410,
4266    ANAPS1375 = 4413,
4267    ANAPS137B = 4415,
4268    ANAPS137B5 = 4420,
4269    ANAPS137D5Elta = 4425,
4270    ANAPS138 = 4455,
4271    ANAPS139 = 4460,
4272    ANAPS143 = 4464,
4273    ANAPS1431 = 4465,
4274    ANAPS143B = 4466,
4275    ANAPS1433 = 4467,
4276    ANAPS143B3 = 4468,
4277    ANAPS153 = 4475,
4278    ANAPS154 = 4476,
4279    ANAPS150 = 4480,
4280    ANAPS145 = 4482,
4281    ANAPS147 = 4485,
4282    ANAPS149 = 4486,
4283    ANAPS503 = 4489,
4284    ANAPS504 = 4490,
4285    ANAPS705 = 4491,
4286    ANAPW22 = 4500,
4287    ANAPW23 = 4545,
4288    ANAPX6 = 4590,
4289    ANAPX7 = 4635,
4290    ANAPX39 = 4680,
4291    ANAPX64 = 4681,
4292    ANAPX72 = 4725,
4293    ANAPX76 = 4770,
4294    ANAPX78 = 4815,
4295    ANAPX100 = 4816,
4296    ANAPX101 = 4860,
4297    ANAPX113AIFF = 4870,
4298    ANAPY1 = 4900,
4299    ANAPY2 = 4905,
4300    ANAPY3 = 4950,
4301    ANAPY7 = 4952,
4302    ANAPY8 = 4953,
4303    ANAPY9 = 4954,
4304    ANAPY10 = 4955,
4305    ANARN21 = 4995,
4306    ANARN52 = 5040,
4307    ANARN84 = 5085,
4308    ANARN118 = 5130,
4309    ANARN153V = 5131,
4310    ANARN153 = 5165,
4311    ANARW73 = 5175,
4312    ANASB1 = 5220,
4313    ANASG21 = 5265,
4314    ANASN137 = 5266,
4315    ANASN128 = 5270,
4316    ANASQ108 = 5280,
4317    ANASQ239 = 5285,
4318    ANAST502 = 5290,
4319    ANAVQ55 = 5300,
4320    ANAWG9 = 5310,
4321    ANBRN1 = 5320,
4322    ANBPS5 = 5325,
4323    ANBPS9 = 5355,
4324    ANBPS15 = 5400,
4325    ANBPS15H = 5401,
4326    ANBPS15J = 5402,
4327    ANBPS16 = 5405,
4328    ANBPS162 = 5406,
4329    ANCPN4 = 5410,
4330    ANCPN18 = 5415,
4331    ANCRM30 = 5420,
4332    ANDPW23 = 5430,
4333    ANDSQ26PhoenixMH = 5445,
4334    ANDSQ28HarpoonMH = 5490,
4335    ANFPN1 = 5491,
4336    ANFPN28 = 5493,
4337    ANFPN33 = 5494,
4338    ANFPN40 = 5495,
4339    ANFPN62 = 5500,
4340    ANFPN66 = 5502,
4341    ANFPS8 = 5503,
4342    ANFPN67 = 5504,
4343    ANFPS16 = 5505,
4344    ANFPS5 = 5506,
4345    ANFPS18 = 5507,
4346    ANFPS89 = 5508,
4347    ANFPS49 = 5509,
4348    ANFPS117 = 5510,
4349    ANFPS85 = 5511,
4350    ANFPS88 = 5512,
4351    ANFPS113 = 5513,
4352    ANFPS115 = 5514,
4353    ANFPS20R = 5515,
4354    ANFPS132 = 5516,
4355    ANFPS77 = 5520,
4356    ANFPS41 = 5521,
4357    ANFPS100A = 5522,
4358    ANFPS103 = 5525,
4359    ANFPS108 = 5526,
4360    ANGPN12 = 5527,
4361    ANFPS124 = 5528,
4362    ANFPS129 = 5529,
4363    ANGPX6 = 5530,
4364    ANGPX8 = 5535,
4365    ANGRN12 = 5537,
4366    ANMPN14K = 5538,
4367    ANMPN14 = 5539,
4368    ANMPQ10 = 5540,
4369    ANMPN17 = 5541,
4370    ANMPQ3339465761ILL = 5545,
4371    ANMPQ34485562TA = 5550,
4372    ANMPQ49 = 5551,
4373    ANMPQ3550TA = 5555,
4374    ANMPQ50C = 5556,
4375    ANMPQ3751TT = 5560,
4376    ANMPQ43 = 5565,
4377    ANMPQ50 = 5567,
4378    ANMPQ53 = 5570,
4379    ANMPQ63 = 5571,
4380    ANMPQ64 = 5575,
4381    ANSLQ32 = 5576,
4382    ANMPQ65 = 5577,
4383    ANSLQ324 = 5578,
4384    ANSLQ32A = 5579,
4385    ANSPG34 = 5580,
4386    ANMSQ104 = 5582,
4387    ANMPS36 = 5583,
4388    ANSLQ503 = 5584,
4389    ANSPG48MK25MOD3 = 5620,
4390    ANSPG50 = 5625,
4391    ANSPG51 = 5670,
4392    ANPPQ2 = 5690,
4393    ANPPS15 = 5700,
4394    ANPPS5 = 5705,
4395    ANPPS5D = 5710,
4396    ANSPG51CWITI = 5715,
4397    ANSPG51FC = 5760,
4398    ANSPG51CD = 5761,
4399    ANSPG52 = 5805,
4400    ANSPG53 = 5850,
4401    ANSPG55B = 5895,
4402    ANSPG60 = 5940,
4403    ANSPG62 = 5985,
4404    ANSPG503 = 5995,
4405    ANSPN4 = 6015,
4406    ANSPN11 = 6025,
4407    ANSPN35 = 6030,
4408    ANSPN41 = 6050,
4409    ANSPN43 = 6075,
4410    ANSPN43A = 6076,
4411    ANSPN43C = 6078,
4412    ANSPN46 = 6085,
4413    ANSPQ2 = 6120,
4414    ANSPQ5A = 6155,
4415    ANSPQ9A = 6165,
4416    ANSPQ9B = 6166,
4417    ANSPQ34 = 6190,
4418    ANSPS4 = 6210,
4419    ANSPS5 = 6255,
4420    ANSPS5C = 6300,
4421    ANSPS6 = 6345,
4422    ANSPS10 = 6390,
4423    ANSPS21 = 6435,
4424    ANSPS28 = 6480,
4425    ANSPS37 = 6525,
4426    ANSPS39A = 6570,
4427    ANSPS40 = 6615,
4428    ANSPS41 = 6660,
4429    ANSPS48 = 6705,
4430    ANSPS48C = 6750,
4431    ANSPS48E = 6752,
4432    ANSPS49 = 6795,
4433    ANSPS491 = 6796,
4434    ANSPS492 = 6797,
4435    ANSPS493 = 6798,
4436    ANSPS494 = 6799,
4437    ANSPS495 = 6800,
4438    ANSPS496 = 6801,
4439    ANSPS497 = 6802,
4440    ANSPS498 = 6803,
4441    ANSPS49A1 = 6804,
4442    ANSPS52 = 6840,
4443    ANSPS53 = 6885,
4444    ANSPS55 = 6930,
4445    ANSPS52C = 6945,
4446    ANSPS55CS = 6970,
4447    ANSPS55SS = 6975,
4448    ANSPS58 = 7020,
4449    ANSPS58C = 7025,
4450    ANSPS59 = 7065,
4451    ANSPS64 = 7110,
4452    ANSPS649 = 7119,
4453    SPS6412 = 7120,
4454    ANSPS65 = 7155,
4455    ANSPS66 = 7175,
4456    ANSPS67 = 7200,
4457    ANSPS73_1 = 7201,
4458    ANSPS69 = 7210,
4459    ANSPS73_2 = 7215,
4460    ANSPS74 = 7216,
4461    ANSPS88 = 7225,
4462    ANSPS501 = 7226,
4463    ANSPS505 = 7230,
4464    ANSPY1 = 7245,
4465    ANSPY1A = 7250,
4466    ANSPY1B_1 = 7252,
4467    ANSPY1B_2 = 7253,
4468    ANSPY1D_1 = 7260,
4469    ANSPY1D_2 = 7261,
4470    ANSPY1F = 7265,
4471    ANSPY3 = 7266,
4472    ANTPN12 = 7267,
4473    ANSPY4 = 7268,
4474    ANTLQ32ARMDecoy = 7269,
4475    ANTPN17 = 7270,
4476    ANTPN8 = 7271,
4477    ANTPN22 = 7272,
4478    ANTLQ17A = 7273,
4479    ANTMS1 = 7274,
4480    ANTPN24 = 7275,
4481    ANTPN25 = 7276,
4482    ANTMS2 = 7277,
4483    ANTPN19 = 7278,
4484    ANTPN31 = 7279,
4485    ANTPQ18 = 7280,
4486    ANSPY6 = 7281,
4487    ANTPQ36 = 7295,
4488    ANTPQ37 = 7300,
4489    ANTPQ38 = 7301,
4490    ANTPQ39 = 7302,
4491    ANTPQ47 = 7303,
4492    ANTPS43 = 7305,
4493    ANTPS43E = 7310,
4494    ANTPQ48 = 7311,
4495    ANTPQ49 = 7312,
4496    ANTPQ46A = 7313,
4497    ANTPS34 = 7314,
4498    ANTPS59 = 7315,
4499    ANTPS44 = 7316,
4500    ANTPQ50 = 7317,
4501    ANTPS63 = 7320,
4502    ANTPS65 = 7321,
4503    ANTPS701 = 7322,
4504    ANTPS63SS = 7323,
4505    ANTPS73 = 7324,
4506    ANTPS75 = 7325,
4507    ANTPS77 = 7326,
4508    ANTPS78 = 7327,
4509    ANTPS79 = 7328,
4510    ANTPS703 = 7329,
4511    ANTPX467 = 7330,
4512    ANTPS80 = 7331,
4513    ANTPY2 = 7333,
4514    ANTSQ288 = 7334,
4515    ANULQ6A = 7335,
4516    ANULQ19 = 7340,
4517    ANULQ21 = 7345,
4518    ANUPN25 = 7380,
4519    ANUPS1 = 7425,
4520    ANUPS2 = 7426,
4521    ANUPS3 = 7427,
4522    ANUPX1 = 7470,
4523    ANUPX5 = 7515,
4524    ANUPX11 = 7560,
4525    ANUPX12 = 7605,
4526    ANUPX17 = 7650,
4527    ANUPX23 = 7695,
4528    ANUSQ1133 = 7700,
4529    ANVPS2 = 7740,
4530    ANPLM3 = 7750,
4531    ANPLM3A = 7751,
4532    ANPLM4 = 7752,
4533    ANZPY1 = 7753,
4534    ANZPY2MPRTIP = 7754,
4535    ANZPY3 = 7755,
4536    ANZPY8 = 7760,
4537    AORL1AS = 7761,
4538    AORL85KTKMTA = 7762,
4539    APAR = 7765,
4540    Aparna = 7770,
4541    APECSII = 7780,
4542    ApelcoAD77 = 7785,
4543    APG71 = 7830,
4544    APN148 = 7875,
4545    APN227 = 7920,
4546    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
4547    APQ113 = 7965,
4548    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
4549    APQ120 = 8010,
4550    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
4551    APQ148 = 8055,
4552    APS504V3 = 8100,
4553    AQUITAINEII = 8102,
4554    AR1 = 8103,
4555    AR3D = 8105,
4556    PlesseyAR5 = 8112,
4557    AR15 = 8113,
4558    AR152 = 8114,
4559    AR320 = 8115,
4560    AR325 = 8118,
4561    AR327 = 8120,
4562    Arbalet52 = 8121,
4563    ARBB31 = 8122,
4564    ARBB33 = 8123,
4565    ARIES = 8126,
4566    AriesNav = 8127,
4567    AriesCS = 8128,
4568    ARGS14E = 8134,
4569    ARGS31 = 8135,
4570    ARGUS = 8140,
4571    ARM31 = 8145,
4572    ARECIBO = 8150,
4573    ARED = 8160,
4574    ARI5954 = 8190,
4575    ARI5955 = 8235,
4576    ARI5979 = 8280,
4577    ARGSN31 = 8281,
4578    ARGOS10 = 8282,
4579    ARGOS800 = 8283,
4580    ARI5983 = 8284,
4581    ARI5991 = 8285,
4582    ARI5995 = 8290,
4583    ARINC564BNDXKINGRDR1E = 8325,
4584    ARINC700BNDXKINGRDR1E = 8370,
4585    ARK1 = 8375,
4586    ARLMMTI = 8378,
4587    ARMOR = 8379,
4588    ARSR3 = 8380,
4589    ARS400 = 8381,
4590    ARSR1 = 8382,
4591    ARSR4 = 8384,
4592    ARSR18 = 8390,
4593    ARTHUR = 8395,
4594    ARTHURMODB = 8400,
4595    ARTHURMODC = 8405,
4596    ARTISAN3D = 8410,
4597    AS2Kipper = 8415,
4598    AS2KipperMH = 8460,
4599    AS3YJ83KmmWMH = 8470,
4600    AS_34KormoranSeeker = 8480,
4601    AS4Kitchen = 8505,
4602    AS4KitchenMH = 8550,
4603    AS5KeltMH = 8595,
4604    AS6KingfishMH = 8640,
4605    AS7Kerry = 8685,
4606    AS7KerryMG = 8730,
4607    AS15KENTaltimeter = 8735,
4608    AS17AKryptonSeeker = 8736,
4609    AS17BKryptonSeeker = 8737,
4610    AS901 = 8750,
4611    AS901A = 8751,
4612    ASARS2 = 8755,
4613    ASDEKDD = 8756,
4614    ASLESHA = 8757,
4615    ASMGCS = 8758,
4616    ASMI18X = 8759,
4617    AspideAAMSAMILL = 8760,
4618    ASMI3 = 8761,
4619    AselsanMAR = 8762,
4620    ASR2000 = 8771,
4621    ASR4 = 8772,
4622    ASR4D = 8773,
4623    ASRO = 8775,
4624    ASR12_1 = 8776,
4625    ASR22AL = 8778,
4626    ASR3 = 8779,
4627    ASR5 = 8780,
4628    ASR7 = 8782,
4629    ASR8 = 8785,
4630    ASR9 = 8790,
4631    ASR9000 = 8791,
4632    ASTI = 8792,
4633    ASR11DASR = 8793,
4634    ASR12_2 = 8795,
4635    RaytheonASR10SS = 8812,
4636    ASR23SS = 8816,
4637    Arabel = 8818,
4638    ASTRE = 8819,
4639    AT2SwatterMG = 8820,
4640    _9K114ShturmMG = 8824,
4641    ASTOR = 8825,
4642    ASTRARCI = 8826,
4643    ATCR22 = 8830,
4644    ATCR22M = 8831,
4645    ATCR2T = 8832,
4646    ATCR33 = 8840,
4647    ATCR33KM = 8845,
4648    ATCR33S = 8846,
4649    ATCR3T = 8847,
4650    ATCR44 = 8848,
4651    ATCR44K = 8849,
4652    Argos73 = 8850,
4653    ATCR44MS = 8851,
4654    ATCR4T = 8852,
4655    AtlasElektronkTRSN = 8865,
4656    ATLAS8600X = 8866,
4657    Atlas9600M = 8867,
4658    ATLAS9600X = 8868,
4659    ATLAS9600S = 8869,
4660    ATLAS9740VTS = 8870,
4661    ATLASS = 8871,
4662    ATR500C = 8880,
4663    AVG65 = 8910,
4664    AVH7 = 8955,
4665    AVIACM = 8980,
4666    AVIAD = 8985,
4667    Aviaconversia = 8990,
4668    AviaconversiaII = 8993,
4669    AviaconversiaIII = 8995,
4670    AVQ20 = 9000,
4671    AVQ21 = 9005,
4672    AVQ30X = 9045,
4673    AVQ50 = 9075,
4674    AVQ70 = 9090,
4675    AWS5 = 9135,
4676    AWS6 = 9180,
4677    AWS6B300 = 9185,
4678    B597Z = 9200,
4679    B636Z = 9205,
4680    BackBoard = 9215,
4681    BackNetAB = 9225,
4682    BackTrap = 9270,
4683    BAESystemsRT1805APN = 9280,
4684    BAESDASS2000Jammer = 9281,
4685    BalanceBeam = 9285,
4686    BALTIKAB = 9300,
4687    BALTYK = 9310,
4688    BallEnd = 9315,
4689    BallGun = 9360,
4690    BALLPOINT = 9370,
4691    BandStand = 9405,
4692    BandStand3 = 9406,
4693    P3537 = 9450,
4694    BARAX = 9475,
4695    BASIR110D = 9485,
4696    BassTilt = 9495,
4697    Badger = 9505,
4698    BarracudaJammer = 9510,
4699    BaykalCountermeasuresSuite = 9530,
4700    Beacon = 9540,
4701    BeanSticks = 9585,
4702    BeeHind = 9630,
4703    BellNipJammer = 9638,
4704    BellPushJammer = 9639,
4705    BellCrownA = 9640,
4706    BellCrownB = 9642,
4707    BellSquat = 9643,
4708    BIGBACK = 9645,
4709    BigBirdABC = 9659,
4710    BigBirdD = 9660,
4711    BigBirdDMod = 9661,
4712    BigBirdE91N6E = 9662,
4713    BigBulge = 9675,
4714    BigBulgeA = 9720,
4715    BigBulgeB = 9765,
4716    BIGEYE = 9775,
4717    SNAR10 = 9780,
4718    BIGHEADB = 9781,
4719    BigMesh = 9810,
4720    BigNet = 9855,
4721    _9S15MT = 9885,
4722    BillFold = 9900,
4723    BLIGHTER400 = 9903,
4724    BlowpipeMG = 9905,
4725    BLR = 9920,
4726    BlueFox = 9930,
4727    BlueKestrel = 9933,
4728    BlueVixen = 9935,
4729    BlueSilk = 9945,
4730    BlueParrot = 9990,
4731    BlueOrchid = 10035,
4732    BMDJG8715 = 10057,
4733    BoatSail = 10080,
4734    BORA550 = 10090,
4735    BoforsElectronic9LV331 = 10125,
4736    BoforsEricssonSeaGiraffe50HC = 10170,
4737    BowlMesh = 10215,
4738    BoxBrick = 10260,
4739    BoxTrail = 10305,
4740    BMKG300GJammingPod = 10308,
4741    BMKG600JammingPod = 10310,
4742    BMKG800JammingPod = 10312,
4743    BMKG860186058606 = 10315,
4744    BPS11A = 10350,
4745    BPS14 = 10395,
4746    BPS15A = 10440,
4747    BR3440CAX57 = 10450,
4748    BR15TokyoKEIKI = 10485,
4749    BrahMos = 10500,
4750    BridgeMaster = 10510,
4751    BridgeMasterEEPA = 10511,
4752    BridgeMasterEATAandARPA = 10512,
4753    BridgeMasterEnaval = 10513,
4754    BrimstonemmWMH = 10520,
4755    BreadBin = 10530,
4756    Asr = 10540,
4757    BT271 = 10575,
4758    BU304 = 10595,
4759    BX732 = 10620,
4760    BUKMB = 10630,
4761    BuranD = 10642,
4762    BUREVISNYK1 = 10650,
4763    BuzzStand = 10665,
4764    C5AMultiModeRadar = 10710,
4765    C802AL = 10711,
4766    CAESAR = 10740,
4767    Caiman = 10755,
4768    CakeStand = 10800,
4769    CalypsoC61 = 10845,
4770    CalypsoC63 = 10846,
4771    CalypsoIi = 10890,
4772    CalypsoIII = 10891,
4773    CalypsoIV = 10892,
4774    CardionCoastal = 10895,
4775    CastorIi = 10935,
4776    Castor2JTT = 10940,
4777    CatHouse = 10980,
4778    CDR431 = 10985,
4779    CEAFAR = 10987,
4780    CEAMOUNT = 10988,
4781    CEAFAR2L = 10989,
4782    CEROS200 = 10990,
4783    CEROS200CWI = 10991,
4784    CEATAC = 10992,
4785    CEAOPS = 10993,
4786    CerberusIII = 10994,
4787    CHSSN6 = 10995,
4788    CerberusIV = 10996,
4789    ChairBlackTT = 11000,
4790    ChairBlackILL = 11010,
4791    LEMZ96L6 = 11020,
4792    CheeseBrick = 11025,
4793    CheeseCake = 11030,
4794    LeninetzObzorMS = 11070,
4795    Clamshell = 11115,
4796    CLC1 = 11117,
4797    CLC2 = 11118,
4798    CLC3 = 11119,
4799    CLR155 = 11120,
4800    COASTWATCHER100 = 11123,
4801    CoastalGiraffe = 11125,
4802    COBRA = 11130,
4803    CobraShoe = 11133,
4804    Colibri = 11137,
4805    CollinsWXR300 = 11155,
4806    CollinsWXR700X = 11160,
4807    CollinsTWR850 = 11165,
4808    CollinsDN101 = 11205,
4809    COMET1 = 11230,
4810    CONDORMK2 = 11235,
4811    ConsiliumSelesmarRTM25XIM = 11240,
4812    ContravesSeaHunterMK4 = 11250,
4813    CornCan = 11260,
4814    COSMOSKYMED1 = 11265,
4815    CR105RMCA = 11270,
4816    CREWDuke2 = 11280,
4817    CREWDuke3 = 11290,
4818    CrossBird = 11295,
4819    CrossDome = 11340,
4820    CrossLegs = 11385,
4821    CrossOut = 11430,
4822    CrossSlot = 11475,
4823    CrossSword = 11520,
4824    CrossUp = 11565,
4825    CrossSwordFC = 11610,
4826    CrotaleAcquisitionTA = 11655,
4827    CrotaleNGTA = 11660,
4828    CrotaleTT = 11665,
4829    CrotaleMGMissileSystem = 11700,
4830    CS10TA = 11715,
4831    CSFVaran = 11725,
4832    CSSN4MH = 11735,
4833    CSSC3CCAS1M1M2MH = 11745,
4834    HY2BMH = 11748,
4835    CSSC2BHY1AMH = 11790,
4836    CSSN4Sardine = 11800,
4837    CSSN8Saccade = 11810,
4838    CurlStoneB = 11825,
4839    CWS1 = 11830,
4840    CWS2 = 11835,
4841    CWS3 = 11840,
4842    Cygnus = 11860,
4843    CylinderHead = 11880,
4844    Cymbeline = 11902,
4845    CyranoII = 11925,
4846    CyranoIV = 11970,
4847    CyranoIVM = 11975,
4848    DA0100 = 12010,
4849    DA0500 = 12015,
4850    DA052 = 12016,
4851    DA_08 = 12018,
4852    Dawn = 12060,
4853    DCR = 12090,
4854    DeadDuck = 12105,
4855    DECCA20V909 = 12110,
4856    DECCA20V90S = 12111,
4857    DECCA45 = 12150,
4858    DECCA50 = 12195,
4859    DECCA71 = 12196,
4860    Decca72 = 12197,
4861    DECCA110 = 12240,
4862    DECCA170 = 12285,
4863    DECCAHF2 = 12292,
4864    DECCA202 = 12330,
4865    DECCAD202 = 12375,
4866    DECCA303 = 12420,
4867    DECCA535 = 12430,
4868    DECCA626 = 12465,
4869    DECCA629 = 12510,
4870    DECCA914 = 12555,
4871    DECCA916 = 12600,
4872    DECCA926 = 12610,
4873    DECCA1070A = 12615,
4874    Decca1008 = 12616,
4875    DECCA1226Commercial = 12645,
4876    DECCA1290 = 12655,
4877    DECCA1626 = 12690,
4878    DECCA2070 = 12691,
4879    Decca1630 = 12694,
4880    DECCA2459 = 12735,
4881    DECCAAWS1 = 12780,
4882    DECCAAWS2 = 12782,
4883    DECCAAWS4 = 12785,
4884    DECCAAWS42 = 12787,
4885    DECCAMAR = 12800,
4886    DECCARM326 = 12805,
4887    DECCARM416 = 12825,
4888    DECCARM970BT = 12850,
4889    DECCARM914 = 12870,
4890    DF21DSeeker = 12875,
4891    DECCARM1690 = 12915,
4892    DECCA1690 = 12916,
4893    DECCASuper101MK3 = 12960,
4894    DISS1 = 13005,
4895    DISS7 = 13006,
4896    DISS013 = 13007,
4897    DISS15D = 13015,
4898    DLD100A = 13020,
4899    RapierTTDN181 = 13050,
4900    Rapier2000TT = 13055,
4901    DogEar = 13095,
4902    DogHouse = 13140,
4903    DM3 = 13141,
4904    DM3B = 13142,
4905    DM5 = 13143,
4906    Don2 = 13185,
4907    DonAB2Kay = 13230,
4908    Donets = 13275,
4909    Doppler90Series = 13280,
4910    DownBeat = 13320,
4911    DR582 = 13360,
4912    DRAA2A = 13365,
4913    DRAA2B = 13410,
4914    DRAA9A = 13415,
4915    DRAA11A = 13420,
4916    DRAC37B = 13450,
4917    DRAC38 = 13452,
4918    DRAC39 = 13455,
4919    DRAC39A = 13456,
4920    DRAC43A = 13460,
4921    DRAC44A = 13465,
4922    DragonEye = 13477,
4923    DragonEye2 = 13480,
4924    DragonEye3 = 13481,
4925    DragonEye4 = 13485,
4926    DRBC30B = 13500,
4927    DRBC31A = 13545,
4928    DRBC31D = 13546,
4929    DRBC32 = 13585,
4930    DRBC32A = 13590,
4931    DRBC32D = 13635,
4932    DRBC33A = 13680,
4933    DRBI10 = 13725,
4934    DRBI23 = 13770,
4935    DRBJ11B = 13815,
4936    DRBN30 = 13860,
4937    DRBN32 = 13905,
4938    DRBN34 = 13915,
4939    DRBR51 = 13950,
4940    DRBV20A = 13994,
4941    DRBV20B = 13995,
4942    DRBV21Mars05 = 14020,
4943    DRBV22 = 14040,
4944    DRBV23 = 14041,
4945    DRBV26C = 14085,
4946    DRBV26D = 14086,
4947    DRBV30 = 14130,
4948    DRBV31 = 14131,
4949    DRBV50 = 14175,
4950    DRBV51 = 14220,
4951    DRBV51A = 14265,
4952    DRBV51B = 14310,
4953    DRBV51C = 14355,
4954    DropKick = 14400,
4955    DRUA31 = 14445,
4956    DrumTilt = 14490,
4957    DrumTiltA = 14535,
4958    DrumTiltB = 14545,
4959    DRUN30A = 14560,
4960    Dumbo = 14580,
4961    DWSR92 = 14583,
4962    DWSR93S = 14585,
4963    EAGLE = 14586,
4964    EAGLEMk1 = 14587,
4965    EAJPJammingPod = 14588,
4966    EKCOE390 = 14590,
4967    ECR90 = 14600,
4968    ECR90Jammer = 14601,
4969    EggCupAB = 14625,
4970    EISCAT = 14640,
4971    EKCOE120 = 14660,
4972    EKCO190 = 14670,
4973    Ekran1 = 14677,
4974    ELL8222 = 14710,
4975    ELL8240 = 14713,
4976    ELM2001B = 14715,
4977    ELM2022 = 14725,
4978    ELM2032 = 14726,
4979    ELM2052 = 14727,
4980    ELM2055 = 14728,
4981    ELM2060 = 14730,
4982    ELM2075 = 14735,
4983    ELM2022U3 = 14736,
4984    ELM2080 = 14737,
4985    ELM2080S = 14738,
4986    ELM2085 = 14739,
4987    ELM2106 = 14740,
4988    ELM2106NG = 14741,
4989    ELM2125 = 14742,
4990    ELM2129 = 14743,
4991    ELM2150 = 14744,
4992    ELM2083 = 14745,
4993    ELM2084 = 14746,
4994    ELM2160V1 = 14747,
4995    ELM2084MMR = 14748,
4996    ELM2112 = 14749,
4997    ELM2200 = 14750,
4998    ELM2133 = 14751,
4999    ELM2205 = 14755,
5000    ELM2207 = 14760,
5001    ELM2215 = 14765,
5002    ELM2216V = 14770,
5003    ELM2216XH = 14772,
5004    ELM2218S = 14775,
5005    ELT361 = 14776,
5006    ELM2258 = 14777,
5007    ELT553 = 14779,
5008    ELT558 = 14780,
5009    ELT572 = 14785,
5010    ELT715 = 14790,
5011    EltaELM2022A = 14800,
5012    ELTAELM2221GMSTGR = 14805,
5013    ELM2228S3D = 14806,
5014    ELM2705 = 14807,
5015    ELM2226 = 14808,
5016    ELM2228X = 14809,
5017    ELTASIS = 14810,
5018    ELM2238 = 14811,
5019    ELM2248 = 14815,
5020    ELM2288 = 14820,
5021    ELM2311 = 14821,
5022    ELM2026 = 14822,
5023    ELNA4007 = 14830,
5024    ELT318 = 14831,
5025    ELW2085 = 14832,
5026    ELT521 = 14833,
5027    ELW2090 = 14835,
5028    EnhancedMeteorDetectionRadarEMDR = 14845,
5029    EMD2900 = 14850,
5030    EMPAR = 14851,
5031    EndTray = 14895,
5032    EQ36 = 14896,
5033    EricssonSLAR = 14897,
5034    Erieye = 14898,
5035    ESR1 = 14900,
5036    ESR220 = 14901,
5037    ESR380 = 14902,
5038    ESTEREL = 14903,
5039    ET316 = 14905,
5040    ExocetType = 14935,
5041    ExocetAL = 14936,
5042    Exocet1 = 14940,
5043    Exocet1MH = 14985,
5044    Exocet2 = 15030,
5045    EyeBowl = 15075,
5046    EyeShield = 15120,
5047    F332Z = 15140,
5048    FalconClawTI = 15155,
5049    FalconClawTT = 15156,
5050    FALCON = 15160,
5051    FALCONG = 15161,
5052    FalconEye = 15163,
5053    FanSongA = 15165,
5054    FanSongBFTA = 15200,
5055    FanSongBFTT = 15210,
5056    FanSongCETA = 15220,
5057    FanSongCETT = 15230,
5058    FanSongCEMG = 15240,
5059    FanSongBFFMG = 15255,
5060    FanTail = 15300,
5061    FAR2117 = 15301,
5062    FAR2827 = 15302,
5063    FAR2837S = 15303,
5064    FAR3000 = 15304,
5065    FB7Radar = 15305,
5066    FCR1401 = 15310,
5067    FCS212E = 15312,
5068    FCS212G = 15313,
5069    FCS221A = 15315,
5070    FCS221C = 15317,
5071    FCS222 = 15318,
5072    FCS231 = 15319,
5073    FCS3 = 15320,
5074    FinCurve = 15345,
5075    FireCan = 15390,
5076    FireDish = 15435,
5077    FireDomeTA = 15470,
5078    FireDomeTT = 15475,
5079    FireDomeTI = 15480,
5080    FireIron = 15525,
5081    FireWheel = 15570,
5082    FishBowl = 15615,
5083    FK3 = 15620,
5084    FLAIR = 15650,
5085    FlapLid = 15660,
5086    _30N6E = 15661,
5087    FlapTruck = 15705,
5088    FlapWheel = 15750,
5089    FlashDance = 15795,
5090    FlashDanceM = 15800,
5091    P15 = 15840,
5092    _35N6 = 15842,
5093    FlatScreen = 15885,
5094    FlatSpin = 15930,
5095    FlatTrackJammer = 15970,
5096    FlatTwin = 15975,
5097    FL400 = 15980,
5098    FL1800 = 15985,
5099    FL1800U = 15990,
5100    FL1800S = 16000,
5101    Fledermaus = 16020,
5102    FLYCATCHER = 16030,
5103    FLYCATCHERMK2 = 16035,
5104    FlyScreen = 16065,
5105    FlyScreenAB = 16110,
5106    FlyTrapB = 16155,
5107    FM90 = 16160,
5108    FogLampMG = 16200,
5109    FogLampTT = 16245,
5110    FoilTwo = 16290,
5111    FootBall = 16300,
5112    FoxHunter = 16335,
5113    FoxFireAL = 16380,
5114    FoxFireILL = 16390,
5115    FR151A = 16400,
5116    FurunoFR1500FR1600 = 16405,
5117    FR1505DA = 16410,
5118    FR1510DS = 16412,
5119    FR2000 = 16420,
5120    Furuno2855W = 16421,
5121    FregatMAE = 16422,
5122    FregatN1 = 16423,
5123    FregatN2 = 16424,
5124    FrontDome = 16425,
5125    FregatMAE5 = 16426,
5126    FrontDoor = 16470,
5127    FrontPiece = 16515,
5128    FurbymmWMH = 16520,
5129    Furke = 16550,
5130    Furke2 = 16552,
5131    Furke4 = 16554,
5132    Furuno = 16560,
5133    Furuno1721 = 16561,
5134    Furuno1934C = 16564,
5135    Furuno1715 = 16565,
5136    Furuno1730 = 16580,
5137    Furuno1731Mark3 = 16581,
5138    Furuno1832 = 16585,
5139    Furuno1835 = 16587,
5140    Furuno1932 = 16590,
5141    Furuno1935 = 16596,
5142    Furuno701 = 16605,
5143    Furuno1940 = 16606,
5144    Furuno7112 = 16650,
5145    FurunoFR2130S = 16652,
5146    FurunoFAR2137S = 16654,
5147    FurunoFAR28X7 = 16655,
5148    FurunoFAR3230S = 16658,
5149    FR2110 = 16660,
5150    FR2115 = 16662,
5151    FR8062 = 16663,
5152    Furuno2125 = 16670,
5153    Furuno240 = 16690,
5154    Furuno2400 = 16695,
5155    FR801D = 16725,
5156    Furuno8051 = 16730,
5157    FurunoDRS2D = 16732,
5158    FurunoDRS4D = 16733,
5159    FurunoDRS4A = 16734,
5160    G030A = 16735,
5161    FurunoDRS6AXClass = 16736,
5162    DRS4W = 16737,
5163    GA0100 = 16740,
5164    Gabbiano = 16750,
5165    Gage = 16785,
5166    Gaofen3 = 16787,
5167    GAOFEN12 = 16789,
5168    GAPGATE = 16790,
5169    Gardenia = 16800,
5170    GarminGMR1224 = 16815,
5171    GarminFantom24 = 16820,
5172    GarminGWX68WeatherRadar = 16825,
5173    Garpin = 16830,
5174    GateGuard = 16833,
5175    GarpunBalE = 16835,
5176    GBS1 = 16840,
5177    GCA2000 = 16850,
5178    Furuno18321921Series = 16858,
5179    GEMINIDB = 16870,
5180    GEMOlympus = 16871,
5181    GEMSentinel = 16872,
5182    GEMBX132 = 16875,
5183    GEMSC2050X = 16876,
5184    GEMSeaEagle200N = 16877,
5185    GenericInternalJammer = 16879,
5186    MPDR12 = 16880,
5187    GENX = 16881,
5188    GepardTT = 16884,
5189    GERANF = 16888,
5190    GERFAUT = 16890,
5191    GFE1 = 16895,
5192    GIRAFFE = 16900,
5193    GIRAFFE1X = 16903,
5194    Giraffe40 = 16905,
5195    Giraffe50AT = 16908,
5196    Giraffe75 = 16912,
5197    GinSlingTA = 16915,
5198    GinSling = 16920,
5199    GinSlingMG = 16925,
5200    GoalKeeper = 16930,
5201    GoldenDome = 16935,
5202    GoldenHeart = 16940,
5203    GoldenRock = 16942,
5204    GPN22 = 16945,
5205    GPSJ10 = 16946,
5206    GPSJ25 = 16947,
5207    GPSJ40 = 16948,
5208    GPSJ50 = 16949,
5209    GRN9 = 16950,
5210    GRANK = 16951,
5211    GraveStone = 16960,
5212    GRAVES = 16963,
5213    GreenStain = 16965,
5214    GridBow = 17010,
5215    GrifoF = 17016,
5216    _9S32 = 17025,
5217    GRILLSCREEN = 17027,
5218    Grom2 = 17029,
5219    GROUNDMASTER400 = 17030,
5220    GT4 = 17031,
5221    GRS440 = 17032,
5222    GUARDIAN = 17050,
5223    Guardsman = 17055,
5224    RPK2 = 17070,
5225    HRJZ7264AJammer = 17075,
5226    H025 = 17079,
5227    HADR = 17080,
5228    HairNet = 17100,
5229    HalfPlateA = 17145,
5230    HalfPlateB = 17190,
5231    HARD = 17220,
5232    Harpoon = 17225,
5233    HatBox = 17230,
5234    HawkScreech = 17235,
5235    HayPole = 17250,
5236    HayRick = 17255,
5237    HeadLightA = 17280,
5238    HeadLights = 17325,
5239    HeadLightsC = 17370,
5240    HeadLightsMGA = 17415,
5241    HeadLightsMGB = 17460,
5242    HeadLightsTT = 17505,
5243    HeadNet = 17550,
5244    HeartAcheB = 17572,
5245    HellfiremmWMH = 17590,
5246    HenEgg = 17595,
5247    HenHouse = 17640,
5248    HenNest = 17685,
5249    HenRoost = 17730,
5250    Herakles = 17732,
5251    HF2MG = 17735,
5252    HGR105 = 17745,
5253    HighBrick = 17775,
5254    HighFix = 17820,
5255    HighGuard = 17842,
5256    HighLarkTI = 17865,
5257    HighLark1 = 17910,
5258    HighLark2 = 17955,
5259    HighLark4 = 18000,
5260    HighLune = 18045,
5261    HighPoleAB = 18090,
5262    HighScoop = 18135,
5263    _9S19MT = 18150,
5264    HighSieve = 18180,
5265    HillBlock = 18185,
5266    HimalayasCountermeasuresSuite = 18189,
5267    HG9550 = 18190,
5268    HJ6374 = 18193,
5269    HLDRADAR900 = 18194,
5270    HLJQ520 = 18195,
5271    HN503 = 18200,
5272    HNC03M = 18201,
5273    HomeTalk = 18225,
5274    HornSpoon = 18270,
5275    HotBrick = 18280,
5276    HotFlash = 18315,
5277    HotFlash2 = 18316,
5278    IHS6 = 18318,
5279    IRL144MHotShotTA = 18320,
5280    IRL144MHotShotTT = 18325,
5281    IRL144MHotShotMG = 18330,
5282    HPS106 = 18331,
5283    HPS104 = 18332,
5284    HQ9MH = 18339,
5285    HSR1128 = 18340,
5286    HT233 = 18348,
5287    HQ61 = 18350,
5288    HRJS = 18351,
5289    IDerbyER = 18352,
5290    IBIS80 = 18353,
5291    IBIS150 = 18355,
5292    IBIS200 = 18357,
5293    IFFMKXIIAIMSUPX29 = 18360,
5294    Janet = 18400,
5295    IFFMKXV = 18405,
5296    IFFINT = 18406,
5297    JackKnife = 18407,
5298    IFFTRSP = 18408,
5299    JMUSICElbitSystemsJammer = 18409,
5300    JavelinMG = 18410,
5301    JALQ8 = 18445,
5302    JFPS7 = 18449,
5303    JayBird = 18450,
5304    JFPS3 = 18451,
5305    JH10 = 18452,
5306    JMPQP7 = 18453,
5307    JL7 = 18454,
5308    JL10B = 18455,
5309    JMA1576 = 18456,
5310    JRCJMA92526CA = 18457,
5311    JLP40 = 18458,
5312    JRCJMR9200SeriesX = 18459,
5313    JRCNMD401 = 18460,
5314    JRCJRM310MK2 = 18461,
5315    JMA1596 = 18462,
5316    JMA7000 = 18464,
5317    JRCJMA7700 = 18465,
5318    JMA5320 = 18466,
5319    JRCJMR92106XC = 18467,
5320    JERS1 = 18468,
5321    JINDALEE = 18469,
5322    JRCJMA9900series = 18470,
5323    JLP40D = 18471,
5324    JRCJMA5300series = 18475,
5325    Jupiter = 18495,
5326    JupiterII = 18540,
5327    JY8 = 18550,
5328    JY8A = 18551,
5329    JY9 = 18555,
5330    JY9Modified = 18556,
5331    JY11EW = 18557,
5332    JY14 = 18560,
5333    JY14A = 18561,
5334    JY16 = 18565,
5335    JY24 = 18570,
5336    JAPG1 = 18571,
5337    JAPG2 = 18572,
5338    JY29 = 18575,
5339    JYL1 = 18578,
5340    JYL6 = 18580,
5341    JYL6A = 18582,
5342    JZQF612 = 18583,
5343    K376Z = 18585,
5344    K77M = 18586,
5345    Kaige = 18600,
5346    KALKAN = 18610,
5347    KBPAfganit = 18611,
5348    KALKANII = 18615,
5349    KelvinHughes2A = 18630,
5350    KelvinHughes149 = 18675,
5351    Karpaty = 18700,
5352    Kashtan3JammingSystem = 18710,
5353    KelvinHughestype1006 = 18720,
5354    KelvinHughestype1007 = 18765,
5355    KelvinHughesType1007FBand = 18766,
5356    KelvinHughes2007FBand = 18767,
5357    KelvinHughes2007IBand = 18768,
5358    KHNucleus5000 = 18770,
5359    KHMANTA = 18774,
5360    KHNUCLEUS26000 = 18775,
5361    KHNUCLEUS35000 = 18776,
5362    KHNUCLEUS36000A = 18777,
5363    KHFamily = 18780,
5364    KelvinHughes6000A = 18781,
5365    Kh38MAEMH = 18782,
5366    KG8605A = 18784,
5367    KH902M = 18785,
5368    KHOROMK = 18786,
5369    KHIBINY = 18787,
5370    KG300E = 18789,
5371    KHSharpEye = 18790,
5372    KHSharpEyeB = 18791,
5373    KHSharpEyeC = 18792,
5374    KH1700 = 18795,
5375    KingPin = 18797,
5376    KG300 = 18805,
5377    KiteScreech = 18810,
5378    KiteScreechA = 18855,
5379    KiteScreechB = 18900,
5380    KLC3B = 18930,
5381    KJ500NanjingRadar = 18944,
5382    Kivach = 18945,
5383    KJ500Jammer = 18946,
5384    KLC1 = 18947,
5385    KLJ1 = 18948,
5386    KLJ3 = 18950,
5387    KLJ4 = 18951,
5388    KLJ4B = 18952,
5389    KLJ5 = 18955,
5390    KLJ7 = 18960,
5391    KLJ7B = 18961,
5392    KLJ7A = 18962,
5393    KnifeRest = 18990,
5394    P10 = 19035,
5395    KNIFERESTC = 19037,
5396    KodenMD3730 = 19039,
5397    KJ2000 = 19040,
5398    KODENMDC900 = 19041,
5399    Koopol = 19042,
5400    KOPYOI = 19045,
5401    KR75 = 19050,
5402    KRONOS = 19051,
5403    KREDO1E = 19052,
5404    Krasukha2 = 19053,
5405    KRONOSGRANDNAVAL = 19054,
5406    KRM66E = 19060,
5407    KSASRN = 19080,
5408    KSATSR = 19125,
5409    KS1APHASEDARRAY = 19127,
5410    KS418 = 19129,
5411    KS418E = 19130,
5412    KZ100 = 19131,
5413    KZ900 = 19132,
5414    L175V = 19140,
5415    L3705PresidentSJammer = 19142,
5416    L415 = 19143,
5417    L88 = 19145,
5418    LAADS = 19150,
5419    LandFall = 19170,
5420    LandRollMG = 19215,
5421    LandRollTA = 19260,
5422    LandRollTT = 19305,
5423    LAZUR = 19306,
5424    Model791A = 19307,
5425    LAP3000 = 19309,
5426    LC150 = 19310,
5427    LEER3 = 19320,
5428    LegDrive = 19330,
5429    LeninetzV004 = 19340,
5430    Leningraf = 19350,
5431    LIANA = 19370,
5432    LightBulb = 19395,
5433    LIRAA10 = 19396,
5434    LIROD8 = 19397,
5435    LIRODMKII = 19398,
5436    LLX05K = 19399,
5437    LMTNRAI6A = 19400,
5438    LN55 = 19440,
5439    Ln66 = 19485,
5440    Liman = 19500,
5441    Liman2 = 19505,
5442    LockheedVigilance = 19520,
5443    LongBow = 19530,
5444    LongBrick = 19575,
5445    LongBull = 19620,
5446    LongEye = 19665,
5447    LongHead = 19710,
5448    LongTalk = 19755,
5449    LongTrack = 19800,
5450    LongTrough = 19845,
5451    LookTwo = 19890,
5452    LOPAR = 19920,
5453    LORAN = 19935,
5454    LowBlowTA = 19950,
5455    LowBlowTT = 19955,
5456    LowBlowMG = 19960,
5457    LowJackTT = 19970,
5458    LowJackMG = 19971,
5459    LowSieve = 19980,
5460    LowTrough = 20025,
5461    LR66 = 20029,
5462    LRA900 = 20030,
5463    TRS2050 = 20040,
5464    LW01 = 20060,
5465    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
5466    LW08 = 20070,
5467    M1983FCR = 20090,
5468    M2240 = 20115,
5469    M44 = 20160,
5470    M401Z = 20205,
5471    M585Z = 20250,
5472    M588Z = 20295,
5473    MA1IFFPortion = 20340,
5474    MADHACK = 20350,
5475    MARELD = 20360,
5476    MAType909 = 20385,
5477    MARCS152 = 20420,
5478    Marconi1810 = 20430,
5479    MarconiCanadaHC75 = 20475,
5480    MarconiS713 = 20495,
5481    MarconiS1802 = 20520,
5482    MarconiS247 = 20530,
5483    MarconiS810 = 20565,
5484    MarconiSA10 = 20585,
5485    MARCONIST801 = 20589,
5486    MarconiST805 = 20590,
5487    Marconitype967 = 20610,
5488    Marconitype968 = 20655,
5489    Marconitype992 = 20700,
5490    Marconisignaaltype1022 = 20745,
5491    Marconisignaaltype910 = 20790,
5492    Marconisignaaltype911 = 20835,
5493    Marconisignaaltype992R = 20880,
5494    MARTELLO743D = 20890,
5495    MARTELLOS723A = 20895,
5496    MASTERA = 20897,
5497    MBDAFLAADSMJammer = 20898,
5498    MELCO3 = 20915,
5499    MELODI = 20917,
5500    MERLIN = 20918,
5501    Meraj4 = 20919,
5502    NorthropGrummanMESA = 20920,
5503    MeshBrick = 20925,
5504    METEOR1500S = 20927,
5505    METEOR200 = 20929,
5506    METEOR50DX = 20930,
5507    METEOR300 = 20931,
5508    MeteorBVRAAM = 20933,
5509    MFR = 20935,
5510    MFSR210045 = 20940,
5511    MICAMH = 20942,
5512    MICARF = 20943,
5513    MineralME = 20945,
5514    MirageILL = 20950,
5515    MiysisJammer = 20955,
5516    MK15 = 20969,
5517    MK15CIWS = 20970,
5518    MK23 = 21015,
5519    MK23TAS = 21060,
5520    MK25 = 21105,
5521    Mk25Mod3 = 21110,
5522    Mk25Mod7 = 21130,
5523    MK35M2 = 21150,
5524    MK92 = 21195,
5525    MK92CAS = 21240,
5526    MK92STIR = 21285,
5527    MK95 = 21330,
5528    MKS818 = 21332,
5529    MLA1 = 21340,
5530    MMAPQ706 = 21359,
5531    MM950 = 21360,
5532    MMAPS705 = 21375,
5533    MMAPS784 = 21390,
5534    MMSPG73 = 21419,
5535    MMSPG74 = 21420,
5536    MMSPG75 = 21465,
5537    MMSPN703 = 21490,
5538    MMSPN730 = 21492,
5539    MMSPN753B = 21495,
5540    MMSPQ3 = 21500,
5541    MMSPS702 = 21510,
5542    MMSPS768 = 21555,
5543    MMSPS774 = 21600,
5544    MMSPS791 = 21610,
5545    MMSPS794 = 21615,
5546    MMSPS798 = 21620,
5547    MMSR = 21623,
5548    Model17C = 21625,
5549    Moon4 = 21645,
5550    MoonPie = 21646,
5551    MOONCONE = 21647,
5552    MoonRack = 21648,
5553    MOONFACE = 21649,
5554    MMRS = 21650,
5555    Model360 = 21655,
5556    Model378 = 21660,
5557    Model970 = 21661,
5558    Model974 = 21665,
5559    MONOLITB = 21672,
5560    Monument = 21675,
5561    Mouse = 21680,
5562    MP411ESM = 21682,
5563    MPDR18S = 21685,
5564    MPDR18X = 21690,
5565    MPDR45E = 21692,
5566    MR2311 = 21693,
5567    MPR = 21695,
5568    MR2314 = 21696,
5569    MPS1 = 21697,
5570    MR36B = 21698,
5571    MR231MOD = 21699,
5572    MR1600 = 21700,
5573    MRR = 21701,
5574    MR35 = 21702,
5575    MR36 = 21703,
5576    MRL1 = 21704,
5577    MRL4 = 21705,
5578    MRL5 = 21706,
5579    MSAM = 21707,
5580    MR36A = 21708,
5581    MSTAR = 21709,
5582    MT305X = 21710,
5583    MR10M1E = 21711,
5584    MR90 = 21712,
5585    MRK411 = 21715,
5586    MR320MTopazV = 21716,
5587    MSP418K = 21720,
5588    MuffCob = 21735,
5589    Mushroom = 21780,
5590    Mushroom1 = 21825,
5591    Mushroom2 = 21870,
5592    Mushroom3 = 21871,
5593    N23 = 21872,
5594    N011MBars = 21873,
5595    N011MBarsB = 21874,
5596    N011MBarsC = 21875,
5597    N011MBarsR = 21876,
5598    N035IrbisE = 21877,
5599    N036Byelka = 21878,
5600    N25 = 21879,
5601    N920Z = 21880,
5602    N001V = 21881,
5603    NACOSRADARPILOTPlatinum = 21884,
5604    NampoB = 21885,
5605    NAGIRA = 21886,
5606    NanjingB = 21890,
5607    NanjingC = 21895,
5608    Nayada = 21915,
5609    NAYADA5M = 21917,
5610    NAYADA5PV = 21918,
5611    NEBOM = 21919,
5612    NeboSVU = 21920,
5613    Neptun = 21960,
5614    Nettuno4100 = 21965,
5615    NIKEHERCULESMTR = 21970,
5616    NIKETT = 21980,
5617    NorthropGrummanMFEWJammer = 21981,
5618    NORINCO3D = 21982,
5619    NJ81E = 21983,
5620    Normandie = 21984,
5621    NRJ6A = 21985,
5622    NOSTRADAMUS = 21986,
5623    NPG1240 = 21987,
5624    NPG1460 = 21988,
5625    NPG434 = 21989,
5626    NPG630 = 21990,
5627    NPM510 = 21991,
5628    NutCan = 21992,
5629    NPVegaLiana = 21995,
5630    NovellaNV1_70 = 22000,
5631    NRBA50 = 22005,
5632    NRBA51 = 22050,
5633    NRBF20A = 22095,
5634    NRJ5 = 22110,
5635    NS9005 = 22115,
5636    NS100Series = 22125,
5637    NUR31 = 22127,
5638    NWS3 = 22130,
5639    NysaB = 22140,
5640    O524A = 22185,
5641    O580B = 22230,
5642    O625Z = 22275,
5643    O626Z = 22320,
5644    OceanMaster = 22335,
5645    OceanMaster400 = 22340,
5646    OddGroup = 22345,
5647    OddLot = 22365,
5648    OddPair = 22410,
5649    OddRods = 22411,
5650    Oka = 22455,
5651    OFOGH = 22460,
5652    OFOGH3 = 22463,
5653    OKEAN = 22500,
5654    OKEANA = 22505,
5655    OKINXE12C = 22545,
5656    OKO = 22560,
5657    OMEGA = 22590,
5658    OmeraORB32 = 22635,
5659    OMUL = 22640,
5660    OneEye = 22680,
5661    OP28 = 22690,
5662    OPRL4 = 22695,
5663    OPRM71 = 22696,
5664    OPS9 = 22697,
5665    OPS11BC = 22700,
5666    OPS12 = 22701,
5667    OPS14B = 22705,
5668    OPS14C = 22706,
5669    OPS16B = 22725,
5670    OPS18 = 22730,
5671    OPS19 = 22732,
5672    OPS20 = 22735,
5673    OPS22 = 22736,
5674    OPS24 = 22737,
5675    OPS28 = 22740,
5676    OPS28C = 22745,
5677    OPS39 = 22750,
5678    OPTIMA3_2 = 22760,
5679    OR2 = 22770,
5680    ORB31D = 22800,
5681    ORB31S = 22810,
5682    ORB32 = 22815,
5683    ORB42 = 22830,
5684    OrionRtn10X = 22860,
5685    SurfaceWave = 22890,
5686    OtomatMK1 = 22900,
5687    OtomatMKIITeseo = 22905,
5688    OtomatSeriesAL = 22906,
5689    OwlScreech = 22950,
5690    P360Z = 22955,
5691    P14 = 22956,
5692    P180U = 22957,
5693    P182 = 22959,
5694    PA1660 = 22960,
5695    P18M = 22961,
5696    P190U = 22962,
5697    P30 = 22963,
5698    P18MOD = 22964,
5699    P35M = 22965,
5700    PAGE = 22970,
5701    PaintBox = 22977,
5702    PalmFrond = 22995,
5703    ModifiedPaintBox = 22998,
5704    PalmFrondAB = 23040,
5705    Pandora = 23041,
5706    PALSAR2 = 23042,
5707    PantsirSMTAR = 23043,
5708    PAR2 = 23045,
5709    PAR2000 = 23050,
5710    PAR2090C = 23053,
5711    PAR80 = 23055,
5712    PatHandTT = 23085,
5713    PatHandMG = 23095,
5714    PATRIOT = 23100,
5715    PattyCake = 23130,
5716    PawnCake = 23175,
5717    PBR4Rubin = 23220,
5718    PCS514 = 23240,
5719    PeaSticks = 23265,
5720    PechoraSC = 23295,
5721    PeelCone = 23310,
5722    PeelGroup = 23355,
5723    PeelGroupA = 23400,
5724    PeelGroupB = 23445,
5725    PeelGroupMG = 23450,
5726    PeelPair = 23490,
5727    Pelena = 23500,
5728    PGZ07 = 23515,
5729    Phalanx = 23525,
5730    PhazotronGukol4 = 23529,
5731    PhazotronZhukAAE = 23530,
5732    Philips9LV200 = 23535,
5733    Philips9LV331 = 23580,
5734    PhilipsLV223 = 23625,
5735    PhilipsSeaGiraffe50HC = 23670,
5736    PhimatJammer = 23675,
5737    PICOSAR = 23680,
5738    PILOTMK2 = 23685,
5739    PinJib = 23690,
5740    PinTip = 23695,
5741    PL11 = 23700,
5742    PL12 = 23701,
5743    PL15 = 23704,
5744    PlankShad = 23710,
5745    PlankShave = 23715,
5746    PlankShaveA = 23760,
5747    PlankShaveB = 23805,
5748    PlateSteer = 23850,
5749    PlesseyAWS1 = 23895,
5750    PlesseyAWS2 = 23925,
5751    PlesseyAWS4 = 23940,
5752    PlesseyAWS6 = 23985,
5753    PlesseyRJ = 23990,
5754    PlesseyType904 = 24020,
5755    Plesseytype996 = 24030,
5756    PlesseyAWS9 = 24035,
5757    PlinthNet = 24075,
5758    Pluto = 24095,
5759    PNABRubinDownBeat = 24098,
5760    POHJANPALO = 24100,
5761    PolimentK = 24110,
5762    POLLUX = 24120,
5763    PotGroup = 24165,
5764    PotGroupMG = 24210,
5765    PotGroupTA = 24255,
5766    PotGroupTT = 24300,
5767    PorkFist = 24320,
5768    PorkTrough = 24345,
5769    PozitivME15P26 = 24385,
5770    PositiveME1_2 = 24386,
5771    PostBow = 24390,
5772    PostLamp = 24435,
5773    PotDrum = 24480,
5774    PotHead = 24525,
5775    PotShot = 24535,
5776    PraetorianCountermeasuresSuite = 24540,
5777    PRIMUS30A = 24569,
5778    PRIMUS40WXD = 24570,
5779    Primus400 = 24614,
5780    PRIMUS300SL = 24615,
5781    Primus500 = 24616,
5782    Primus650 = 24617,
5783    Primus700 = 24618,
5784    PRIMUS800 = 24619,
5785    Primus3000 = 24620,
5786    Primus870 = 24622,
5787    PRORA = 24630,
5788    PRS2 = 24631,
5789    PRS3Argon2 = 24633,
5790    PRORAPA1660 = 24635,
5791    PS15 = 24640,
5792    PS05A = 24650,
5793    PS46A = 24660,
5794    PS70R = 24705,
5795    PS171R = 24706,
5796    PS860 = 24707,
5797    PS870 = 24709,
5798    PS890 = 24710,
5799    PSM33 = 24720,
5800    PuffBall = 24750,
5801    QuadradarVI = 24755,
5802    QW1A = 24757,
5803    Phazotron1RS21E = 24758,
5804    PVS200 = 24760,
5805    PVS2000 = 24761,
5806    R330ZH = 24768,
5807    R045 = 24769,
5808    R76 = 24770,
5809    R934B = 24771,
5810    RA20 = 24772,
5811    RA723 = 24774,
5812    R41XXX = 24775,
5813    RAC3D = 24776,
5814    RAC30 = 24780,
5815    R423AM = 24781,
5816    Racal1229 = 24795,
5817    DECCA1230 = 24800,
5818    RacalAC2690BT = 24840,
5819    RacalDecca1216 = 24885,
5820    RacalDECCA20V909 = 24890,
5821    RacalDecca360 = 24930,
5822    RacalDeccaAC1290 = 24975,
5823    RacalDeccaTM1229 = 25020,
5824    RacalDeccaTM1626 = 25065,
5825    RacalDRBN34A = 25110,
5826    RADAMHR = 25150,
5827    Radar24 = 25155,
5828    RADARPILOT1000 = 25170,
5829    RADARPILOT1100 = 25171,
5830    RAJENDRA = 25180,
5831    RAN7S = 25200,
5832    RAN10S = 25205,
5833    RAN11LX = 25245,
5834    Rani = 25250,
5835    RAPHAELTH = 25259,
5836    RapierTA = 25260,
5837    Rapier2000TA = 25265,
5838    RapierMG = 25270,
5839    RASCAR3400C = 25273,
5840    Rashmi = 25275,
5841    Rasit = 25276,
5842    Rasit3190B = 25277,
5843    RAT31DLM = 25278,
5844    RAT31DL = 25279,
5845    RAT31S = 25280,
5846    RAT8S = 25281,
5847    RAT31SL = 25282,
5848    RavenES05 = 25283,
5849    RATAC = 25285,
5850    RAWL = 25286,
5851    Rattler = 25287,
5852    RAWS = 25288,
5853    RAWL02 = 25289,
5854    Raytheon1220 = 25290,
5855    RAWS03 = 25291,
5856    Raytheon1210xx = 25292,
5857    Raytheon1302 = 25300,
5858    Raytheon1500 = 25335,
5859    Raytheon1645 = 25380,
5860    Raytheon1650 = 25425,
5861    Raytheon1900 = 25470,
5862    Raytheon2502 = 25515,
5863    RaytheonAnschutzNautoScanNX = 25530,
5864    RaytheonR41 = 25540,
5865    RaytheonRM10256X = 25545,
5866    RaytheonSL72 = 25550,
5867    RaytheonTM16506X = 25560,
5868    RaytheonTM166012S = 25605,
5869    RAY1220XR = 25630,
5870    RAY1401 = 25635,
5871    Ray2900 = 25650,
5872    RaymarineRD218 = 25694,
5873    Raypath = 25695,
5874    RaytheonPathfinderSTmk2 = 25698,
5875    RBE2 = 25735,
5876    RBE2AA = 25736,
5877    RCT180 = 25739,
5878    RDM = 25740,
5879    RDM3 = 25745,
5880    RDI = 25750,
5881    RDY = 25760,
5882    RDY3 = 25762,
5883    RDS86 = 25770,
5884    RDN72 = 25785,
5885    RDR1A = 25830,
5886    RDR1E = 25835,
5887    RDR4A = 25840,
5888    RDR150 = 25845,
5889    RDR160XD = 25850,
5890    RDR230HP = 25853,
5891    RDR1100 = 25855,
5892    RDR1150 = 25860,
5893    RDR1200 = 25875,
5894    RDR1400 = 25885,
5895    RDR1400C = 25890,
5896    RDR4000_1 = 25891,
5897    RDR4000_2 = 25892,
5898    RDR1500 = 25895,
5899    RiceCake = 25896,
5900    RDR1600 = 25897,
5901    RDR2000 = 25898,
5902    RDR1700B = 25899,
5903    Remora = 25900,
5904    RiceField = 25901,
5905    REC1A = 25902,
5906    REC1B = 25903,
5907    REC1C = 25904,
5908    ResolveEAS = 25906,
5909    RiceCupC = 25907,
5910    REL6E = 25908,
5911    REC1 = 25909,
5912    RiceBowl = 25910,
5913    ImprovedReporter = 25911,
5914    RiceBug = 25912,
5915    RiceCup = 25915,
5916    RiceLamp = 25920,
5917    REVATHI = 25940,
5918    REZONANS = 25950,
5919    RGMUGM109B = 25955,
5920    RGMUGM109EHomingRadar = 25958,
5921    RicePad = 25965,
5922    RKL526 = 25966,
5923    RKZ764 = 25967,
5924    RKZ766 = 25968,
5925    RKL165 = 25969,
5926    RKL609 = 25970,
5927    RKL800 = 25971,
5928    RKZ761 = 25972,
5929    RKZ2000 = 25973,
5930    RIS4CA = 25974,
5931    RL2000 = 25975,
5932    RL41 = 25976,
5933    RIR778 = 25977,
5934    RISAT = 25978,
5935    RLMS = 25979,
5936    RimHatESMECMSuite = 25980,
5937    RiceScoop = 26008,
5938    RiceScreen = 26010,
5939    DECCATM1070A = 26011,
5940    RM370BT = 26015,
5941    RockwellCollinsFMR200X = 26020,
5942    RM2312 = 26040,
5943    RM23123 = 26041,
5944    RMT0100A = 26043,
5945    RN222 = 26045,
5946    ROLAND2 = 26053,
5947    ROLANDBN = 26055,
5948    ROLANDMG = 26100,
5949    ROLANDTA = 26145,
5950    ROLANDTT = 26190,
5951    ROTODOME = 26210,
5952    RoundBall = 26235,
5953    RP379DTiradaD = 26236,
5954    RP3 = 26237,
5955    RP4G = 26238,
5956    RoundHouse = 26280,
5957    RoundHouseB = 26325,
5958    RPR117 = 26326,
5959    RS0250 = 26327,
5960    RSR210N = 26328,
5961    RT0250 = 26330,
5962    RTA4100 = 26340,
5963    RTN1A = 26350,
5964    RTN25X = 26353,
5965    RTS6400 = 26354,
5966    RubyRake = 26355,
5967    RumSling = 26360,
5968    RumSlingRO = 26361,
5969    RumSlingTT = 26362,
5970    RV2 = 26370,
5971    RV3 = 26415,
5972    RV5 = 26460,
5973    RV10 = 26505,
5974    RV15M = 26506,
5975    RV17 = 26550,
5976    RV18 = 26595,
5977    RV21 = 26596,
5978    RV21B = 26597,
5979    RV25 = 26600,
5980    RV377 = 26610,
5981    RVUM = 26640,
5982    RWD8 = 26650,
5983    RXN260 = 26660,
5984    RyeHouse = 26665,
5985    S1810CD = 26670,
5986    Sahab = 26672,
5987    Salamandre = 26673,
5988    SamyungSMR7200 = 26674,
5989    S1850M = 26675,
5990    S511 = 26676,
5991    S512 = 26677,
5992    S600 = 26678,
5993    S604 = 26679,
5994    S763LANZA3D = 26680,
5995    S613 = 26681,
5996    S631 = 26682,
5997    S654 = 26683,
5998    S669 = 26684,
5999    SA2Guideline = 26685,
6000    S244 = 26686,
6001    S711 = 26687,
6002    SA3Goa = 26730,
6003    SA8GeckoDT = 26775,
6004    SA12TELARILL = 26795,
6005    SA23TELIlluminator = 26797,
6006    SABERM60 = 26799,
6007    Samovar = 26805,
6008    Sampson = 26810,
6009    SAN7GadflyTI = 26820,
6010    SAN11Cads1UN = 26865,
6011    SaccadeMH = 26900,
6012    SaltPotAB = 26910,
6013    SAP14 = 26920,
6014    SAP518 = 26925,
6015    SAP518M = 26926,
6016    SandBar = 26930,
6017    SAPechora2MTT = 26935,
6018    SAR = 26945,
6019    SATRAPE = 26950,
6020    SATURNEII = 26955,
6021    ScanCan = 27000,
6022    ScanFix = 27045,
6023    ScanOdd = 27090,
6024    SCANTER1002 = 27095,
6025    SCANTER2001 = 27100,
6026    SCANTER2002 = 27101,
6027    SCANTER2100 = 27102,
6028    SCANTER4002 = 27109,
6029    SCANTER4100 = 27110,
6030    SCANTER5102 = 27111,
6031    SCANTER5502 = 27113,
6032    SCANTER6000 = 27115,
6033    SCANTER6002 = 27116,
6034    ScanterMil009 = 27125,
6035    ScanThree = 27135,
6036    SCANTERMILS = 27137,
6037    ScanterSMR = 27139,
6038    SCANTER = 27140,
6039    SCORADS = 27141,
6040    Scimitar = 27142,
6041    STAR2000 = 27143,
6042    SCOREBOARD = 27150,
6043    ScoopPair = 27175,
6044    ScoupPlate = 27180,
6045    SCOUT = 27183,
6046    SCR584 = 27190,
6047    SeaArcher2 = 27225,
6048    SeaBasedXBand = 27230,
6049    SeaDragon = 27235,
6050    SeaEagle = 27239,
6051    SeaEagleSC = 27240,
6052    SEAFALCON = 27245,
6053    SeaGiraffeAMB = 27248,
6054    Seaguard = 27251,
6055    SeaHawkSHNX12 = 27260,
6056    SeaHunter4MG = 27270,
6057    SeaHunter4TA = 27315,
6058    SeaHunter4TT = 27360,
6059    SeaGull = 27405,
6060    SeaMaster400 = 27430,
6061    SeaNet = 27450,
6062    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6063    SeaSparrow = 27451,
6064    SeaSpray = 27495,
6065    SeaTiger = 27540,
6066    SeaTigerM = 27550,
6067    Seastar = 27560,
6068    Searchwater = 27570,
6069    Searchwater2000 = 27575,
6070    SEASONDE = 27580,
6071    SEASPRAY7000E = 27582,
6072    SeaVue = 27583,
6073    SeasprayMk3 = 27584,
6074    SeleniaOrion7 = 27585,
6075    Seleniatype912 = 27630,
6076    SelenniaRAN12LX = 27675,
6077    SeleniaRAN20S = 27680,
6078    SelenniaRTN10X = 27720,
6079    SeliniaARP1645 = 27765,
6080    SENTIRM20 = 27770,
6081    SERDAR = 27771,
6082    SERHAT = 27773,
6083    Series10CompactSubmarineRadarCSR = 27775,
6084    SERIES52 = 27780,
6085    SERIES320 = 27790,
6086    SG = 27800,
6087    SGJ02 = 27802,
6088    SGJ03 = 27803,
6089    SGR10200 = 27810,
6090    SGR10302 = 27855,
6091    SGR104 = 27870,
6092    Shahed129SAR = 27873,
6093    SHAHINE = 27875,
6094    SheetBend = 27900,
6095    SheetCurve = 27945,
6096    SHIKRA = 27980,
6097    ShipGlobe = 27990,
6098    ShipWheel = 28035,
6099    SGR114 = 28080,
6100    ShoreWalkA = 28125,
6101    ShortHorn = 28170,
6102    ShotDome = 28215,
6103    SideGlobeJN = 28260,
6104    PRV11 = 28280,
6105    SideWalkA = 28305,
6106    SignaalDA02 = 28350,
6107    SignaalDA05 = 28395,
6108    SignaalDA08 = 28440,
6109    SignaalDA082LS = 28445,
6110    SignaalLW04 = 28480,
6111    SignaalLW08 = 28485,
6112    SignaalLWOR = 28530,
6113    SignaalM45 = 28575,
6114    SignaalMW08 = 28620,
6115    SignaalSMART = 28665,
6116    SignaalSTING = 28710,
6117    SignaalSTIR = 28755,
6118    SignaalSTIR1_8M = 28760,
6119    SignaalSTIR24M = 28770,
6120    SignaalWM202 = 28800,
6121    SignaalWM25 = 28845,
6122    SignaalWM27 = 28890,
6123    SignaalWM28 = 28935,
6124    SignaalZW01 = 28980,
6125    SignaalZW06 = 29025,
6126    SignaalZW07 = 29030,
6127    SignaalZW0800 = 29035,
6128    SIMRAD3G = 29043,
6129    SIMRAD4G = 29045,
6130    SimradCA54 = 29050,
6131    SIMRADHalo6 = 29060,
6132    SkiPole = 29070,
6133    SkinHead = 29115,
6134    SkipSpin = 29160,
6135    SKYFENDER = 29172,
6136    SkyWave = 29175,
6137    SkyguardB = 29180,
6138    SKYGUARDTA = 29185,
6139    SKYGUARDTT = 29190,
6140    SkyguardLR = 29191,
6141    Skymaster = 29200,
6142    SkyWatch = 29205,
6143    SkyRanger = 29210,
6144    SKYSHADOW = 29215,
6145    SKYSHIELDTA = 29220,
6146    SL = 29250,
6147    SLALQ234 = 29270,
6148    SlapShot = 29295,
6149    SlapShotG = 29297,
6150    SLC2 = 29300,
6151    SLC2E = 29301,
6152    SLC4 = 29305,
6153    SlimNet = 29340,
6154    SlotBackA = 29385,
6155    SlotBackILL = 29400,
6156    SlotBackB = 29430,
6157    SlotBackIV = 29431,
6158    SlotBackBTopaz = 29432,
6159    SlotBackE = 29433,
6160    SlotBackG = 29434,
6161    SlotBackVI = 29435,
6162    SlotRest = 29440,
6163    SM674AUPM = 29450,
6164    SMA3RM = 29475,
6165    SMA3RM20 = 29520,
6166    SMA3RM20ASMG = 29565,
6167    SMABPS704 = 29610,
6168    SMASPIN749V2 = 29655,
6169    SMASPN703 = 29700,
6170    SMASPN751 = 29745,
6171    SMASPOS748 = 29790,
6172    SMASPQ2 = 29835,
6173    SMASPQ2D = 29880,
6174    SMASPQ701 = 29925,
6175    SMASPS702 = 29970,
6176    SMAST2OTOMATIIMH = 30015,
6177    SR47A = 30016,
6178    SMA718Beacon = 30060,
6179    SmallFred = 30065,
6180    SMARTS = 30068,
6181    SMARTSMk2 = 30069,
6182    SMARTL = 30070,
6183    SM932 = 30072,
6184    SmogLamp = 30075,
6185    SnapShot = 30080,
6186    SnoopDrift = 30105,
6187    SnoopHalf = 30140,
6188    SnoopHead = 30150,
6189    SnoopPair = 30195,
6190    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6191    SnoopPing1 = 30200,
6192    SnoopPlate = 30240,
6193    SnoopPing = 30255,
6194    SnoopSlab = 30285,
6195    SnoopTray = 30330,
6196    SnoopTray1 = 30375,
6197    SnoopTray2 = 30420,
6198    SNOOPTRAY3 = 30421,
6199    SnoopWatch = 30465,
6200    _9S18M1 = 30470,
6201    _9S18M1E = 30471,
6202    SPB7 = 30475,
6203    SnowDrop = 30480,
6204    SNW10 = 30490,
6205    SO1 = 30510,
6206    SO12 = 30520,
6207    SOACommunist = 30555,
6208    SO69 = 30580,
6209    SockEye = 30600,
6210    SOM64 = 30645,
6211    Sopka = 30650,
6212    Sorbsiya = 30660,
6213    SorbtsiyaL005 = 30661,
6214    SorbtsiyaL005S = 30662,
6215    SPADASIR = 30665,
6216    SPADATT = 30670,
6217    SparrowILL = 30690,
6218    SPERRYRASCAR = 30691,
6219    SPECTRA = 30692,
6220    SPEAR3MMW = 30696,
6221    SperryM3 = 30700,
6222    SPERRYVISIONMASTERFT = 30701,
6223    SPEXER2000 = 30710,
6224    SPG53F = 30735,
6225    SPG70 = 30780,
6226    SPG74 = 30825,
6227    SPG75 = 30870,
6228    SPG76 = 30915,
6229    SpinScanA = 30960,
6230    SpinScanB = 31005,
6231    SpinTrough = 31050,
6232    SPINODADDAWTR = 31070,
6233    SPJ40 = 31080,
6234    SplashDrop = 31095,
6235    SPN2 = 31096,
6236    SPN4 = 31097,
6237    SPN30 = 31100,
6238    SPN35A = 31140,
6239    SPN41 = 31185,
6240    SPN42 = 31230,
6241    SPN43A = 31275,
6242    SPN43B = 31320,
6243    SPN44 = 31365,
6244    SPN46 = 31410,
6245    SPN703 = 31455,
6246    SPN720 = 31475,
6247    SPN7281 = 31500,
6248    SPN748 = 31545,
6249    SPN750 = 31590,
6250    SPO8 = 31592,
6251    SPN753G = 31593,
6252    SpongeCake = 31635,
6253    P12 = 31680,
6254    P18SpoonRestA = 31681,
6255    P18SpoonRestB = 31682,
6256    P18SpoonRestC = 31684,
6257    P18MH2 = 31685,
6258    SporkRest = 31700,
6259    SPQ712 = 31725,
6260    SPR2 = 31730,
6261    SPR51 = 31740,
6262    SPS5FASOL = 31765,
6263    SPS6 = 31766,
6264    SPS6C = 31770,
6265    SPS10F = 31815,
6266    SPS12 = 31860,
6267    SPS22NBUKET = 31870,
6268    SPS33NBUKET = 31875,
6269    SPS44NBUKET = 31880,
6270    SPS55NBUKET = 31890,
6271    SPS58 = 31905,
6272    SPS62 = 31925,
6273    SPS100K = 31935,
6274    SPS64 = 31950,
6275    SPS141 = 31951,
6276    SPS142 = 31952,
6277    SPS143 = 31953,
6278    SPS151 = 31955,
6279    SPS152 = 31956,
6280    SPS153 = 31957,
6281    SPS160Geran = 31959,
6282    SPS161 = 31960,
6283    SPS95K = 31970,
6284    SPS171Jammer = 31971,
6285    SPS172Jammer = 31972,
6286    SPS768 = 31995,
6287    SPS540K = 32010,
6288    SPS550KMF = 32020,
6289    SPS774 = 32040,
6290    SPY790 = 32085,
6291    SquareHead = 32130,
6292    SquarePair = 32175,
6293    SquareSlot = 32220,
6294    SquareTie = 32265,
6295    Shmel = 32310,
6296    P15M = 32330,
6297    SquintEye = 32355,
6298    SQUIRE = 32365,
6299    SR2410C = 32373,
6300    SR47BG = 32375,
6301    SREM5 = 32385,
6302    SRN6 = 32400,
6303    SRN15 = 32445,
6304    SRN206 = 32455,
6305    SRN745 = 32490,
6306    SRO1 = 32535,
6307    SRO2 = 32580,
6308    SSC2BSamletMG = 32625,
6309    SSN2ABCSSC = 32670,
6310    SSN2ABCSSC2A3A2MH = 32715,
6311    SSN2CSeeker = 32760,
6312    SSN2CDStyx = 32805,
6313    SSN2CDStyxCDMH = 32850,
6314    SSN2CStyxAL = 32851,
6315    SSN2DStyxAL = 32852,
6316    SSN2SSCSSC18BN = 32895,
6317    SSN3BSepalAL = 32940,
6318    SSN3BSepalMH = 32985,
6319    SSN7Starbright = 33025,
6320    SSN9Siren = 33030,
6321    SSN9SirenAL = 33075,
6322    SSN9SirenMH = 33120,
6323    SSN10AFL10mmWMH = 33125,
6324    SSN11Nasr1mmWMH = 33140,
6325    SSN12SandboxAL = 33165,
6326    SSN12YJ83JmmWMH = 33166,
6327    SSN12SandboxMH = 33210,
6328    SSNX13Shredder = 33230,
6329    SSN14BSilexAL = 33231,
6330    SSN19Shipwreck = 33255,
6331    SSN19ShipwreckAL = 33300,
6332    SSN19ShipwreckMH = 33345,
6333    SSN21AL = 33390,
6334    SSN22Sunburn = 33435,
6335    SSN22SunburnMH = 33480,
6336    SSN22SunburnAL = 33481,
6337    SSN25SwitchbladeMH = 33483,
6338    SSN26StrobileMMWMH = 33484,
6339    SSN27SizzlerMH = 33485,
6340    SSN27ASizzlerAL = 33486,
6341    STINGEOMk2 = 33505,
6342    STIR1_2EOMk2 = 33510,
6343    STIR2_4HPMk2 = 33511,
6344    StoneCake = 33525,
6345    STR41 = 33570,
6346    ST858 = 33580,
6347    START1M = 33582,
6348    STENTOR = 33584,
6349    StormShadowAHR = 33585,
6350    STRAIGHTFLUSH = 33586,
6351    StraightFlushTA = 33590,
6352    StraightFlushTT = 33595,
6353    StraightFlushILL = 33600,
6354    StrikeOut = 33615,
6355    StrutCurve = 33660,
6356    StrutPair = 33705,
6357    StrutPair1 = 33750,
6358    StrutPair2 = 33795,
6359    SunVisor = 33840,
6360    SUPERDARN = 33850,
6361    Superfledermaus = 33860,
6362    Supersearcher = 33870,
6363    SwiftRod1 = 33885,
6364    SwiftRod2 = 33930,
6365    SYMPHONY = 33933,
6366    SYNAPSISMk2 = 33935,
6367    SY80 = 33950,
6368    T1166 = 33975,
6369    T1171 = 34020,
6370    T1202 = 34040,
6371    T6004 = 34065,
6372    T6031 = 34110,
6373    T8067 = 34155,
6374    T8068 = 34200,
6375    T8124 = 34245,
6376    T8408 = 34290,
6377    T8911 = 34335,
6378    T8937 = 34380,
6379    T8944 = 34425,
6380    T8987 = 34470,
6381    TA10K = 34480,
6382    JY11B = 34500,
6383    TACANSURF = 34505,
6384    P14_2 = 34515,
6385    TALLKINGB = 34516,
6386    TALLKINGC = 34517,
6387    TallMike = 34560,
6388    TallPath = 34605,
6389    TDR94 = 34607,
6390    TeaSpoon = 34610,
6391    TeamPlay = 34620,
6392    TALISMAN = 34624,
6393    TeamWork = 34625,
6394    T1135 = 34626,
6395    TANCANSURF = 34627,
6396    TECSAR = 34628,
6397    TERRASARX = 34629,
6398    TESAR = 34630,
6399    THAADGBR = 34640,
6400    ThalesRDY2 = 34644,
6401    ThalesNederlandSignaalAPAR = 34645,
6402    ThalesScorpionJammer = 34646,
6403    ThalesVariant = 34647,
6404    ThalesICMSJammer = 34648,
6405    ThalesIMEWSJammer = 34649,
6406    THD225 = 34650,
6407    THD1012 = 34655,
6408    THD1098 = 34660,
6409    THD1213 = 34665,
6410    THD1940 = 34670,
6411    THD1955Palmier = 34680,
6412    THD5500 = 34695,
6413    ThirdofKhordad = 34700,
6414    ThinPath = 34740,
6415    PRV9 = 34785,
6416    PRV16 = 34786,
6417    ThompsonCSFTA10 = 34795,
6418    ThompsonCSFTHD1040Neptune = 34830,
6419    ThompsonCSFCalypso = 34875,
6420    ThompsonCSFCASTOR = 34920,
6421    ThompsonCSFCastorII = 34965,
6422    ThomsonCSFDomino30 = 34966,
6423    ThompsonCSFDRBC32A = 35010,
6424    ThompsonCSFDRBJ11DE = 35055,
6425    ThompsonCSFDRBV15A = 35100,
6426    ThompsonCSFDRBV15C = 35145,
6427    ThompsonCSFDRBV22D = 35190,
6428    ThompsonCSFDRBV23B = 35235,
6429    ThompsonCSFDRUA33 = 35280,
6430    ThompsonCSFMarsDRVB21A = 35325,
6431    ThompsonCSFSeaTiger = 35370,
6432    ThompsonCSFTriton = 35415,
6433    ThompsonCSFVegawithDRBC32E = 35460,
6434    ThomsonENR = 35470,
6435    ThomsonRDI = 35475,
6436    TierIIPlus = 35477,
6437    TPS755 = 35478,
6438    TPS830K = 35479,
6439    TRS2105 = 35480,
6440    TR23K = 35481,
6441    TR23MR = 35482,
6442    TRAC2100 = 35483,
6443    TRAC2300 = 35484,
6444    HT223 = 35485,
6445    TRADEX = 35486,
6446    TRAILXI = 35487,
6447    TRD1211 = 35488,
6448    TRD1235 = 35489,
6449    TRS2100 = 35490,
6450    TRACNG = 35491,
6451    TieRods = 35505,
6452    _36D6 = 35550,
6453    TinTrap = 35570,
6454    TIRSPONDER = 35580,
6455    TK25E5 = 35583,
6456    TMKMk2 = 35585,
6457    TMXMk2 = 35586,
6458    ToadStool1 = 35595,
6459    ToadStool2 = 35640,
6460    ToadStool3 = 35685,
6461    ToadStool4 = 35730,
6462    ToadStool5 = 35775,
6463    TokenB = 35785,
6464    TombStone = 35800,
6465    Tonson = 35810,
6466    TopBow = 35820,
6467    TopDome = 35865,
6468    TopKnot = 35910,
6469    TopMesh = 35955,
6470    TopPair = 36000,
6471    TopPlate = 36045,
6472    TopPlateB = 36046,
6473    TopSail = 36090,
6474    TYPE208 = 36120,
6475    TopSteer = 36135,
6476    TopTrough = 36180,
6477    TornadoGMR = 36200,
6478    TornadoTFR = 36201,
6479    ScrumHalfTA = 36220,
6480    ScrumHalfTT = 36225,
6481    TORM2TER = 36226,
6482    ScrumHalfMG = 36230,
6483    TrackDish = 36270,
6484    TR47C = 36300,
6485    TORSOM = 36315,
6486    TQN2 = 36320,
6487    TrapDoor = 36360,
6488    TRD1500 = 36365,
6489    TrickShotTAR = 36370,
6490    TrickShotTER = 36371,
6491    TRISPONDE = 36380,
6492    TRML = 36381,
6493    TRS2215 = 36382,
6494    TRML3D = 36383,
6495    TRMS = 36384,
6496    TRS2056 = 36385,
6497    TRS3010 = 36386,
6498    TRS2060 = 36387,
6499    TRS2245 = 36388,
6500    TRS2310 = 36389,
6501    TritonG = 36390,
6502    TRS22XX = 36391,
6503    TRS3030 = 36400,
6504    TRS3033 = 36405,
6505    TRS3203 = 36417,
6506    TRS3405 = 36420,
6507    TRS3410 = 36425,
6508    TRS3415 = 36430,
6509    TRS3D = 36440,
6510    TRS3D16 = 36441,
6511    TRS3D16ES = 36442,
6512    TRS3D32 = 36443,
6513    TRS4D = 36446,
6514    TRSC = 36447,
6515    TRSN = 36450,
6516    TS4478A = 36460,
6517    TSE5000 = 36495,
6518    TSR333 = 36540,
6519    TSR793 = 36550,
6520    TubBrick = 36563,
6521    TubeArm = 36585,
6522    TW1374 = 36590,
6523    TW1378 = 36595,
6524    TW1446 = 36600,
6525    TwinEyes = 36630,
6526    TwinPill = 36675,
6527    TwinScan = 36720,
6528    TwinScanRo = 36765,
6529    TwoSpot = 36810,
6530    Type071LPD = 36821,
6531    Type212JA = 36827,
6532    Type221JA = 36830,
6533    Type223 = 36835,
6534    Type80ASM1 = 36836,
6535    Type120 = 36838,
6536    Type208 = 36840,
6537    Type222 = 36843,
6538    Type226 = 36846,
6539    Type232H = 36850,
6540    TYPE245 = 36853,
6541    TYPE262 = 36855,
6542    TYPE275 = 36900,
6543    TYPE278 = 36905,
6544    TYPE293 = 36945,
6545    Type341 = 36946,
6546    TYPE313 = 36947,
6547    Type305A = 36948,
6548    Type334 = 36960,
6549    Type342 = 36985,
6550    TYPE343SUNVISORB = 36990,
6551    Type344 = 36992,
6552    Type345 = 37010,
6553    Type346 = 37011,
6554    Type349A = 37033,
6555    TYPE347B = 37035,
6556    Type347G = 37038,
6557    Type359 = 37039,
6558    Type352 = 37040,
6559    Type360 = 37041,
6560    Type362ESR1SR47B = 37043,
6561    Type354 = 37045,
6562    Type366 = 37047,
6563    Type363 = 37048,
6564    Type364 = 37049,
6565    Type404A = 37050,
6566    Type405 = 37052,
6567    TYPE405J = 37053,
6568    Type408D = 37058,
6569    Type517B = 37059,
6570    Type518 = 37060,
6571    Type589 = 37070,
6572    TYPE651 = 37073,
6573    Type753_1 = 37075,
6574    Type702 = 37077,
6575    Type704 = 37078,
6576    Type753_2 = 37079,
6577    Type756 = 37080,
6578    TYPE713 = 37081,
6579    TYPE714 = 37082,
6580    TYPE702D = 37083,
6581    TYPE760 = 37084,
6582    Type760 = 37086,
6583    Type815 = 37090,
6584    Type793 = 37095,
6585    Type8A813 = 37100,
6586    TYPE901M = 37105,
6587    TYPE902 = 37110,
6588    Type902B = 37124,
6589    TYPE903 = 37125,
6590    TYPE909TI = 37170,
6591    TYPE909TT = 37215,
6592    TYPE910 = 37260,
6593    TYPE931 = 37265,
6594    TYPE965 = 37305,
6595    TYPE967 = 37350,
6596    TYPE968 = 37395,
6597    TYPE974 = 37440,
6598    TYPE975 = 37485,
6599    TYPE978 = 37530,
6600    Type981 = 37534,
6601    Type9813 = 37535,
6602    TYPE982 = 37540,
6603    Type984 = 37543,
6604    Type985 = 37544,
6605    TYPE992 = 37575,
6606    TYPE993 = 37620,
6607    TYPE994 = 37665,
6608    Type996 = 37670,
6609    Type997Artisan = 37675,
6610    TYPE1006_1 = 37710,
6611    TYPE1006_2 = 37755,
6612    TYPE1022 = 37800,
6613    Type1047 = 37810,
6614    Type1048 = 37815,
6615    Type1474 = 37825,
6616    Type1493 = 37828,
6617    ULTRA = 37840,
6618    UKMK10 = 37845,
6619    UPS220C = 37850,
6620    UPX110 = 37890,
6621    UPX27 = 37935,
6622    URN20 = 37980,
6623    UTESA = 37985,
6624    UTEST = 37990,
6625    URN25 = 38025,
6626    VIGILANT = 38035,
6627    VitebskL370Jammer = 38038,
6628    VOLEXIIIIV = 38045,
6629    VOLGA = 38046,
6630    VORONEZHDM = 38047,
6631    VOSTOK = 38048,
6632    VOSTOKE = 38049,
6633    VSR = 38050,
6634    VOSTOK3D = 38051,
6635    VSTARPT = 38055,
6636    W160 = 38058,
6637    W1028 = 38060,
6638    W8818 = 38070,
6639    W8838 = 38115,
6640    W8852 = 38120,
6641    WALLBOARD = 38140,
6642    WallRust = 38150,
6643    WAS74S = 38160,
6644    WaspHead = 38205,
6645    WATCHDOG = 38210,
6646    WatchGuard = 38250,
6647    Watchman = 38260,
6648    WAVESTORM = 38270,
6649    WATCHMANS = 38275,
6650    WATCHMANT = 38276,
6651    WEATHERSCOUT2 = 38280,
6652    WesternElectricMK10 = 38295,
6653    WestinghouseADR4LRSR = 38320,
6654    WestinghouseElectricSPG50 = 38340,
6655    WestinghouseElectricW120 = 38385,
6656    WestinghouseSPS29C = 38430,
6657    WestinghouseSPS37 = 38475,
6658    WetEye = 38520,
6659    WetEye2 = 38525,
6660    WetEyeMod = 38565,
6661    WF44S = 38568,
6662    WGU41B = 38570,
6663    WGU44B = 38572,
6664    Whiff = 38610,
6665    WhiffBrick = 38655,
6666    WhiffFire = 38700,
6667    WHITEHOUSE = 38715,
6668    WideMat = 38730,
6669    WineGlassJammer = 38735,
6670    WildCard = 38745,
6671    WILDCAT = 38748,
6672    WitchEight = 38790,
6673    WitchFive = 38835,
6674    WLR = 38840,
6675    WM2XSeries = 38880,
6676    WM2XSeriesCAS = 38925,
6677    WR10X = 38930,
6678    WR2100 = 38935,
6679    WSR74C = 38950,
6680    WSR74S = 38955,
6681    WSR81 = 38957,
6682    WXR700C = 38960,
6683    WXR2100 = 38965,
6684    WXR2100MSTT = 38966,
6685    WoodGage = 38970,
6686    XTAR25 = 38990,
6687    XTAR3D = 38995,
6688    YAOGAN3 = 39000,
6689    Yaogan29 = 39014,
6690    YardRake = 39015,
6691    YH96 = 39050,
6692    YewLoop = 39060,
6693    YITIANADS = 39061,
6694    YD3 = 39062,
6695    YJ12MH = 39063,
6696    YJ62MH = 39065,
6697    YJ82MH = 39066,
6698    YJ83MH = 39067,
6699    YLC2 = 39070,
6700    YLC2A = 39071,
6701    YLC4 = 39073,
6702    YLC6 = 39074,
6703    YLC6M = 39075,
6704    YLC8 = 39080,
6705    YLC8B = 39081,
6706    YLC18 = 39085,
6707    YoYo = 39105,
6708    ZaslonA = 39110,
6709    ZaslonMultipurpose = 39112,
6710    ZooPark1 = 39125,
6711    ZPS6 = 39126,
6712    ZOOPARK3 = 39127,
6713    ZD12 = 39131,
6714    ZW06 = 39150,
6715    ANALQ1361 = 39200,
6716    ANALQ1362 = 39201,
6717    ANALQ1363 = 39202,
6718    ANALQ1364 = 39203,
6719    ANALQ1365 = 39204,
6720    ANALQ1622 = 39210,
6721    ANALQ1623 = 39211,
6722    ANALQ1624 = 39212,
6723    ZhukM = 45300,
6724    ZHUKMAE = 45303,
6725    ZHUKME = 45304,
6726    ZHUKMME = 45305,
6727    ZhukMSE = 45307,
6728}
6729
6730impl EmitterName {
6731    #[must_use]
6732    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
6733        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
6734    }
6735}
6736
6737// SISO-REF-010-2023 EmitterSystemFunction [UID 76]
6738#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
6739pub enum EmitterSystemFunction {
6740    #[default]
6741    Other = 0,
6742    MultiFunction = 1,
6743    EarlyWarningSurveillance = 2,
6744    HeightFinder = 3,
6745    FireControl = 4,
6746    AcquisitionDetection = 5,
6747    Tracker = 6,
6748    GuidanceIllumination = 7,
6749    FiringPointLaunchPointLocation = 8,
6750    RangeOnly = 9,
6751    RadarAltimeter = 10,
6752    Imaging = 11,
6753    MotionDetection = 12,
6754    Navigation = 13,
6755    WeatherMeteorological = 14,
6756    Instrumentation = 15,
6757    IdentificationClassification = 16,
6758    AAAFireControl = 17,
6759    AirSearchBomb = 18,
6760    AirIntercept = 19,
6761    Altimeter = 20,
6762    AirMapping = 21,
6763    AirTrafficControl = 22,
6764    Beacon = 23,
6765    BattlefieldSurveillance = 24,
6766    GroundControlApproach = 25,
6767    GroundControlIntercept = 26,
6768    CoastalSurveillance = 27,
6769    DecoyMimic = 28,
6770    DataTransmission = 29,
6771    EarthSurveillance = 30,
6772    GunLayBeacon = 31,
6773    GroundMapping = 32,
6774    HarborSurveillance = 33,
6775    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6776    IFF = 34,
6777    InstrumentLandingSystem = 35,
6778    IonosphericSound = 36,
6779    Interrogator = 37,
6780    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6781    BarrageJamming = 38,
6782    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6783    ClickJamming = 39,
6784    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6785    DeceptiveJamming = 40,
6786    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6787    FrequencySweptJamming = 41,
6788    Jammer = 42,
6789    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6790    NoiseJamming = 43,
6791    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6792    PulsedJamming = 44,
6793    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6794    RepeaterJamming = 45,
6795    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6796    SpotNoiseJamming = 46,
6797    MissileAcquisition = 47,
6798    MissileDownlink = 48,
6799    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6800    Meteorological = 49,
6801    Space = 50,
6802    SurfaceSearch = 51,
6803    ShellTracking = 52,
6804    Television = 56,
6805    Unknown = 57,
6806    VideoRemoting = 58,
6807    ExperimentalOrTraining = 59,
6808    MissileGuidance = 60,
6809    MissileHoming = 61,
6810    MissileTracking = 62,
6811    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6812    JammingNoise = 64,
6813    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6814    JammingDeception = 65,
6815    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6816    Decoy = 66,
6817    NavigationDistanceMeasuringEquipment = 71,
6818    TerrainFollowing = 72,
6819    WeatherAvoidance = 73,
6820    ProximityFuse = 74,
6821    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
6822    Instrumentation_ = 75,
6823    Radiosonde = 76,
6824    Sonobuoy = 77,
6825    BathythermalSensor = 78,
6826    TowedCounterMeasure = 79,
6827    DippingSonar = 80,
6828    TowedAcousticSensor = 81,
6829    WeaponNonlethal = 96,
6830    WeaponLethal = 97,
6831    TestEquipment = 98,
6832    AcquisitionTrack = 99,
6833    TrackGuidance = 100,
6834    GuidanceIlluminationTrackAcquisition = 101,
6835    SearchAcquisition = 102,
6836    Dropsonde = 103,
6837}
6838
6839impl EmitterSystemFunction {
6840    #[must_use]
6841    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
6842        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
6843    }
6844}
6845
6846// SISO-REF-010-2023 ElectromagneticEmissionStateUpdateIndicator [UID 77]
6847#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
6848pub enum ElectromagneticEmissionStateUpdateIndicator {
6849    #[default]
6850    HeartbeatUpdate = 0,
6851    ChangedDataUpdate = 1,
6852}
6853
6854impl ElectromagneticEmissionStateUpdateIndicator {
6855    #[must_use]
6856    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
6857        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
6858    }
6859}
6860
6861// SISO-REF-010-2023 ElectromagneticEmissionBeamFunction [UID 78]
6862#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
6863pub enum ElectromagneticEmissionBeamFunction {
6864    #[default]
6865    Other = 0,
6866    Search = 1,
6867    HeightFinding = 2,
6868    Acquisition = 3,
6869    Tracking = 4,
6870    Acquisitionandtracking = 5,
6871    Commandguidance = 6,
6872    Illumination = 7,
6873    Ranging = 8,
6874    Missilebeacon = 9,
6875    MissileFusing = 10,
6876    Activeradarmissileseeker = 11,
6877    Jamming = 12,
6878    IFF = 13,
6879    NavigationWeather = 14,
6880    Meteorological = 15,
6881    Datatransmission = 16,
6882    Navigationaldirectionalbeacon = 17,
6883    TimeSharedSearch = 20,
6884    TimeSharedAcquisition = 21,
6885    TimeSharedTrack = 22,
6886    TimeSharedCommandGuidance = 23,
6887    TimeSharedIllumination = 24,
6888    TimeSharedJamming = 25,
6889}
6890
6891impl ElectromagneticEmissionBeamFunction {
6892    #[must_use]
6893    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
6894        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
6895    }
6896}
6897
6898// SISO-REF-010-2023 HighDensityTrackJam [UID 79]
6899#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
6900pub enum HighDensityTrackJam {
6901    #[default]
6902    NotSelected = 0,
6903    Selected = 1,
6904}
6905
6906impl HighDensityTrackJam {
6907    #[must_use]
6908    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
6909        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
6910    }
6911}
6912
6913// SISO-REF-010-2023 DesignatorSystemName [UID 80]
6914#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
6915pub enum DesignatorSystemName {
6916    #[default]
6917    NotSpecified = 0,
6918    ANAAQ4 = 1000,
6919    ANAAQ7 = 1100,
6920    ANAAQ8 = 1200,
6921    ANAAQ14LANTIRN = 1300,
6922    ANAAQ19 = 1400,
6923    ANAAQ22ASAFIRE = 1500,
6924    ANAAQ22BSAFIRELP = 1600,
6925    ANAAQ22CStarSAFIREI = 1700,
6926    ANAAQ22DBRITEStar = 1800,
6927    ANAAQ24DIRCMNemesis = 1900,
6928    ANAAQ25LTS = 2000,
6929    ANAAQ28LITENINGII = 2100,
6930    ANAAQ30 = 2200,
6931    ANAAQ32 = 2300,
6932    ANAAQ33Sniper = 2400,
6933    ANAAQ37 = 2500,
6934    ANAAQ38 = 2600,
6935    ANAAQ40 = 2650,
6936    ANAAS32 = 2700,
6937    ANAAS35V = 2800,
6938    ANAAS37 = 2900,
6939    ANAAS38 = 3000,
6940    ANAAS44 = 3100,
6941    ANAAS46 = 3200,
6942    ANAAS49 = 3300,
6943    ANAAS51 = 3400,
6944    ANAAS52MTSA = 3500,
6945    ANALQ10 = 3600,
6946    ANASQ228 = 3700,
6947    ANAVQ25 = 4400,
6948    ANAVQ26 = 4500,
6949    ANGVS5 = 4600,
6950    ANPED1LLDR = 4700,
6951    TADSLRFD = 4800,
6952    MMSLRFD = 4900,
6953    AH1CNITE = 5000,
6954    MATES = 5100,
6955    TCV115 = 5200,
6956    TIM = 5300,
6957    TMS303 = 5400,
6958    TMY303 = 5500,
6959    ALRAD = 5600,
6960    RFTDL = 5700,
6961    VVLR = 5800,
6962    P0705HELL = 6000,
6963    P0708PULSE = 6100,
6964    HELD = 6200,
6965    TYPE105 = 6300,
6966    TYPE118 = 6400,
6967    TYPE121 = 6500,
6968    TYPE126 = 6600,
6969    TYPE629 = 6700,
6970    CLDS = 6800,
6971    TAV38 = 6900,
6972    TMV630 = 7000,
6973    ALTM1020 = 7100,
6974    ALATS = 7200,
6975    DarkStarLAMPS = 7300,
6976    GLTDII = 7400,
6977    MBTELRF = 7500,
6978    MarkVII = 7600,
6979    SIREV = 7700,
6980    ANAAQ16B = 7800,
6981    ANAAQ16DAESOP = 7900,
6982    ANAAQ21StarSAFIREIII = 8000,
6983    ANAAQ22EBRITEStar = 8100,
6984    ANAAQ36StarSAFIREII = 8200,
6985    ANAAS38ANiteHawk = 8300,
6986    ANAAS38BNiteHawk = 8400,
6987    ANAAS44C = 8500,
6988    ANAAS53CSP = 8600,
6989    ANASQ28ATFLIR = 8700,
6990    ANDAS1MTSB = 8800,
6991    ANPAQ1LTD = 8900,
6992    ANPAQ3MULE = 9000,
6993    ANPEQ1SOFLAM = 9090,
6994    ANPEQ3 = 9100,
6995    ANPEQ15ATPIAL = 9140,
6996    ANPEQ18IZLID1000P = 9150,
6997    ANTVQ2GVLLD = 9200,
6998    ANZSQ21EOS = 9300,
6999    ANZSQ22EOS = 9400,
7000    CIRCM = 9500,
7001    Guardian = 9600,
7002    IZLID200P = 9700,
7003    IZLID1000PW = 9800,
7004    MMS = 9900,
7005    MTADSPNVSArrowhead = 10000,
7006    RBS70 = 10100,
7007    RBS90 = 10200,
7008    TADSPNVS = 10300,
7009    COLIBRI = 10400,
7010    Damocles = 10500,
7011    I251Shkval = 10600,
7012    KPS53AVEOTS = 10700,
7013    StarSAFIRE380 = 10800,
7014    JANUSTEOS = 10900,
7015    LOTHAREOS = 11000,
7016    MK46MOD1EOS = 11100,
7017    MTK201MEEOS = 11200,
7018    ThalesMiradorMk2EOS = 11300,
7019    TPN1M4923EOS = 11400,
7020}
7021
7022impl DesignatorSystemName {
7023    #[must_use]
7024    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7025        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7026    }
7027}
7028
7029impl FieldSerialize for DesignatorSystemName {
7030    fn serialize_field(&self, buf: &mut BytesMut) {
7031        buf.put_u16(*self as u16);
7032    }
7033}
7034
7035impl FieldDeserialize for DesignatorSystemName {
7036    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
7037        Self::deserialize(buf)
7038    }
7039}
7040
7041impl FieldLen for DesignatorSystemName {
7042    fn field_len(&self) -> usize {
7043        2
7044    }
7045}
7046
7047// SISO-REF-010-2023 DesignatorCode [UID 81]
7048#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7049#[deprecated(note = "Enumeration is deprecated and only serves an historical purpose")]
7050pub enum DesignatorCode {
7051    #[default]
7052    Other = 0,
7053}
7054
7055impl DesignatorCode {
7056    #[must_use]
7057    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7058        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7059    }
7060}
7061
7062impl FieldSerialize for DesignatorCode {
7063    fn serialize_field(&self, buf: &mut BytesMut) {
7064        buf.put_u16(*self as u16);
7065    }
7066}
7067
7068impl FieldDeserialize for DesignatorCode {
7069    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
7070        Self::deserialize(buf)
7071    }
7072}
7073
7074impl FieldLen for DesignatorCode {
7075    fn field_len(&self) -> usize {
7076        2
7077    }
7078}
7079
7080// SISO-REF-010-2023 IFFSystemType [UID 82]
7081#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7082pub enum IFFSystemType {
7083    #[default]
7084    NotUsed = 0,
7085    MarkXXIIATCRBSTransponder = 1,
7086    MarkXXIIATCRBSInterrogator = 2,
7087    SovietTransponder = 3,
7088    SovietInterrogator = 4,
7089    RRBTransponder = 5,
7090    MarkXIIAInterrogator = 6,
7091    Mode5Interrogator = 7,
7092    ModeSInterrogator = 8,
7093    MarkXIIATransponder = 9,
7094    Mode5Transponder = 10,
7095    ModeSTransponder = 11,
7096    MarkXIIACombinedInterrogatorTransponder = 12,
7097    MarkXIICombinedInterrogatorTransponder = 13,
7098    TCASACASTransceiver = 14,
7099}
7100
7101impl IFFSystemType {
7102    #[must_use]
7103    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7104        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7105    }
7106}
7107
7108// SISO-REF-010-2023 IFFSystemName [UID 83]
7109#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7110pub enum IFFSystemName {
7111    #[default]
7112    NotUsed = 0,
7113    GenericMarkX = 1,
7114    GenericMarkXII = 2,
7115    GenericATCRBS = 3,
7116    GenericSoviet = 4,
7117    GenericModeS = 5,
7118    GenericMarkXXIIATCRBS = 6,
7119    GenericMarkXXIIATCRBSModeS = 7,
7120    ARI5954 = 8,
7121    ARI5983 = 9,
7122    GenericRRB = 10,
7123    GenericMarkXIIA = 11,
7124    GenericMode5 = 12,
7125    GenericMarkXIIACombinedInterrogatorTransponder = 13,
7126    GenericMarkXIICombinedInterrogatorTransponder = 14,
7127    GenericTCASIACASITransceiver = 15,
7128    GenericTCASIIACASIITransceiver = 16,
7129    GenericMarkXA = 17,
7130    GenericMarkXSIF = 18,
7131}
7132
7133impl IFFSystemName {
7134    #[must_use]
7135    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7136        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7137    }
7138}
7139
7140// SISO-REF-010-2023 IFFSystemMode [UID 84]
7141#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7142pub enum IFFSystemMode {
7143    #[default]
7144    NoStatement = 0,
7145    Off = 1,
7146    Standby = 2,
7147    Normal = 3,
7148    Emergency = 4,
7149    LoworLowSensitivity = 5,
7150}
7151
7152impl IFFSystemMode {
7153    #[must_use]
7154    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7155        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7156    }
7157}
7158
7159// SISO-REF-010-2023 IFFLayerSpecificInformation [UID 87]
7160#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7161pub enum IFFLayerSpecificInformation {
7162    #[default]
7163    NoLayerSpecificInformationIsPresent = 0,
7164}
7165
7166impl IFFLayerSpecificInformation {
7167    #[must_use]
7168    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7169        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7170    }
7171}
7172
7173// SISO-REF-010-2023 IFFAlternateMode4ChallengeReply [UID 96]
7174#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7175pub enum IFFAlternateMode4ChallengeReply {
7176    #[default]
7177    NoStatement = 0,
7178    Valid = 1,
7179    Invalid = 2,
7180    Noresponse = 3,
7181    UnabletoVerify = 4,
7182}
7183
7184impl IFFAlternateMode4ChallengeReply {
7185    #[must_use]
7186    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7187        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7188    }
7189}
7190
7191// SISO-REF-010-2023 IFFSystemType1OperationalParameter1 [UID 97]
7192#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7193pub enum IFFSystemType1OperationalParameter1 {
7194    #[default]
7195    NoOperationalParameter1Data = 0,
7196}
7197
7198impl IFFSystemType1OperationalParameter1 {
7199    #[must_use]
7200    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7201        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7202    }
7203}
7204
7205// SISO-REF-010-2023 IFFSystemType1OperationalParameter2 [UID 98]
7206#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7207pub enum IFFSystemType1OperationalParameter2 {
7208    #[default]
7209    NoOperationalParameter2Data = 0,
7210}
7211
7212impl IFFSystemType1OperationalParameter2 {
7213    #[must_use]
7214    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7215        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7216    }
7217}
7218
7219// SISO-REF-010-2023 SubcategoriesforLandCategory200Mammal [UID 100]
7220#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7221pub enum SubcategoriesforLandCategory200Mammal {
7222    #[default]
7223    SmallDog = 1,
7224    Chihuahua = 2,
7225    MediumDog = 10,
7226    AustralianCattleDog = 11,
7227    LargeDog = 20,
7228    GermanShepherd = 21,
7229    VeryLargeDog = 30,
7230    GiantTurkishKangal = 31,
7231    Sheep = 40,
7232    Goat = 41,
7233    Pig = 50,
7234    Cow = 60,
7235    Ox = 61,
7236    OxWithCart = 70,
7237    Horse = 80,
7238    Donkey = 81,
7239    Mule = 82,
7240    HorseWithRider = 90,
7241    HorseWithCargo = 91,
7242    DonkeyWithRider = 92,
7243    DonkeyWithCargo = 93,
7244    MuleWithRider = 94,
7245    MuleWithCargo = 95,
7246    Camel = 100,
7247    DromedaryCamel = 101,
7248    BactrianCamel = 102,
7249    DromedaryCamelWithRider = 110,
7250    DromedaryCamelWithCargo = 111,
7251    Rat = 200,
7252}
7253
7254impl SubcategoriesforLandCategory200Mammal {
7255    #[must_use]
7256    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7257        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7258    }
7259}
7260
7261// SISO-REF-010-2023 SubcategoriesforLandCategory201Reptile [UID 101]
7262#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7263pub enum SubcategoriesforLandCategory201Reptile {
7264    #[default]
7265    NewZealandNorthernTuatara = 1,
7266    Monitor = 3,
7267    Gecko = 8,
7268    Iguana = 13,
7269    Chameleon = 17,
7270    NonVenomousSnake = 30,
7271    Boa = 31,
7272    Python = 35,
7273    Bullsnake = 39,
7274    Kingsnake = 43,
7275    VenomousSnake = 60,
7276    Rattlesnake = 61,
7277    Copperhead = 62,
7278    Cottonmouth = 63,
7279    Taipan = 64,
7280    Viper = 65,
7281    Cobra = 66,
7282    AustralianBrownSnake = 67,
7283    Tortoise = 90,
7284    Turtle = 100,
7285    AmericanAlligator = 120,
7286    Crocodile = 121,
7287    AustralianFreshwaterCrocodile = 122,
7288}
7289
7290impl SubcategoriesforLandCategory201Reptile {
7291    #[must_use]
7292    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7293        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7294    }
7295}
7296
7297// SISO-REF-010-2023 SubcategoriesforLandCategory202Amphibian [UID 102]
7298#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7299pub enum SubcategoriesforLandCategory202Amphibian {
7300    #[default]
7301    Frog = 1,
7302    Toad = 2,
7303    Salamander = 170,
7304    Caecilian = 230,
7305}
7306
7307impl SubcategoriesforLandCategory202Amphibian {
7308    #[must_use]
7309    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7310        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7311    }
7312}
7313
7314// SISO-REF-010-2023 SubcategoriesforLandCategory203Insect [UID 103]
7315#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7316pub enum SubcategoriesforLandCategory203Insect {
7317    #[default]
7318    Beetle = 1,
7319    Mantis = 60,
7320    Cockroach = 70,
7321    ArmyAnt = 80,
7322    FireAnt = 81,
7323    Grasshopper = 90,
7324    Centipede = 100,
7325}
7326
7327impl SubcategoriesforLandCategory203Insect {
7328    #[must_use]
7329    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7330        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7331    }
7332}
7333
7334// SISO-REF-010-2023 SubcategoriesforLandCategory204Arachnid [UID 104]
7335#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7336pub enum SubcategoriesforLandCategory204Arachnid {
7337    #[default]
7338    Spider = 1,
7339    Tick = 20,
7340    Scorpion = 30,
7341    Harvestmen = 40,
7342    Mite = 50,
7343}
7344
7345impl SubcategoriesforLandCategory204Arachnid {
7346    #[must_use]
7347    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7348        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7349    }
7350}
7351
7352// SISO-REF-010-2023 SubcategoriesforLandCategory205Mollusk [UID 105]
7353#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7354pub enum SubcategoriesforLandCategory205Mollusk {
7355    #[default]
7356    Snail = 1,
7357    Slug = 50,
7358}
7359
7360impl SubcategoriesforLandCategory205Mollusk {
7361    #[must_use]
7362    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7363        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7364    }
7365}
7366
7367// SISO-REF-010-2023 SubcategoriesforLandCategory206Marsupial [UID 106]
7368#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7369pub enum SubcategoriesforLandCategory206Marsupial {
7370    #[default]
7371    BrownFourEyedOpossum = 1,
7372    BushyTailedOpossum = 2,
7373    TatesShrewOpossum = 90,
7374    GreaterBilby = 100,
7375    TasmanianDevil = 110,
7376    BrushTailedRockWallaby = 150,
7377    EasternWallaroo = 160,
7378    RedKangaroo = 170,
7379    QueenslandKoala = 200,
7380    SouthernHairyNosedWombat = 205,
7381    BrushtailPossum = 210,
7382    SugarGlider = 211,
7383}
7384
7385impl SubcategoriesforLandCategory206Marsupial {
7386    #[must_use]
7387    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7388        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7389    }
7390}
7391
7392// SISO-REF-010-2023 SubcategoriesforAirCategory200Bird [UID 110]
7393#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7394pub enum SubcategoriesforAirCategory200Bird {
7395    #[default]
7396    Penguin = 1,
7397    Seagull = 2,
7398    Pelican = 3,
7399    Albatross = 4,
7400    Swan = 5,
7401    Cormorant = 6,
7402    Heron = 7,
7403    Crane = 8,
7404    Osprey = 9,
7405    Loon = 10,
7406    Stork = 11,
7407    Flamingo = 12,
7408    Duck = 13,
7409    Ostrich = 20,
7410    Emu = 21,
7411    Chicken = 22,
7412    BlackBird = 30,
7413    Starling = 31,
7414    Budgerigar = 32,
7415    CanadianGoose = 40,
7416    Crow = 41,
7417    Eagle = 50,
7418    Vulture = 55,
7419    Falcon = 60,
7420    Hawk = 65,
7421    Owl = 70,
7422    Kite = 80,
7423}
7424
7425impl SubcategoriesforAirCategory200Bird {
7426    #[must_use]
7427    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7428        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7429    }
7430}
7431
7432// SISO-REF-010-2023 SubcategoriesforAirCategory201Insect [UID 111]
7433#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7434pub enum SubcategoriesforAirCategory201Insect {
7435    #[default]
7436    Moth = 1,
7437    Butterfly = 2,
7438    Fly = 20,
7439    Mosquito = 30,
7440    Wasp = 40,
7441    Bee = 50,
7442    Beetle = 60,
7443    Dragonfly = 70,
7444    Locust = 80,
7445}
7446
7447impl SubcategoriesforAirCategory201Insect {
7448    #[must_use]
7449    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7450        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7451    }
7452}
7453
7454// SISO-REF-010-2023 SubcategoriesforAirCategory202Mammal [UID 112]
7455#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7456pub enum SubcategoriesforAirCategory202Mammal {
7457    #[default]
7458    Bat = 1,
7459    FlyingSquirrel = 10,
7460    GlidingPossum = 20,
7461}
7462
7463impl SubcategoriesforAirCategory202Mammal {
7464    #[must_use]
7465    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7466        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7467    }
7468}
7469
7470// SISO-REF-010-2023 SubcategoriesforSubsurfaceCategory200Fish [UID 120]
7471#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7472pub enum SubcategoriesforSubsurfaceCategory200Fish {
7473    #[default]
7474    ForageFishSmallSchooling = 1,
7475    Herring = 2,
7476    Sardines = 3,
7477    Krill = 4,
7478    Squid = 5,
7479    MediumSchoolingFish = 30,
7480    Hake = 31,
7481    Cod = 32,
7482    Haddock = 33,
7483    Mackerel = 34,
7484    LargeSchoolingFish = 60,
7485    Tuna = 61,
7486    SmallShark = 90,
7487    DogfishShark = 91,
7488    MediumShark = 120,
7489    MakoShark = 121,
7490    HammerheadShark = 122,
7491    LargeShark = 150,
7492    GreatWhiteShark = 151,
7493    TigerShark = 152,
7494    BlueShark = 153,
7495    WhaleShark = 154,
7496    Skate = 180,
7497    Stingray = 181,
7498    Eel = 190,
7499    Marlin = 200,
7500    Swordfish = 201,
7501}
7502
7503impl SubcategoriesforSubsurfaceCategory200Fish {
7504    #[must_use]
7505    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7506        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7507    }
7508}
7509
7510// SISO-REF-010-2023 SubcategoriesforSubsurfaceCategory201Mammal [UID 121]
7511#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7512pub enum SubcategoriesforSubsurfaceCategory201Mammal {
7513    #[default]
7514    Whale = 1,
7515    BeakedWhale = 2,
7516    BelugaWhale = 3,
7517    BlueWhale = 4,
7518    BottlenoseWhale = 5,
7519    NorthernBottlenoseWhale = 6,
7520    SouthernBottlenoseWhale = 7,
7521    BowheadWhale = 8,
7522    BrydesWhale = 9,
7523    DwarfSpermWhale = 10,
7524    FinbackWhale = 11,
7525    GrayWhale = 12,
7526    HumpbackWhale = 13,
7527    LongFinnedPilotWhale = 14,
7528    MinkeWhale = 15,
7529    NorthernMinkeWhale = 16,
7530    SouthernMinkeWhale = 17,
7531    NarwhalWhale = 18,
7532    OrcaWhale = 19,
7533    PygmySpermWhale = 20,
7534    RightWhale = 21,
7535    NorthAtlanticRightWhale = 22,
7536    NorthPacificRightWhale = 23,
7537    SouthernRightWhale = 24,
7538    SeiWhale = 25,
7539    ShortFinnedPilotWhale = 26,
7540    SpermWhale = 27,
7541    Dolphin = 50,
7542    BottlenoseDolphin = 51,
7543    BottlenoseIndoPacificDolphin = 52,
7544    BottlenoseBurrunanDolphin = 53,
7545    AtlanticSpottedDolphin = 54,
7546    AustralianSnubfinDolphin = 55,
7547    ChileanBlackDolphin = 56,
7548    ChineseWhiteDolphin = 57,
7549    ClymeneDolphin = 58,
7550    Porpoise = 100,
7551    HarbourPorpoise = 101,
7552    CalifornianPorpoise = 102,
7553    DallsPorpoise = 103,
7554    BurmeistersPorpoise = 104,
7555    Seal = 120,
7556    BeardedSeal = 121,
7557    HarborSeal = 122,
7558    FurSeal = 123,
7559    WeddellSeal = 124,
7560    ElephantSeal = 125,
7561    SeaLion = 130,
7562    AustralianSeaLion = 131,
7563    CaliforniaSeaLion = 132,
7564    Walrus = 140,
7565    AtlanticWalrus = 141,
7566    PacificWalrus = 142,
7567    Otter = 150,
7568    SeaOtter = 151,
7569    Manatee = 160,
7570    FloridaManatee = 161,
7571    Dugongs = 162,
7572    PolarBear = 200,
7573}
7574
7575impl SubcategoriesforSubsurfaceCategory201Mammal {
7576    #[must_use]
7577    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7578        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7579    }
7580}
7581
7582// SISO-REF-010-2023 SubcategoriesforSubsurfaceCategory202Mollusk [UID 122]
7583#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7584pub enum SubcategoriesforSubsurfaceCategory202Mollusk {
7585    #[default]
7586    Snail = 1,
7587    Slug = 10,
7588    Octopus = 20,
7589    Squid = 30,
7590    Cuttlefish = 40,
7591    Clam = 50,
7592    Muscle = 60,
7593    Oyster = 70,
7594    Scallop = 80,
7595}
7596
7597impl SubcategoriesforSubsurfaceCategory202Mollusk {
7598    #[must_use]
7599    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7600        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7601    }
7602}
7603
7604// SISO-REF-010-2023 SubcategoriesforSubsurfaceCategory203Crustacean [UID 123]
7605#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7606pub enum SubcategoriesforSubsurfaceCategory203Crustacean {
7607    #[default]
7608    Shrimp = 1,
7609    SnappingShrimp = 2,
7610    Crayfish = 10,
7611    Lobster = 20,
7612    Crab = 30,
7613}
7614
7615impl SubcategoriesforSubsurfaceCategory203Crustacean {
7616    #[must_use]
7617    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7618        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7619    }
7620}
7621
7622// SISO-REF-010-2023 SubcategoriesforSubsurfaceCategory204Insect [UID 124]
7623#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7624pub enum SubcategoriesforSubsurfaceCategory204Insect {
7625    #[default]
7626    SeaSkater = 1,
7627    WaterBeetle = 2,
7628}
7629
7630impl SubcategoriesforSubsurfaceCategory204Insect {
7631    #[must_use]
7632    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7633        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7634    }
7635}
7636
7637// SISO-REF-010-2023 AnimalLifeformGroupSizeRangeEnumerationforallDomains [UID 130]
7638#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7639pub enum AnimalLifeformGroupSizeRangeEnumerationforallDomains {
7640    #[default]
7641    Numberofanimalsrangefrom201to249 = 201,
7642    Numberofanimalsrangefrom250to299 = 202,
7643    Numberofanimalsrangefrom300to399 = 203,
7644    Numberofanimalsrangefrom400to499 = 204,
7645    Numberofanimalsrangefrom500to999 = 205,
7646    Numberofanimalsrangefrom1000to1499 = 206,
7647    Numberofanimalsrangefrom1500to1999 = 207,
7648    Numberofanimalsrangefrom2000to2999 = 208,
7649    Numberofanimalsrangefrom3000to4999 = 210,
7650    Numberofanimalsrangefrom5000to6999 = 212,
7651    Numberofanimalsrangefrom7000to9999 = 214,
7652    Numberofanimalsrangefrom10000to19999 = 216,
7653    Numberofanimalsrangefrom20000to50000 = 218,
7654    Numberofanimalsrangegreaterthan50000 = 220,
7655}
7656
7657impl AnimalLifeformGroupSizeRangeEnumerationforallDomains {
7658    #[must_use]
7659    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7660        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7661    }
7662}
7663
7664// SISO-REF-010-2023 SpecificDimensionEnumerationsforLandAreaSize [UID 131]
7665#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7666pub enum SpecificDimensionEnumerationsforLandAreaSize {
7667    #[default]
7668    SmallArea = 222,
7669    SmallAreaDense = 223,
7670    MediumArea = 224,
7671    MediumAreaDense = 225,
7672    LargeArea = 226,
7673    LargeAreaDense = 227,
7674}
7675
7676impl SpecificDimensionEnumerationsforLandAreaSize {
7677    #[must_use]
7678    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7679        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7680    }
7681}
7682
7683// SISO-REF-010-2023 SpecificDimensionEnumerationsforAirAreaSize [UID 132]
7684#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7685pub enum SpecificDimensionEnumerationsforAirAreaSize {
7686    #[default]
7687    SmallFlockSwarm = 222,
7688    SmallFlockSwarmDense = 223,
7689    MediumFlockSwarm = 224,
7690    MediumFlockSwarmDense = 225,
7691    LargeFlockSwarm = 226,
7692    LargeFlockSwarmDense = 227,
7693}
7694
7695impl SpecificDimensionEnumerationsforAirAreaSize {
7696    #[must_use]
7697    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7698        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7699    }
7700}
7701
7702// SISO-REF-010-2023 AddSpecificDimensionEnumerationsforSubsurfaceAreaSize [UID 133]
7703#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7704pub enum AddSpecificDimensionEnumerationsforSubsurfaceAreaSize {
7705    #[default]
7706    SmallSchool = 222,
7707    SmallSchoolDense = 223,
7708    MediumSchool = 224,
7709    MediumSchoolDense = 225,
7710    LargeSchool = 226,
7711    LargeSchoolDense = 227,
7712}
7713
7714impl AddSpecificDimensionEnumerationsforSubsurfaceAreaSize {
7715    #[must_use]
7716    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7717        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7718    }
7719}
7720
7721// SISO-REF-010-2023 AddVariantsforLandCategory200Mammal [UID 134]
7722#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7723pub enum AddVariantsforLandCategory200Mammal {
7724    #[default]
7725    AnimalwithaMaleChildRider = 1,
7726    AnimalwithaFemaleChildRider = 2,
7727    AnimalwithanAdultMaleRider = 3,
7728    AnimalwithanAdultFemaleRider = 4,
7729    AnimalHarnessedtoaPlow = 5,
7730    AnimalHarnessedtoaCart = 6,
7731}
7732
7733impl AddVariantsforLandCategory200Mammal {
7734    #[must_use]
7735    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7736        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7737    }
7738}
7739
7740// SISO-REF-010-2023 VariantsforLandCategoriesReptilesAmphibiansInsectsandArachnids [UID 135]
7741#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7742pub enum VariantsforLandCategoriesReptilesAmphibiansInsectsandArachnids {
7743    #[default]
7744    Black = 1,
7745    Green = 2,
7746    Spotted = 3,
7747    Red = 4,
7748    Brown = 5,
7749}
7750
7751impl VariantsforLandCategoriesReptilesAmphibiansInsectsandArachnids {
7752    #[must_use]
7753    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7754        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7755    }
7756}
7757
7758// SISO-REF-010-2023 VariantsforAirCategory200Bird [UID 136]
7759#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7760pub enum VariantsforAirCategory200Bird {
7761    #[default]
7762    BirdwithFish = 1,
7763    VPatternFlockShape = 2,
7764    CircularFlockShape = 3,
7765    IrregularFlockShape = 4,
7766}
7767
7768impl VariantsforAirCategory200Bird {
7769    #[must_use]
7770    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7771        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7772    }
7773}
7774
7775// SISO-REF-010-2023 AddVariantsforAirCategory201Insect [UID 137]
7776#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7777pub enum AddVariantsforAirCategory201Insect {
7778    #[default]
7779    VerticalShapedInsectSwarm = 1,
7780    CircularShapedInsectSwarm = 2,
7781    IrregularShapedInsectSwarm = 3,
7782}
7783
7784impl AddVariantsforAirCategory201Insect {
7785    #[must_use]
7786    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7787        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7788    }
7789}
7790
7791// SISO-REF-010-2023 AddVariantsforSubsurfaceCategoriesFishMolluskCrustaceanandInsect [UID 138]
7792#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7793pub enum AddVariantsforSubsurfaceCategoriesFishMolluskCrustaceanandInsect {
7794    #[default]
7795    Black = 1,
7796    Green = 2,
7797    Spotted = 3,
7798    Red = 4,
7799    Brown = 5,
7800    Blue = 6,
7801    Silver = 7,
7802    Grey = 8,
7803}
7804
7805impl AddVariantsforSubsurfaceCategoriesFishMolluskCrustaceanandInsect {
7806    #[must_use]
7807    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7808        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7809    }
7810}
7811
7812// SISO-REF-010-2023 VariantsforSubsurfaceCategory201Mammal [UID 139]
7813#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7814pub enum VariantsforSubsurfaceCategory201Mammal {
7815    #[default]
7816    Singing = 1,
7817    Spouting = 2,
7818}
7819
7820impl VariantsforSubsurfaceCategory201Mammal {
7821    #[must_use]
7822    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7823        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7824    }
7825}
7826
7827// SISO-REF-010-2023 UAStateChangeUpdateIndicator [UID 143]
7828#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7829pub enum UAStateChangeUpdateIndicator {
7830    #[default]
7831    StateUpdate = 0,
7832    ChangedDataUpdate = 1,
7833}
7834
7835impl UAStateChangeUpdateIndicator {
7836    #[must_use]
7837    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7838        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7839    }
7840}
7841
7842impl FieldSerialize for UAStateChangeUpdateIndicator {
7843    fn serialize_field(&self, buf: &mut BytesMut) {
7844        buf.put_u8(*self as u8);
7845    }
7846}
7847
7848impl FieldDeserialize for UAStateChangeUpdateIndicator {
7849    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
7850        Self::deserialize(buf)
7851    }
7852}
7853
7854impl FieldLen for UAStateChangeUpdateIndicator {
7855    fn field_len(&self) -> usize {
7856        1
7857    }
7858}
7859
7860// SISO-REF-010-2023 UAAcousticSystemName [UID 144]
7861#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7862pub enum UAAcousticSystemName {
7863    #[default]
7864    Other = 0,
7865    ANBQQ5 = 1,
7866    ANSSQ62 = 2,
7867    ANSQS23 = 3,
7868    ANSQS26 = 4,
7869    ANSQS53 = 5,
7870    ALFS = 6,
7871    LFA = 7,
7872    ANAQS901 = 8,
7873    ANAQS902 = 9,
7874}
7875
7876impl UAAcousticSystemName {
7877    #[must_use]
7878    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7879        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7880    }
7881}
7882
7883impl FieldSerialize for UAAcousticSystemName {
7884    fn serialize_field(&self, buf: &mut BytesMut) {
7885        buf.put_u16(*self as u16);
7886    }
7887}
7888
7889impl FieldDeserialize for UAAcousticSystemName {
7890    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
7891        Self::deserialize(buf)
7892    }
7893}
7894
7895impl FieldLen for UAAcousticSystemName {
7896    fn field_len(&self) -> usize {
7897        2
7898    }
7899}
7900
7901// SISO-REF-010-2023 UAAcousticEmitterSystemFunction [UID 145]
7902#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7903pub enum UAAcousticEmitterSystemFunction {
7904    #[default]
7905    Other = 0,
7906    Platformsearchdetecttrack = 1,
7907    Navigation = 2,
7908    Minehunting = 3,
7909    Weaponsearchdetecttrackdetect = 4,
7910}
7911
7912impl UAAcousticEmitterSystemFunction {
7913    #[must_use]
7914    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7915        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
7916    }
7917}
7918
7919impl FieldSerialize for UAAcousticEmitterSystemFunction {
7920    fn serialize_field(&self, buf: &mut BytesMut) {
7921        buf.put_u8(*self as u8);
7922    }
7923}
7924
7925impl FieldDeserialize for UAAcousticEmitterSystemFunction {
7926    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
7927        Self::deserialize(buf)
7928    }
7929}
7930
7931impl FieldLen for UAAcousticEmitterSystemFunction {
7932    fn field_len(&self) -> usize {
7933        1
7934    }
7935}
7936
7937// SISO-REF-010-2023 UAActiveEmissionParameterIndex [UID 146]
7938#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7939pub enum UAActiveEmissionParameterIndex {
7940    #[default]
7941    Other = 0,
7942}
7943
7944impl UAActiveEmissionParameterIndex {
7945    #[must_use]
7946    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7947        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7948    }
7949}
7950
7951// SISO-REF-010-2023 UAScanPattern [UID 147]
7952#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7953pub enum UAScanPattern {
7954    #[default]
7955    Scanpatternnotused = 0,
7956    Conical = 1,
7957    Helical = 2,
7958    Raster = 3,
7959    Sectorsearch = 4,
7960    Continuoussearch = 5,
7961}
7962
7963impl UAScanPattern {
7964    #[must_use]
7965    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7966        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7967    }
7968}
7969
7970// SISO-REF-010-2023 UAPassiveParameterIndex [UID 148]
7971#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
7972pub enum UAPassiveParameterIndex {
7973    #[default]
7974    Other = 0,
7975}
7976
7977impl UAPassiveParameterIndex {
7978    #[must_use]
7979    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
7980        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
7981    }
7982}
7983
7984impl FieldSerialize for UAPassiveParameterIndex {
7985    fn serialize_field(&self, buf: &mut BytesMut) {
7986        buf.put_u16(*self as u16);
7987    }
7988}
7989
7990impl FieldDeserialize for UAPassiveParameterIndex {
7991    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
7992        Self::deserialize(buf)
7993    }
7994}
7995
7996impl FieldLen for UAPassiveParameterIndex {
7997    fn field_len(&self) -> usize {
7998        2
7999    }
8000}
8001
8002// SISO-REF-010-2023 UAAdditionalPassiveActivityParameterIndex [UID 150]
8003#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8004pub enum UAAdditionalPassiveActivityParameterIndex {
8005    #[default]
8006    Other = 0,
8007}
8008
8009impl UAAdditionalPassiveActivityParameterIndex {
8010    #[must_use]
8011    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8012        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8013    }
8014}
8015
8016// SISO-REF-010-2023 TransmitterMajorModulation [UID 155]
8017#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8018pub enum TransmitterMajorModulation {
8019    #[default]
8020    NoStatement = 0,
8021    Amplitude = 1,
8022    AmplitudeandAngle = 2,
8023    Angle = 3,
8024    Combination = 4,
8025    Pulse = 5,
8026    Unmodulated = 6,
8027    CarrierPhaseShiftModulation = 7,
8028    SATCOM = 8,
8029}
8030
8031impl TransmitterMajorModulation {
8032    #[must_use]
8033    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8034        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8035    }
8036}
8037
8038// SISO-REF-010-2023 TransmitterDetailAmplitudeModulation [UID 156]
8039#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8040pub enum TransmitterDetailAmplitudeModulation {
8041    #[default]
8042    Other = 0,
8043    AFSK = 1,
8044    AM = 2,
8045    CW = 3,
8046    DSB = 4,
8047    ISB = 5,
8048    LSB = 6,
8049    SSBFull = 7,
8050    SSBReduc = 8,
8051    USB = 9,
8052    VSB = 10,
8053}
8054
8055impl TransmitterDetailAmplitudeModulation {
8056    #[must_use]
8057    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8058        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8059    }
8060}
8061
8062// SISO-REF-010-2023 TransmitterDetailAmplitudeandAngleModulation [UID 157]
8063#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8064pub enum TransmitterDetailAmplitudeandAngleModulation {
8065    #[default]
8066    Other = 0,
8067    AmplitudeandAngle = 1,
8068}
8069
8070impl TransmitterDetailAmplitudeandAngleModulation {
8071    #[must_use]
8072    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8073        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8074    }
8075}
8076
8077// SISO-REF-010-2023 TransmitterDetailAngleModulation [UID 158]
8078#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8079pub enum TransmitterDetailAngleModulation {
8080    #[default]
8081    Other = 0,
8082    FM = 1,
8083    FSK = 2,
8084    PM = 3,
8085    MSK = 4,
8086}
8087
8088impl TransmitterDetailAngleModulation {
8089    #[must_use]
8090    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8091        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8092    }
8093}
8094
8095// SISO-REF-010-2023 TransmitterDetailCombinationModulation [UID 159]
8096#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8097pub enum TransmitterDetailCombinationModulation {
8098    #[default]
8099    Other = 0,
8100    AmplitudeAnglePulse = 1,
8101}
8102
8103impl TransmitterDetailCombinationModulation {
8104    #[must_use]
8105    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8106        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8107    }
8108}
8109
8110// SISO-REF-010-2023 TransmitterDetailPulseModulation [UID 160]
8111#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8112pub enum TransmitterDetailPulseModulation {
8113    #[default]
8114    Other = 0,
8115    Pulse = 1,
8116    XBandTACANPulse = 2,
8117    YBandTACANPulse = 3,
8118}
8119
8120impl TransmitterDetailPulseModulation {
8121    #[must_use]
8122    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8123        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8124    }
8125}
8126
8127// SISO-REF-010-2023 TransmitterDetailUnmodulatedModulation [UID 161]
8128#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8129pub enum TransmitterDetailUnmodulatedModulation {
8130    #[default]
8131    Other = 0,
8132    ContinuousWaveemissionofanunmodulatedcarrier = 1,
8133}
8134
8135impl TransmitterDetailUnmodulatedModulation {
8136    #[must_use]
8137    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8138        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8139    }
8140}
8141
8142// SISO-REF-010-2023 TransmitterDetailCarrierPhaseShiftModulation [UID 162]
8143#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8144pub enum TransmitterDetailCarrierPhaseShiftModulation {
8145    #[default]
8146    Other = 0,
8147}
8148
8149impl TransmitterDetailCarrierPhaseShiftModulation {
8150    #[must_use]
8151    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8152        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8153    }
8154}
8155
8156// SISO-REF-010-2023 TransmitterModulationTypeSystem [UID 163]
8157#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8158pub enum TransmitterModulationTypeSystem {
8159    #[default]
8160    Other = 0,
8161    GenericRadioorSimpleIntercom = 1,
8162    HAVEQUICKI = 2,
8163    HAVEQUICKII = 3,
8164    SATURN = 4,
8165    SINCGARS = 5,
8166    CCTTSINCGARS = 6,
8167    EPLRS = 7,
8168    JTIDSMIDS = 8,
8169    Link11 = 9,
8170    Link11B = 10,
8171    LBandSATCOM = 11,
8172    EnhancedSINCGARS7_3 = 12,
8173    NavigationAid = 13,
8174}
8175
8176impl TransmitterModulationTypeSystem {
8177    #[must_use]
8178    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8179        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8180    }
8181}
8182
8183// SISO-REF-010-2023 TransmitterTransmitState [UID 164]
8184#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8185pub enum TransmitterTransmitState {
8186    #[default]
8187    Off = 0,
8188    Onbutnottransmitting = 1,
8189    Onandtransmitting = 2,
8190}
8191
8192impl TransmitterTransmitState {
8193    #[must_use]
8194    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8195        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8196    }
8197}
8198
8199impl FieldSerialize for TransmitterTransmitState {
8200    fn serialize_field(&self, buf: &mut BytesMut) {
8201        buf.put_u8(*self as u8);
8202    }
8203}
8204
8205impl FieldDeserialize for TransmitterTransmitState {
8206    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8207        Self::deserialize(buf)
8208    }
8209}
8210
8211impl FieldLen for TransmitterTransmitState {
8212    fn field_len(&self) -> usize {
8213        1
8214    }
8215}
8216
8217// SISO-REF-010-2023 TransmitterInputSource [UID 165]
8218#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8219pub enum TransmitterInputSource {
8220    #[default]
8221    Other = 0,
8222    Pilot = 1,
8223    Copilot = 2,
8224    FirstOfficer = 3,
8225    Driver = 4,
8226    Loader = 5,
8227    Gunner = 6,
8228    Commander = 7,
8229    DigitalDataDevice = 8,
8230    Intercom = 9,
8231    AudioJammer = 10,
8232    DataJammer = 11,
8233    GPSJammer = 12,
8234    GPSMeaconer = 13,
8235    SATCOMUplinkJammer = 14,
8236}
8237
8238impl TransmitterInputSource {
8239    #[must_use]
8240    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8241        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8242    }
8243}
8244
8245impl FieldSerialize for TransmitterInputSource {
8246    fn serialize_field(&self, buf: &mut BytesMut) {
8247        buf.put_u8(*self as u8);
8248    }
8249}
8250
8251impl FieldDeserialize for TransmitterInputSource {
8252    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8253        Self::deserialize(buf)
8254    }
8255}
8256
8257impl FieldLen for TransmitterInputSource {
8258    fn field_len(&self) -> usize {
8259        1
8260    }
8261}
8262
8263// SISO-REF-010-2023 TransmitterCryptoSystem [UID 166]
8264#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8265pub enum TransmitterCryptoSystem {
8266    #[default]
8267    NoEncryptionDevice = 0,
8268    KY28 = 1,
8269    KY58 = 2,
8270    NarrowSpectrumSecureVoice = 3,
8271    WideSpectrumSecureVoice = 4,
8272    SINCGARSICOM = 5,
8273    KY75 = 6,
8274    KY100 = 7,
8275    KY57 = 8,
8276    KYV5 = 9,
8277    Link11KG40AP = 10,
8278    Link11BKG40AS = 11,
8279    Link11KG40AR = 12,
8280    KGV135A = 13,
8281    TacticalSecureVoice = 14,
8282}
8283
8284impl TransmitterCryptoSystem {
8285    #[must_use]
8286    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8287        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8288    }
8289}
8290
8291impl FieldSerialize for TransmitterCryptoSystem {
8292    fn serialize_field(&self, buf: &mut BytesMut) {
8293        buf.put_u16(*self as u16);
8294    }
8295}
8296
8297impl FieldDeserialize for TransmitterCryptoSystem {
8298    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8299        Self::deserialize(buf)
8300    }
8301}
8302
8303impl FieldLen for TransmitterCryptoSystem {
8304    fn field_len(&self) -> usize {
8305        2
8306    }
8307}
8308
8309// SISO-REF-010-2023 TransmitterAntennaPatternType [UID 167]
8310#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8311pub enum TransmitterAntennaPatternType {
8312    #[default]
8313    Isotropic = 0,
8314    Beam = 1,
8315    Sphericalharmonic = 2,
8316    TransmitterRadiationVolume = 4,
8317    BeamandTransmitterRadiationVolume = 5,
8318    Omnidirectional = 6,
8319}
8320
8321impl TransmitterAntennaPatternType {
8322    #[must_use]
8323    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8324        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8325    }
8326}
8327
8328impl FieldSerialize for TransmitterAntennaPatternType {
8329    fn serialize_field(&self, buf: &mut BytesMut) {
8330        buf.put_u16(*self as u16);
8331    }
8332}
8333
8334impl FieldDeserialize for TransmitterAntennaPatternType {
8335    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8336        Self::deserialize(buf)
8337    }
8338}
8339
8340impl FieldLen for TransmitterAntennaPatternType {
8341    fn field_len(&self) -> usize {
8342        2
8343    }
8344}
8345
8346// SISO-REF-010-2023 TransmitterAntennaPatternReferenceSystem [UID 168]
8347#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8348pub enum TransmitterAntennaPatternReferenceSystem {
8349    #[default]
8350    WorldCoordinates = 1,
8351    EntityCoordinates = 2,
8352}
8353
8354impl TransmitterAntennaPatternReferenceSystem {
8355    #[must_use]
8356    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8357        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8358    }
8359}
8360
8361impl FieldSerialize for TransmitterAntennaPatternReferenceSystem {
8362    fn serialize_field(&self, buf: &mut BytesMut) {
8363        buf.put_u8(*self as u8);
8364    }
8365}
8366
8367impl FieldDeserialize for TransmitterAntennaPatternReferenceSystem {
8368    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8369        Self::deserialize(buf)
8370    }
8371}
8372
8373impl FieldLen for TransmitterAntennaPatternReferenceSystem {
8374    fn field_len(&self) -> usize {
8375        1
8376    }
8377}
8378
8379// SISO-REF-010-2023 CCTTSINCGARSStartofMessage [UID 170]
8380#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8381pub enum CCTTSINCGARSStartofMessage {
8382    #[default]
8383    Notstartofmessage = 0,
8384    StartofMessage = 1,
8385}
8386
8387impl CCTTSINCGARSStartofMessage {
8388    #[must_use]
8389    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8390        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8391    }
8392}
8393
8394// SISO-REF-010-2023 CCTTSINCGARSClearChannel [UID 171]
8395#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8396pub enum CCTTSINCGARSClearChannel {
8397    #[default]
8398    Notclearchannel = 0,
8399    Clearchannel = 1,
8400}
8401
8402impl CCTTSINCGARSClearChannel {
8403    #[must_use]
8404    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8405        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8406    }
8407}
8408
8409// SISO-REF-010-2023 TimeSlotAllocationLevel [UID 172]
8410#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8411pub enum TimeSlotAllocationLevel {
8412    #[default]
8413    LowFidelityLevel0 = 0,
8414    LowFidelityLevel1 = 1,
8415    MediumFidelityLevel2 = 2,
8416    MediumFidelityLevel3 = 3,
8417    HighFidelityLevel4 = 4,
8418}
8419
8420impl TimeSlotAllocationLevel {
8421    #[must_use]
8422    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8423        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8424    }
8425}
8426
8427// SISO-REF-010-2023 JTIDSMIDSModulationParametersTransmittingTerminalPrimaryMode [UID 173]
8428#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8429pub enum JTIDSMIDSModulationParametersTransmittingTerminalPrimaryMode {
8430    #[default]
8431    NTR = 1,
8432    JTIDSUnitParticipant = 2,
8433}
8434
8435impl JTIDSMIDSModulationParametersTransmittingTerminalPrimaryMode {
8436    #[must_use]
8437    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8438        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8439    }
8440}
8441
8442// SISO-REF-010-2023 JTIDSMIDSModulationParametersTransmittingTerminalSecondaryMode [UID 174]
8443#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8444pub enum JTIDSMIDSModulationParametersTransmittingTerminalSecondaryMode {
8445    #[default]
8446    None = 0,
8447    NetPositionReference = 1,
8448    PrimaryNavigationController = 2,
8449    SecondaryNavigationController = 3,
8450}
8451
8452impl JTIDSMIDSModulationParametersTransmittingTerminalSecondaryMode {
8453    #[must_use]
8454    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8455        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8456    }
8457}
8458
8459// SISO-REF-010-2023 JTIDSMIDSModulationParametersSynchronizationState [UID 175]
8460#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8461pub enum JTIDSMIDSModulationParametersSynchronizationState {
8462    #[default]
8463    NoStatement = 0,
8464    InitialNetEntry = 1,
8465    CoarseSynchronization = 2,
8466    FineSynchronization = 3,
8467    SynchronizationMaintenance = 4,
8468}
8469
8470impl JTIDSMIDSModulationParametersSynchronizationState {
8471    #[must_use]
8472    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8473        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8474    }
8475}
8476
8477// SISO-REF-010-2023 MessageTypeIdentifier [UID 176]
8478#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8479pub enum MessageTypeIdentifier {
8480    #[default]
8481    JTIDSHeaderMessages = 0,
8482    RTTAB = 1,
8483    RTTReply = 2,
8484    JTIDSVoiceCVSD = 3,
8485    JTIDSVoiceLPC10 = 4,
8486    JTIDSVoiceLPC12 = 5,
8487    JTIDSLET = 6,
8488    VMF = 7,
8489}
8490
8491impl MessageTypeIdentifier {
8492    #[must_use]
8493    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8494        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8495    }
8496}
8497
8498// SISO-REF-010-2023 SignalUserProtocolIdentificationNumber [UID 177]
8499#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8500pub enum SignalUserProtocolIdentificationNumber {
8501    #[default]
8502    CCSIL = 1,
8503    A2ATDSINCGARSERF = 5,
8504    A2ATDCAC2 = 6,
8505    BattleCommand = 20,
8506    AFIWCIADSTrackReport = 30,
8507    AFIWCIADSCommC2Message = 31,
8508    AFIWCIADSGroundControlInterceptorCommand = 32,
8509    AFIWCVoiceTextMessage = 35,
8510    ModSAFTextRadio = 177,
8511    CCTTSINCGARSERFLOCKOUT = 200,
8512    CCTTSINCGARSERFHOPSET = 201,
8513    CCTTSINCGARSOTAR = 202,
8514    CCTTSINCGARSDATA = 203,
8515    ModSAFFWAForwardAirController = 546,
8516    ModSAFThreatADAC3 = 832,
8517    F16MTCAFAPDProtocol = 1000,
8518    F16MTCIDLProtocol = 1100,
8519    AutomaticIdentificationSystem = 1371,
8520    ModSAFArtilleryFireControl = 4570,
8521    AGTS = 5361,
8522    GC3 = 6000,
8523    WNCPdata = 6010,
8524    Spokentextmessage = 6020,
8525    LongbowIDMmessage = 6661,
8526    ComancheIDMmessage = 6662,
8527    LongbowAirborneTACFIREMessage = 6663,
8528    LongbowGroundTACFIREMessage = 6664,
8529    LongbowAFAPDMessage = 6665,
8530    LongbowERFmessage = 6666,
8531    VMFIDM = 7000,
8532    CSARRadioSurvivorMessage = 7010,
8533    CSARRadioInterrogatorMessage = 7020,
8534    ImageFileTransferMessage = 7030,
8535    GeotagDataMessage = 7040,
8536    TacticalVideoRegenerationData = 7050,
8537}
8538
8539impl SignalUserProtocolIdentificationNumber {
8540    #[must_use]
8541    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8542        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
8543    }
8544}
8545
8546// SISO-REF-010-2023 SignalTDLType [UID 178]
8547#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8548pub enum SignalTDLType {
8549    #[default]
8550    Other = 0,
8551    PADIL = 1,
8552    NATOLink1 = 2,
8553    ATDL1 = 3,
8554    Link11B = 4,
8555    SituationalAwarenessDataLink = 5,
8556    Link16LegacyFormatJTIDSTADILJ = 6,
8557    Link16LegacyFormatJTIDSFDLTADILJ = 7,
8558    Link11 = 8,
8559    IJMS = 9,
8560    Link4A = 10,
8561    Link4C = 11,
8562    TIBS = 12,
8563    ATL = 13,
8564    ConstantSource = 14,
8565    AbbreviatedCommandandControl = 15,
8566    MILSTAR = 16,
8567    ATHS = 17,
8568    OTHGOLD = 18,
8569    TACELINT = 19,
8570    WeaponsDataLink = 20,
8571    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
8572    AbbreviatedCommandandControl_ = 21,
8573    EnhancedPositionLocationReportingSystem = 22,
8574    PositionLocationReportingSystem = 23,
8575    SINCGARS = 24,
8576    HAVEQUICKI = 25,
8577    HAVEQUICKII = 26,
8578    SATURN = 27,
8579    IntraFlightDataLink1 = 28,
8580    IntraFlightDataLink2 = 29,
8581    ImprovedDataModem = 30,
8582    AirForceApplicationProgramDevelopment = 31,
8583    CooperativeEngagementCapability = 32,
8584    ForwardAreaAirDefense = 33,
8585    GroundBasedDataLink = 34,
8586    IntraVehicularInfoSystem = 35,
8587    MarineTacticalSystem = 36,
8588    TacticalFireDirectionSystem = 37,
8589    IntegratedBroadcastService = 38,
8590    AirborneInformationTransfer = 39,
8591    AdvancedTacticalAirborneReconnaissanceSystemDataLink = 40,
8592    BattleGroupPassiveHorizonExtensionSystemDataLink = 41,
8593    CommonHighBandwidthDataLink = 42,
8594    GuardrailInteroperableDataLink = 43,
8595    GuardrailCommonSensorSystemOneDataLink = 44,
8596    GuardrailCommonSensorSystemTwoDataLink = 45,
8597    GuardrailCSS2MultiRoleDataLink = 46,
8598    GuardrailCSS2DirectAirtoSatelliteRelayDataLink = 47,
8599    LineofSight = 48,
8600    LightweightCDL = 49,
8601    L52M = 50,
8602    RivetReachRivetOwlDataLink = 51,
8603    SeniorSpan = 52,
8604    SeniorSpur = 53,
8605    SeniorStretch_ = 54,
8606    SeniorYearInteroperableDataLink = 55,
8607    SpaceCDL = 56,
8608    TR1modeMISTAirborneDataLink = 57,
8609    KubandSATCOMDataLinkImplementation = 58,
8610    MissionEquipmentControlDatalink = 59,
8611    RadarDataTransmittingSetDataLink = 60,
8612    SurveillanceandControlDataLink = 61,
8613    TacticalUAVVideo = 62,
8614    UHFSATCOMDataLinkImplementation = 63,
8615    TacticalCommonDataLink = 64,
8616    LowLevelAirPictureInterface = 65,
8617    WeaponsDataLinkAGM130 = 66,
8618    AutomaticIdentificationSystemAIS = 67,
8619    WeaponsDataLinkAIM120 = 68,
8620    WeaponsDataLinkAIM9 = 69,
8621    WeaponsDataLinkCAMM = 70,
8622    GC3 = 99,
8623    Link16StandardizedFormat = 100,
8624    Link16EnhancedDataRate = 101,
8625    JTIDSMIDSNetDataLoad = 102,
8626    Link22 = 103,
8627    AFIWCIADSCommunicationsLinks = 104,
8628    F22IntraFlightDataLink = 105,
8629    LBandSATCOM = 106,
8630    TSAFCommunicationsLink = 107,
8631    EnhancedSINCGARS7_3 = 108,
8632    F35MultifunctionAdvancedDataLink = 109,
8633    CursoronTarget = 110,
8634    AllPurposeStructuredEurocontrolSurveillanceInformationExchange = 111,
8635    VariableMessageFormat = 112,
8636    Link16SurrogateforNonNATOTDL = 113,
8637    MQ19CBandLOSUplink = 114,
8638    MQ19CBandLOSDownlink = 115,
8639    MQ19KuBandSATCOMUplink = 116,
8640    MQ19KuBandSATCOMDownlink = 117,
8641    WeaponsDatalinkSDBII = 118,
8642    JTACSAUplink = 119,
8643    CommonInteractiveBroadcast = 120,
8644    JointRangeExtensionApplicationProtocolA = 121,
8645    JPALSDataLink = 125,
8646    OneSAFIADSCommunicationsLink = 126,
8647    TacticalTargetingNetworkTechnologyApplication = 127,
8648}
8649
8650impl SignalTDLType {
8651    #[must_use]
8652    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8653        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8654    }
8655}
8656
8657impl FieldSerialize for SignalTDLType {
8658    fn serialize_field(&self, buf: &mut BytesMut) {
8659        buf.put_u16(*self as u16);
8660    }
8661}
8662
8663impl FieldDeserialize for SignalTDLType {
8664    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8665        Self::deserialize(buf)
8666    }
8667}
8668
8669impl FieldLen for SignalTDLType {
8670    fn field_len(&self) -> usize {
8671        2
8672    }
8673}
8674
8675// SISO-REF-010-2023 ReceiverReceiverState [UID 179]
8676#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8677pub enum ReceiverReceiverState {
8678    #[default]
8679    Off = 0,
8680    Onbutnotreceiving = 1,
8681    Onandreceiving = 2,
8682}
8683
8684impl ReceiverReceiverState {
8685    #[must_use]
8686    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8687        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8688    }
8689}
8690
8691impl FieldSerialize for ReceiverReceiverState {
8692    fn serialize_field(&self, buf: &mut BytesMut) {
8693        buf.put_u16(*self as u16);
8694    }
8695}
8696
8697impl FieldDeserialize for ReceiverReceiverState {
8698    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8699        Self::deserialize(buf)
8700    }
8701}
8702
8703impl FieldLen for ReceiverReceiverState {
8704    fn field_len(&self) -> usize {
8705        2
8706    }
8707}
8708
8709// SISO-REF-010-2023 IntercomControlControlType [UID 180]
8710#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8711pub enum IntercomControlControlType {
8712    #[default]
8713    Reserved = 0,
8714    Status = 1,
8715    RequestAcknowledgeRequired = 2,
8716    RequestNoAcknowledge = 3,
8717    AckRequestGranted = 4,
8718    NackRequestDenied = 5,
8719}
8720
8721impl IntercomControlControlType {
8722    #[must_use]
8723    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8724        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8725    }
8726}
8727
8728impl FieldSerialize for IntercomControlControlType {
8729    fn serialize_field(&self, buf: &mut BytesMut) {
8730        buf.put_u8(*self as u8);
8731    }
8732}
8733
8734impl FieldDeserialize for IntercomControlControlType {
8735    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8736        Self::deserialize(buf)
8737    }
8738}
8739
8740impl FieldLen for IntercomControlControlType {
8741    fn field_len(&self) -> usize {
8742        1
8743    }
8744}
8745
8746// SISO-REF-010-2023 IntercomControlCommunicationsType [UID 181]
8747#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8748pub enum IntercomControlCommunicationsType {
8749    #[default]
8750    Reserved = 0,
8751    ConnectionFDX = 1,
8752    ConnectionHDXDestinationisReceiveOnly = 2,
8753    ConnectionHDXDestinationisTransmitOnly = 3,
8754    ConnectionHDX = 4,
8755}
8756
8757impl IntercomControlCommunicationsType {
8758    #[must_use]
8759    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8760        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8761    }
8762}
8763
8764// SISO-REF-010-2023 IntercomControlCommand [UID 182]
8765#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8766pub enum IntercomControlCommand {
8767    #[default]
8768    NoCommand = 0,
8769    Status = 1,
8770    Connect = 2,
8771    Disconnect = 3,
8772    Reset = 4,
8773    On = 5,
8774    Off = 6,
8775}
8776
8777impl IntercomControlCommand {
8778    #[must_use]
8779    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8780        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8781    }
8782}
8783
8784impl FieldSerialize for IntercomControlCommand {
8785    fn serialize_field(&self, buf: &mut BytesMut) {
8786        buf.put_u8(*self as u8);
8787    }
8788}
8789
8790impl FieldDeserialize for IntercomControlCommand {
8791    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8792        Self::deserialize(buf)
8793    }
8794}
8795
8796impl FieldLen for IntercomControlCommand {
8797    fn field_len(&self) -> usize {
8798        1
8799    }
8800}
8801
8802// SISO-REF-010-2023 IntercomControlTransmitLineState [UID 183]
8803#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8804pub enum IntercomControlTransmitLineState {
8805    #[default]
8806    TransmitLineStatenotapplicable = 0,
8807    NotTransmitting = 1,
8808    Transmitting = 2,
8809}
8810
8811impl IntercomControlTransmitLineState {
8812    #[must_use]
8813    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8814        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8815    }
8816}
8817
8818impl FieldSerialize for IntercomControlTransmitLineState {
8819    fn serialize_field(&self, buf: &mut BytesMut) {
8820        buf.put_u8(*self as u8);
8821    }
8822}
8823
8824impl FieldDeserialize for IntercomControlTransmitLineState {
8825    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8826        Self::deserialize(buf)
8827    }
8828}
8829
8830impl FieldLen for IntercomControlTransmitLineState {
8831    fn field_len(&self) -> usize {
8832        1
8833    }
8834}
8835
8836// SISO-REF-010-2023 IntercomControlDestinationLineStateCommand [UID 184]
8837#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8838pub enum IntercomControlDestinationLineStateCommand {
8839    #[default]
8840    None = 0,
8841    SetLineStateTransmitting = 1,
8842    SetLineStateNotTransmitting = 2,
8843    ReturntoLocalLineStateControl = 3,
8844}
8845
8846impl IntercomControlDestinationLineStateCommand {
8847    #[must_use]
8848    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8849        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8850    }
8851}
8852
8853// SISO-REF-010-2023 IntercomControlRecordType [UID 185]
8854#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8855pub enum IntercomControlRecordType {
8856    #[default]
8857    SpecificDestinationrecord = 1,
8858    GroupDestinationrecord = 2,
8859    GroupAssignmentrecord = 3,
8860}
8861
8862impl IntercomControlRecordType {
8863    #[must_use]
8864    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8865        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8866    }
8867}
8868
8869// SISO-REF-010-2023 CollisionType [UID 189]
8870#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8871pub enum CollisionType {
8872    #[default]
8873    Inelastic = 0,
8874    Elastic = 1,
8875    BoomNozzleHasClearedTheReceiversRefuelingReceptacle = 55,
8876}
8877
8878impl CollisionType {
8879    #[must_use]
8880    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8881        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8882    }
8883}
8884
8885// SISO-REF-010-2023 MinefieldSensorTypes [UID 193]
8886#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8887pub enum MinefieldSensorTypes {
8888    #[default]
8889    Other = 0,
8890    Optical = 1,
8891    FLIR = 2,
8892    RADAR = 3,
8893    Magnetic = 4,
8894    Laser = 5,
8895    SONAR = 6,
8896    Physical = 7,
8897    Multispectral = 8,
8898}
8899
8900impl MinefieldSensorTypes {
8901    #[must_use]
8902    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8903        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
8904    }
8905}
8906
8907impl FieldSerialize for MinefieldSensorTypes {
8908    fn serialize_field(&self, buf: &mut BytesMut) {
8909        buf.put_u8(*self as u8);
8910    }
8911}
8912
8913impl FieldDeserialize for MinefieldSensorTypes {
8914    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
8915        Self::deserialize(buf)
8916    }
8917}
8918
8919impl FieldLen for MinefieldSensorTypes {
8920    fn field_len(&self) -> usize {
8921        1
8922    }
8923}
8924
8925// SISO-REF-010-2023 MinefieldSensorTypesOptical [UID 194]
8926#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8927pub enum MinefieldSensorTypesOptical {
8928    #[default]
8929    UnaidedEyeActivelySearching = 0,
8930    UnaidedEyeNotActivelySearching = 1,
8931    Binoculars = 2,
8932    ImageIntensifier = 3,
8933    HMMWVoccupantActivelySearching = 4,
8934    HMMWVoccupantNotActivelySearching = 5,
8935    TruckoccupantActivelySearching = 6,
8936    TruckoccupantNotActivelySearching = 7,
8937    TrackedvehicleoccupantclosedhatchActivelySearching = 8,
8938    TrackedvehicleoccupantclosedhatchNotActivelySearching = 9,
8939    TrackedvehicleoccupantopenhatchActivelySearching = 10,
8940    TrackedvehicleoccupantopenhatchNotActivelySearching = 11,
8941}
8942
8943impl MinefieldSensorTypesOptical {
8944    #[must_use]
8945    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8946        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8947    }
8948}
8949
8950// SISO-REF-010-2023 MinefieldSensorTypesFLIR [UID 195]
8951#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8952pub enum MinefieldSensorTypesFLIR {
8953    #[default]
8954    Generic35 = 0,
8955    Generic812 = 1,
8956    ASTAMIDSI = 2,
8957    ASTAMIDSII = 3,
8958    GSTAMIDS35 = 4,
8959    GSTAMIDS812 = 5,
8960    HSTAMIDS35 = 6,
8961    HSTAMIDS812 = 7,
8962    COBRA35 = 8,
8963    COBRA812 = 9,
8964}
8965
8966impl MinefieldSensorTypesFLIR {
8967    #[must_use]
8968    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8969        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8970    }
8971}
8972
8973// SISO-REF-010-2023 MinefieldSensorTypesRADAR [UID 196]
8974#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8975pub enum MinefieldSensorTypesRADAR {
8976    #[default]
8977    Generic = 0,
8978    GenericGPR = 1,
8979    GSTAMIDSI = 2,
8980    GSTAMIDSII = 3,
8981    HSTAMIDSI = 4,
8982    HSTAMIDSII = 5,
8983}
8984
8985impl MinefieldSensorTypesRADAR {
8986    #[must_use]
8987    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
8988        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
8989    }
8990}
8991
8992// SISO-REF-010-2023 MinefieldSensorTypesMagnetic [UID 197]
8993#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
8994pub enum MinefieldSensorTypesMagnetic {
8995    #[default]
8996    Generic = 0,
8997    ANPSS11 = 1,
8998    ANPSS12 = 2,
8999    GSTAMIDS = 3,
9000}
9001
9002impl MinefieldSensorTypesMagnetic {
9003    #[must_use]
9004    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9005        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9006    }
9007}
9008
9009// SISO-REF-010-2023 MinefieldSensorTypesLaser [UID 198]
9010#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9011pub enum MinefieldSensorTypesLaser {
9012    #[default]
9013    Generic = 0,
9014    ASTAMIDS = 1,
9015}
9016
9017impl MinefieldSensorTypesLaser {
9018    #[must_use]
9019    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9020        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9021    }
9022}
9023
9024// SISO-REF-010-2023 MinefieldSensorTypesSONAR [UID 199]
9025#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9026pub enum MinefieldSensorTypesSONAR {
9027    #[default]
9028    Generic = 0,
9029}
9030
9031impl MinefieldSensorTypesSONAR {
9032    #[must_use]
9033    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9034        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9035    }
9036}
9037
9038// SISO-REF-010-2023 MinefieldSensorTypesPhysical [UID 200]
9039#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9040pub enum MinefieldSensorTypesPhysical {
9041    #[default]
9042    GenericProbe = 0,
9043    ProbeMetalContent = 1,
9044    ProbeNoMetalContent = 2,
9045}
9046
9047impl MinefieldSensorTypesPhysical {
9048    #[must_use]
9049    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9050        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9051    }
9052}
9053
9054// SISO-REF-010-2023 MinefieldSensorTypesMultispectral [UID 201]
9055#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9056pub enum MinefieldSensorTypesMultispectral {
9057    #[default]
9058    Generic = 0,
9059}
9060
9061impl MinefieldSensorTypesMultispectral {
9062    #[must_use]
9063    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9064        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9065    }
9066}
9067
9068// SISO-REF-010-2023 AggregateStateAggregateState [UID 204]
9069#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9070pub enum AggregateStateAggregateState {
9071    #[default]
9072    Other = 0,
9073    Aggregated = 1,
9074    Disaggregated = 2,
9075    Fullydisaggregated = 3,
9076    Pseudodisaggregated = 4,
9077    Partiallydisaggregated = 5,
9078}
9079
9080impl AggregateStateAggregateState {
9081    #[must_use]
9082    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9083        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9084    }
9085}
9086
9087impl FieldSerialize for AggregateStateAggregateState {
9088    fn serialize_field(&self, buf: &mut BytesMut) {
9089        buf.put_u8(*self as u8);
9090    }
9091}
9092
9093impl FieldDeserialize for AggregateStateAggregateState {
9094    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9095        Self::deserialize(buf)
9096    }
9097}
9098
9099impl FieldLen for AggregateStateAggregateState {
9100    fn field_len(&self) -> usize {
9101        1
9102    }
9103}
9104
9105// SISO-REF-010-2023 AggregateStateFormation [UID 205]
9106#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9107pub enum AggregateStateFormation {
9108    #[default]
9109    Other = 0,
9110    Assembly = 1,
9111    Vee = 2,
9112    Wedge = 3,
9113    Line = 4,
9114    Column = 5,
9115}
9116
9117impl AggregateStateFormation {
9118    #[must_use]
9119    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9120        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
9121    }
9122}
9123
9124impl FieldSerialize for AggregateStateFormation {
9125    fn serialize_field(&self, buf: &mut BytesMut) {
9126        buf.put_u32(*self as u32);
9127    }
9128}
9129
9130impl FieldDeserialize for AggregateStateFormation {
9131    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9132        Self::deserialize(buf)
9133    }
9134}
9135
9136impl FieldLen for AggregateStateFormation {
9137    fn field_len(&self) -> usize {
9138        4
9139    }
9140}
9141
9142// SISO-REF-010-2023 AggregateStateAggregateKind [UID 206]
9143#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9144pub enum AggregateStateAggregateKind {
9145    #[default]
9146    Other = 0,
9147    MilitaryHierarchy = 1,
9148    CommonType = 2,
9149    CommonMission = 3,
9150    SimilarCapabilities = 4,
9151    CommonLocation = 5,
9152}
9153
9154impl AggregateStateAggregateKind {
9155    #[must_use]
9156    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9157        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9158    }
9159}
9160
9161// SISO-REF-010-2023 AggregateStateSubcategory [UID 208]
9162#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9163pub enum AggregateStateSubcategory {
9164    #[default]
9165    Other = 0,
9166    CavalryTroop = 1,
9167    Armor = 2,
9168    Infantry = 3,
9169    MechanizedInfantry = 4,
9170    Cavalry = 5,
9171    ArmoredCavalry = 6,
9172    Artillery = 7,
9173    SelfPropelledArtillery = 8,
9174    CloseAirSupport = 9,
9175    Engineer = 10,
9176    AirDefenseArtillery = 11,
9177    AntiTank = 12,
9178    ArmyAviationFixedwing = 13,
9179    ArmyAviationRotarywing = 14,
9180    ArmyAttackHelicopter = 15,
9181    AirCavalry = 16,
9182    ArmorHeavyTaskForce = 17,
9183    MotorizedRifle = 18,
9184    MechanizedHeavyTaskForce = 19,
9185    CommandPost = 20,
9186    CEWI = 21,
9187    Tankonly = 22,
9188}
9189
9190impl AggregateStateSubcategory {
9191    #[must_use]
9192    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9193        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9194    }
9195}
9196
9197// SISO-REF-010-2023 AggregateStateSpecific [UID 209]
9198#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9199pub enum AggregateStateSpecific {
9200    #[default]
9201    Noheadquarters = 0,
9202    Yesaggregateunitcontainsaheadquarters = 1,
9203}
9204
9205impl AggregateStateSpecific {
9206    #[must_use]
9207    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9208        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9209    }
9210}
9211
9212// SISO-REF-010-2023 IsPartOfNature [UID 210]
9213#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9214pub enum IsPartOfNature {
9215    #[default]
9216    Other = 0,
9217    Hostfireablemunition = 1,
9218    Munitioncarriedascargo = 2,
9219    Fuelcarriedascargo = 3,
9220    Gunmountattachedtohost = 4,
9221    Computergeneratedforcescarriedascargo = 5,
9222    Vehiclecarriedascargo = 6,
9223    Emittermountedonhost = 7,
9224    Mobilecommandandcontrolentitycarriedaboardhost = 8,
9225    Entitystationedatpositionwithrespecttohost = 9,
9226    Teammemberinformationwith = 10,
9227}
9228
9229impl IsPartOfNature {
9230    #[must_use]
9231    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9232        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9233    }
9234}
9235
9236// SISO-REF-010-2023 IsPartOfPosition [UID 211]
9237#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9238pub enum IsPartOfPosition {
9239    #[default]
9240    Other = 0,
9241    Ontopof = 1,
9242    Insideof = 2,
9243}
9244
9245impl IsPartOfPosition {
9246    #[must_use]
9247    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9248        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9249    }
9250}
9251
9252// SISO-REF-010-2023 IsPartOfStationName [UID 212]
9253#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9254pub enum IsPartOfStationName {
9255    #[default]
9256    Other = 0,
9257    AircraftWingstation = 1,
9258    ShipsForwardGunmountStarboard = 2,
9259    ShipsForwardGunmountPort = 3,
9260    ShipsForwardGunmountCenterline = 4,
9261    ShipsAftGunmountStarboard = 5,
9262    ShipsAftGunmountPort = 6,
9263    ShipsAftGunmountCenterline = 7,
9264    ForwardTorpedoTube = 8,
9265    AftTorpedoTube = 9,
9266    BombBay = 10,
9267    CargoBay = 11,
9268    TruckBed = 12,
9269    TrailerBed = 13,
9270    WellDeck = 14,
9271    OnStationRangeandBearing = 15,
9272    OnStationxyz = 16,
9273    AirtoAirRefuelingBoom = 17,
9274    AerialRefuelingReceptacle = 18,
9275    PortSideRefuelingDrogue = 19,
9276    StarboardSideRefuelingDrogue = 20,
9277    CenterRefuelingDrogue = 21,
9278    AirRefuelingProbe = 22,
9279}
9280
9281impl IsPartOfStationName {
9282    #[must_use]
9283    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9284        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9285    }
9286}
9287
9288// SISO-REF-010-2023 IsGroupOfGroupedEntityCategory [UID 213]
9289#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9290pub enum IsGroupOfGroupedEntityCategory {
9291    #[default]
9292    Undefined = 0,
9293    BasicGroundCombatVehicle = 1,
9294    EnhancedGroundCombatVehicle = 2,
9295    BasicGroundCombatSoldier = 3,
9296    EnhancedGroundCombatSoldier = 4,
9297    BasicRotorWingAircraft = 5,
9298    EnhancedRotorWingAircraft = 6,
9299    BasicFixedWingAircraft = 7,
9300    EnhancedFixedWingAircraft = 8,
9301    GroundLogisticsVehicle = 9,
9302}
9303
9304impl IsGroupOfGroupedEntityCategory {
9305    #[must_use]
9306    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9307        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9308    }
9309}
9310
9311impl FieldSerialize for IsGroupOfGroupedEntityCategory {
9312    fn serialize_field(&self, buf: &mut BytesMut) {
9313        buf.put_u8(*self as u8);
9314    }
9315}
9316
9317impl FieldDeserialize for IsGroupOfGroupedEntityCategory {
9318    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9319        Self::deserialize(buf)
9320    }
9321}
9322
9323impl FieldLen for IsGroupOfGroupedEntityCategory {
9324    fn field_len(&self) -> usize {
9325        1
9326    }
9327}
9328
9329// SISO-REF-010-2023 IsGroupOfRestStatus [UID 214]
9330#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9331pub enum IsGroupOfRestStatus {
9332    #[default]
9333    Notrested = 0,
9334    Hassleptanaverageof1hourperdayinthelastthreedays_ = 1,
9335    Hassleptanaverageof2hoursperdayinthelastthreedays_ = 2,
9336    Hassleptanaverageof3hoursperdayinthelastthreedays_ = 3,
9337    Hassleptanaverageof4hoursperdayinthelastthreedays_ = 4,
9338    Hassleptanaverageof5hoursperdayinthelastthreedays_ = 5,
9339    Hassleptanaverageof6hoursperdayinthelastthreedays_ = 6,
9340    Hassleptanaverageof7hoursperdayinthelastthreedays_ = 7,
9341    Fullyrested = 8,
9342}
9343
9344impl IsGroupOfRestStatus {
9345    #[must_use]
9346    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9347        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9348    }
9349}
9350
9351// SISO-REF-010-2023 TransferControlTransferType [UID 224]
9352#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9353pub enum TransferControlTransferType {
9354    #[default]
9355    Other = 0,
9356    PushTransferEntity = 1,
9357    AutomaticPullTransferEntity = 2,
9358    PushTransferEnvironmentalProcess = 4,
9359    AutomaticPullTransferEnvironmentalProcess = 5,
9360    CancelTransfer = 7,
9361    ManualPullTransferEntity = 8,
9362    ManualPullTransferEnvironmentalProcess = 9,
9363    RemoveEntity = 10,
9364}
9365
9366impl TransferControlTransferType {
9367    #[must_use]
9368    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9369        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9370    }
9371}
9372
9373impl FieldSerialize for TransferControlTransferType {
9374    fn serialize_field(&self, buf: &mut BytesMut) {
9375        buf.put_u8(*self as u8);
9376    }
9377}
9378
9379impl FieldDeserialize for TransferControlTransferType {
9380    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9381        Self::deserialize(buf)
9382    }
9383}
9384
9385impl FieldLen for TransferControlTransferType {
9386    fn field_len(&self) -> usize {
9387        1
9388    }
9389}
9390
9391// SISO-REF-010-2023 ObjectKind [UID 225]
9392#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9393pub enum ObjectKind {
9394    #[default]
9395    Other = 0,
9396    Obstacle = 1,
9397    PreparedPosition = 2,
9398    CulturalFeature = 3,
9399    Passageway = 4,
9400    TacticalSmoke = 5,
9401    ObstacleMarker = 6,
9402    ObstacleBreach = 7,
9403    EnvironmentalObject = 8,
9404}
9405
9406impl ObjectKind {
9407    #[must_use]
9408    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9409        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9410    }
9411}
9412
9413// SISO-REF-010-2023 ObjectStateAppearanceGeneral [UID 229]
9414bitflags! {
9415    #[derive(Copy, Clone, Debug, PartialEq, Eq)]
9416    pub struct ObjectStateAppearanceGeneral: u16 {
9417        const PercentComplete = 1 << 0;
9418        const Damage = 1 << 8;
9419        const Predistributed = 1 << 10;
9420        const State = 1 << 11;
9421        const IsSmoking = 1 << 12;
9422        const IsFlaming = 1 << 13;
9423        const IEDPresent = 1 << 14;
9424    }
9425}
9426
9427impl Default for ObjectStateAppearanceGeneral {
9428    fn default() -> Self {
9429        Self::empty()
9430    }
9431}
9432
9433impl ObjectStateAppearanceGeneral {
9434    #[must_use]
9435    pub const fn as_u16(&self) -> u16 {
9436        self.bits()
9437    }
9438
9439    #[must_use]
9440    pub const fn from_u16(bits: u16) -> Option<Self> {
9441        Self::from_bits(bits)
9442    }
9443}
9444
9445impl FieldSerialize for ObjectStateAppearanceGeneral {
9446    fn serialize_field(&self, buf: &mut BytesMut) {
9447        buf.put_u16(self.as_u16());
9448    }
9449}
9450
9451impl FieldDeserialize for ObjectStateAppearanceGeneral {
9452    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9453        let bits = buf.get_u16();
9454        Self::from_bits(bits).unwrap_or_default()
9455    }
9456}
9457
9458impl FieldLen for ObjectStateAppearanceGeneral {
9459    fn field_len(&self) -> usize {
9460        2
9461    }
9462}
9463
9464// SISO-REF-010-2023 GriddedDataFieldNumber [UID 243]
9465#[derive(Copy, Clone, Debug, FromPrimitive, PartialEq, Eq)]
9466pub enum GriddedDataFieldNumber {}
9467
9468impl GriddedDataFieldNumber {
9469    #[must_use]
9470    pub fn deserialize(_buf: &mut BytesMut) -> Self {
9471        unimplemented!()
9472    }
9473}
9474
9475// SISO-REF-010-2023 GriddedDataCoordinateSystem [UID 244]
9476#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9477pub enum GriddedDataCoordinateSystem {
9478    #[default]
9479    RightHandedCartesian = 0,
9480    LeftHandedCartesian = 1,
9481    LatitudeLongitudeHeight = 2,
9482    LatitudeLongitudeDepth = 3,
9483}
9484
9485impl GriddedDataCoordinateSystem {
9486    #[must_use]
9487    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9488        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9489    }
9490}
9491
9492impl FieldSerialize for GriddedDataCoordinateSystem {
9493    fn serialize_field(&self, buf: &mut BytesMut) {
9494        buf.put_u16(*self as u16);
9495    }
9496}
9497
9498impl FieldDeserialize for GriddedDataCoordinateSystem {
9499    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9500        Self::deserialize(buf)
9501    }
9502}
9503
9504impl FieldLen for GriddedDataCoordinateSystem {
9505    fn field_len(&self) -> usize {
9506        2
9507    }
9508}
9509
9510// SISO-REF-010-2023 GriddedDataConstantGrid [UID 245]
9511#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9512pub enum GriddedDataConstantGrid {
9513    #[default]
9514    Constantgrid = 0,
9515    Updatedgrid = 1,
9516}
9517
9518impl GriddedDataConstantGrid {
9519    #[must_use]
9520    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9521        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9522    }
9523}
9524
9525impl FieldSerialize for GriddedDataConstantGrid {
9526    fn serialize_field(&self, buf: &mut BytesMut) {
9527        buf.put_u8(*self as u8);
9528    }
9529}
9530
9531impl FieldDeserialize for GriddedDataConstantGrid {
9532    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9533        Self::deserialize(buf)
9534    }
9535}
9536
9537impl FieldLen for GriddedDataConstantGrid {
9538    fn field_len(&self) -> usize {
9539        1
9540    }
9541}
9542
9543// SISO-REF-010-2023 GriddedDataSampleType [UID 246]
9544#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9545pub enum GriddedDataSampleType {
9546    #[default]
9547    NotSpecified = 0,
9548}
9549
9550impl GriddedDataSampleType {
9551    #[must_use]
9552    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9553        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9554    }
9555}
9556
9557impl FieldSerialize for GriddedDataSampleType {
9558    fn serialize_field(&self, buf: &mut BytesMut) {
9559        buf.put_u8(*self as u8);
9560    }
9561}
9562
9563impl FieldDeserialize for GriddedDataSampleType {
9564    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9565        Self::deserialize(buf)
9566    }
9567}
9568
9569impl FieldLen for GriddedDataSampleType {
9570    fn field_len(&self) -> usize {
9571        1
9572    }
9573}
9574
9575// SISO-REF-010-2023 GriddedDataDataRepresentation [UID 247]
9576#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9577pub enum GriddedDataDataRepresentation {
9578    #[default]
9579    Type0 = 0,
9580    Type1 = 1,
9581    Type2 = 2,
9582}
9583
9584impl GriddedDataDataRepresentation {
9585    #[must_use]
9586    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9587        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9588    }
9589}
9590
9591impl FieldSerialize for GriddedDataDataRepresentation {
9592    fn serialize_field(&self, buf: &mut BytesMut) {
9593        buf.put_u8(*self as u8);
9594    }
9595}
9596
9597impl FieldDeserialize for GriddedDataDataRepresentation {
9598    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9599        Self::deserialize(buf)
9600    }
9601}
9602
9603impl FieldLen for GriddedDataDataRepresentation {
9604    fn field_len(&self) -> usize {
9605        1
9606    }
9607}
9608
9609// SISO-REF-010-2023 EnvironmentalProcessModelType [UID 248]
9610#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9611pub enum EnvironmentalProcessModelType {
9612    #[default]
9613    NoStatement = 0,
9614}
9615
9616impl EnvironmentalProcessModelType {
9617    #[must_use]
9618    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9619        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9620    }
9621}
9622
9623// SISO-REF-010-2023 EnvironmentalProcessRecordType [UID 250]
9624#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9625pub enum EnvironmentalProcessRecordType {
9626    #[default]
9627    COMBICState = 256,
9628    FlareState = 259,
9629    BoundingSphereRecord = 65536,
9630    UniformGeometryRecord = 327_680,
9631    PointRecord1 = 655_360,
9632    LineRecord1 = 786_432,
9633    SphereRecord1 = 851_968,
9634    EllipsoidRecord1 = 1_048_576,
9635    ConeRecord1 = 3_145_728,
9636    RectangularVolumeRecord1 = 5_242_880,
9637    RectangularVolumeRecord3 = 83_886_080,
9638    PointRecord2 = 167_772_160,
9639    LineRecord2 = 201_326_592,
9640    SphereRecord2 = 218_103_808,
9641    EllipsoidRecord2 = 268_435_456,
9642    ConeRecord2 = 805_306_368,
9643    RectangularVolumeRecord2 = 1_342_177_280,
9644    GaussianPlumeRecord = 1_610_612_736,
9645    GaussianPuffRecord = 1_879_048_192,
9646}
9647
9648impl EnvironmentalProcessRecordType {
9649    #[must_use]
9650    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9651        Self::from_u32(buf.get_u32()).unwrap_or_else(Self::default)
9652    }
9653}
9654
9655// SISO-REF-010-2023 SignalEncodingClass [UID 270]
9656#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9657pub enum SignalEncodingClass {
9658    #[default]
9659    Encodedaudio = 0,
9660    RawBinaryData = 1,
9661    ApplicationSpecificData = 2,
9662    Databaseindex = 3,
9663}
9664
9665impl SignalEncodingClass {
9666    #[must_use]
9667    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9668        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9669    }
9670}
9671
9672// SISO-REF-010-2023 SignalEncodingType [UID 271]
9673#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9674pub enum SignalEncodingType {
9675    #[default]
9676    _8bitmulaw = 1,
9677    CVSD = 2,
9678    ADPCM = 3,
9679    _16bitLinearPCM2sComplementBigEndian = 4,
9680    _8bitLinearPCMUnsigned = 5,
9681    #[deprecated(note = "Deprecated in SISO-REF-010-2023")]
9682    VQ = 6,
9683    GSMFullRate = 8,
9684    GSMHalfRate = 9,
9685    SpeexNarrowBand = 10,
9686    Opus = 11,
9687    LPC10 = 12,
9688    _16bitLinearPCM2sComplementLittleEndian = 100,
9689}
9690
9691impl SignalEncodingType {
9692    #[must_use]
9693    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9694        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9695    }
9696}
9697
9698// SISO-REF-010-2023 RepairGroups [UID 272]
9699#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9700pub enum RepairGroups {
9701    #[default]
9702    GeneralRepairCodes = 0,
9703    DriveTrain = 1,
9704    HullAirframeBody = 2,
9705    InterfacesWithEnvironment = 3,
9706    Weapons = 4,
9707    FuelSystems = 5,
9708    Electronics = 6,
9709    LifeSupportSystems = 7,
9710    HydraulicSystemsAndActuators = 8,
9711    AuxiliaryCraft = 9,
9712}
9713
9714impl RepairGroups {
9715    #[must_use]
9716    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9717        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9718    }
9719}
9720
9721impl FieldSerialize for RepairGroups {
9722    fn serialize_field(&self, buf: &mut BytesMut) {
9723        buf.put_u8(*self as u8);
9724    }
9725}
9726
9727impl FieldDeserialize for RepairGroups {
9728    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9729        Self::deserialize(buf)
9730    }
9731}
9732
9733impl FieldLen for RepairGroups {
9734    fn field_len(&self) -> usize {
9735        1
9736    }
9737}
9738
9739// SISO-REF-010-2023 EnvironmentRecordTypeGroups [UID 273]
9740#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9741pub enum EnvironmentRecordTypeGroups {
9742    #[default]
9743    State = 0,
9744    Geometry = 1,
9745}
9746
9747impl EnvironmentRecordTypeGroups {
9748    #[must_use]
9749    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9750        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9751    }
9752}
9753
9754// SISO-REF-010-2023 PlatformAirCivilianUltralightNonrigidWingAircraftSubcategories [UID 274]
9755#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9756pub enum PlatformAirCivilianUltralightNonrigidWingAircraftSubcategories {
9757    #[default]
9758    HangGliderUnpowered = 1,
9759    HangGliderPowered = 2,
9760    ParagliderUnpowered = 3,
9761    ParagliderPowered = 4,
9762    PoweredParachute = 5,
9763}
9764
9765impl PlatformAirCivilianUltralightNonrigidWingAircraftSubcategories {
9766    #[must_use]
9767    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9768        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9769    }
9770}
9771
9772// SISO-REF-010-2023 PlatformAirCivilianUltralightRigidWingAircraftSubcategories [UID 275]
9773#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9774pub enum PlatformAirCivilianUltralightRigidWingAircraftSubcategories {
9775    #[default]
9776    Weightshiftcontrol = 1,
9777    Controlsurfacecontrol = 2,
9778}
9779
9780impl PlatformAirCivilianUltralightRigidWingAircraftSubcategories {
9781    #[must_use]
9782    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9783        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9784    }
9785}
9786
9787// SISO-REF-010-2023 PlatformAirCivilianGliderSubcategories [UID 276]
9788#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9789pub enum PlatformAirCivilianGliderSubcategories {
9790    #[default]
9791    SailPlane = 1,
9792    MotorGlider = 2,
9793}
9794
9795impl PlatformAirCivilianGliderSubcategories {
9796    #[must_use]
9797    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9798        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9799    }
9800}
9801
9802// SISO-REF-010-2023 PlatformAirCivilianFixedWingAircraftSubcategories [UID 277]
9803#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9804pub enum PlatformAirCivilianFixedWingAircraftSubcategories {
9805    #[default]
9806    SinglePistonEngine = 11,
9807    TwinPistonEngine = 12,
9808    SingleEngineTurboprop = 21,
9809    TwinEngineTurboprop = 22,
9810    FourEngineTurboprop = 24,
9811    TwinJet = 32,
9812    TriJet = 33,
9813    FourEngineJet = 34,
9814}
9815
9816impl PlatformAirCivilianFixedWingAircraftSubcategories {
9817    #[must_use]
9818    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9819        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9820    }
9821}
9822
9823// SISO-REF-010-2023 PlatformAirCivilianHelicopterSubcategories [UID 278]
9824#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9825pub enum PlatformAirCivilianHelicopterSubcategories {
9826    #[default]
9827    SingleRotorPistonEngine = 11,
9828    SingleRotorTurboshaftEngineConventionalTailRotor = 12,
9829    SingleRotorTurboshaftEngineShroudedTailRotor = 13,
9830    SingleRotorTurboshaftEngineNoTailRotor = 14,
9831    TandemRotor = 21,
9832    CoaxialRotor = 22,
9833    IntermeshingRotor = 23,
9834}
9835
9836impl PlatformAirCivilianHelicopterSubcategories {
9837    #[must_use]
9838    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9839        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9840    }
9841}
9842
9843// SISO-REF-010-2023 PlatformAirCivilianLighterthanAirBalloonSubcategories [UID 279]
9844#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9845pub enum PlatformAirCivilianLighterthanAirBalloonSubcategories {
9846    #[default]
9847    Gasfilledfree = 1,
9848    Gasfilledtethered = 2,
9849    HotAir = 3,
9850    RoziereBalloon = 4,
9851    Helikite = 5,
9852}
9853
9854impl PlatformAirCivilianLighterthanAirBalloonSubcategories {
9855    #[must_use]
9856    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9857        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9858    }
9859}
9860
9861// SISO-REF-010-2023 PlatformAirCivilianLighterthanAirAirshipSubcategories [UID 280]
9862#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9863pub enum PlatformAirCivilianLighterthanAirAirshipSubcategories {
9864    #[default]
9865    Nonrigid = 1,
9866    Semirigid = 2,
9867    Rigid = 3,
9868    Hybrid = 4,
9869}
9870
9871impl PlatformAirCivilianLighterthanAirAirshipSubcategories {
9872    #[must_use]
9873    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9874        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9875    }
9876}
9877
9878// SISO-REF-010-2023 APAParameterIndexAPAStatus [UID 281]
9879#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9880pub enum APAParameterIndexAPAStatus {
9881    #[default]
9882    DeselectedOff = 0,
9883    APAValueChangeOnly = 1,
9884    StateChange = 2,
9885    RecordActivation = 3,
9886}
9887
9888impl APAParameterIndexAPAStatus {
9889    #[must_use]
9890    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9891        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9892    }
9893}
9894
9895// SISO-REF-010-2023 SeparationVPReasonforSeparation [UID 282]
9896#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9897pub enum SeparationVPReasonforSeparation {
9898    #[default]
9899    NoStatement = 0,
9900    AttachedPartSeparation = 1,
9901    SubmunitionSeparation = 2,
9902}
9903
9904impl SeparationVPReasonforSeparation {
9905    #[must_use]
9906    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9907        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9908    }
9909}
9910
9911// SISO-REF-010-2023 SeparationVPPreEntityIndicator [UID 283]
9912#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9913pub enum SeparationVPPreEntityIndicator {
9914    #[default]
9915    NoStatement = 0,
9916    EntityIDExistedPriortoSeparationwithoutEntityStatePDU = 1,
9917    EntityIDExistedPriortoSeparationwithEntityStatePDUIssued = 2,
9918    EntityInitiallyCreatedAtSeparationEvent = 3,
9919}
9920
9921impl SeparationVPPreEntityIndicator {
9922    #[must_use]
9923    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9924        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
9925    }
9926}
9927
9928// SISO-REF-010-2023 IOActionIOWarfareType [UID 285]
9929#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9930pub enum IOActionIOWarfareType {
9931    #[default]
9932    NoStatement = 0,
9933    ElectronicWarfare = 1,
9934    ComputerNetworkOperations = 2,
9935    PsychologicalOperations = 3,
9936    MilitaryDeception = 4,
9937    OperationsSecurity = 5,
9938    PhysicalAttack = 6,
9939}
9940
9941impl IOActionIOWarfareType {
9942    #[must_use]
9943    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9944        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9945    }
9946}
9947
9948impl FieldSerialize for IOActionIOWarfareType {
9949    fn serialize_field(&self, buf: &mut BytesMut) {
9950        buf.put_u16(*self as u16);
9951    }
9952}
9953
9954impl FieldDeserialize for IOActionIOWarfareType {
9955    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9956        Self::deserialize(buf)
9957    }
9958}
9959
9960impl FieldLen for IOActionIOWarfareType {
9961    fn field_len(&self) -> usize {
9962        2
9963    }
9964}
9965
9966// SISO-REF-010-2023 IOActionIOSimulationSource [UID 286]
9967#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
9968pub enum IOActionIOSimulationSource {
9969    #[default]
9970    NoStatement = 0,
9971}
9972
9973impl IOActionIOSimulationSource {
9974    #[must_use]
9975    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
9976        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
9977    }
9978}
9979
9980impl FieldSerialize for IOActionIOSimulationSource {
9981    fn serialize_field(&self, buf: &mut BytesMut) {
9982        buf.put_u16(*self as u16);
9983    }
9984}
9985
9986impl FieldDeserialize for IOActionIOSimulationSource {
9987    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
9988        Self::deserialize(buf)
9989    }
9990}
9991
9992impl FieldLen for IOActionIOSimulationSource {
9993    fn field_len(&self) -> usize {
9994        2
9995    }
9996}
9997
9998// SISO-REF-010-2023 IOActionIOActionType [UID 287]
9999#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10000pub enum IOActionIOActionType {
10001    #[default]
10002    NoStatement = 0,
10003    IOAttackProfileData = 1,
10004    IOAttackComputedEffects = 2,
10005    IntentBasedEW = 3,
10006    IntentBasedEWComputedEffects = 4,
10007}
10008
10009impl IOActionIOActionType {
10010    #[must_use]
10011    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10012        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
10013    }
10014}
10015
10016impl FieldSerialize for IOActionIOActionType {
10017    fn serialize_field(&self, buf: &mut BytesMut) {
10018        buf.put_u16(*self as u16);
10019    }
10020}
10021
10022impl FieldDeserialize for IOActionIOActionType {
10023    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10024        Self::deserialize(buf)
10025    }
10026}
10027
10028impl FieldLen for IOActionIOActionType {
10029    fn field_len(&self) -> usize {
10030        2
10031    }
10032}
10033
10034// SISO-REF-010-2023 IOActionIOActionPhase [UID 288]
10035#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10036pub enum IOActionIOActionPhase {
10037    #[default]
10038    NoStatement = 0,
10039    StartAttackProfile = 1,
10040    EndAttackProfile = 2,
10041    ContinueAttackProfilewithChanges = 3,
10042    StartAttackEffects = 4,
10043    EndAttackedEffects = 5,
10044    ContinueAttackEffectswithChanges = 6,
10045}
10046
10047impl IOActionIOActionPhase {
10048    #[must_use]
10049    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10050        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
10051    }
10052}
10053
10054impl FieldSerialize for IOActionIOActionPhase {
10055    fn serialize_field(&self, buf: &mut BytesMut) {
10056        buf.put_u16(*self as u16);
10057    }
10058}
10059
10060impl FieldDeserialize for IOActionIOActionPhase {
10061    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10062        Self::deserialize(buf)
10063    }
10064}
10065
10066impl FieldLen for IOActionIOActionPhase {
10067    fn field_len(&self) -> usize {
10068        2
10069    }
10070}
10071
10072// SISO-REF-010-2023 IOReportIOReportType [UID 289]
10073#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10074pub enum IOReportIOReportType {
10075    #[default]
10076    NoStatement = 0,
10077    InitialReport = 1,
10078    UpdateReport = 2,
10079    FinalReport = 3,
10080}
10081
10082impl IOReportIOReportType {
10083    #[must_use]
10084    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10085        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10086    }
10087}
10088
10089impl FieldSerialize for IOReportIOReportType {
10090    fn serialize_field(&self, buf: &mut BytesMut) {
10091        buf.put_u8(*self as u8);
10092    }
10093}
10094
10095impl FieldDeserialize for IOReportIOReportType {
10096    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10097        Self::deserialize(buf)
10098    }
10099}
10100
10101impl FieldLen for IOReportIOReportType {
10102    fn field_len(&self) -> usize {
10103        1
10104    }
10105}
10106
10107// SISO-REF-010-2023 IOEffectsRecordIOStatus [UID 290]
10108#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10109pub enum IOEffectsRecordIOStatus {
10110    #[default]
10111    NoStatement = 0,
10112    EffectonSender = 1,
10113    EffectonReceiver = 2,
10114    EffectonSenderandReceiver = 3,
10115    EffectonMessage = 4,
10116    EffectonSenderandMessage = 5,
10117    EffectonReceiverandMessage = 6,
10118    EffectonSenderReceiverandMessage = 7,
10119}
10120
10121impl IOEffectsRecordIOStatus {
10122    #[must_use]
10123    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10124        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10125    }
10126}
10127
10128// SISO-REF-010-2023 IOEffectsRecordIOLinkType [UID 291]
10129#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10130pub enum IOEffectsRecordIOLinkType {
10131    #[default]
10132    NoStatement = 0,
10133    LogicalLink = 1,
10134    PhysicalNode = 2,
10135    PhysicalLink = 3,
10136}
10137
10138impl IOEffectsRecordIOLinkType {
10139    #[must_use]
10140    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10141        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10142    }
10143}
10144
10145// SISO-REF-010-2023 IOEffectsRecordIOEffect [UID 292]
10146#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10147pub enum IOEffectsRecordIOEffect {
10148    #[default]
10149    NoStatement = 0,
10150    Denial = 1,
10151    Degradation = 2,
10152    Disruption = 3,
10153    TerminateEffect = 255,
10154}
10155
10156impl IOEffectsRecordIOEffect {
10157    #[must_use]
10158    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10159        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10160    }
10161}
10162
10163// SISO-REF-010-2023 IOEffectsRecordIOProcess [UID 293]
10164#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10165pub enum IOEffectsRecordIOProcess {
10166    #[default]
10167    NoStatement = 0,
10168}
10169
10170impl IOEffectsRecordIOProcess {
10171    #[must_use]
10172    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10173        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10174    }
10175}
10176
10177// SISO-REF-010-2023 IOCommsNodeRecordCommsNodeType [UID 294]
10178#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10179pub enum IOCommsNodeRecordCommsNodeType {
10180    #[default]
10181    NoStatement = 0,
10182    SenderNodeID = 1,
10183    ReceiverNodeID = 2,
10184    SenderReceiverNodeID = 3,
10185}
10186
10187impl IOCommsNodeRecordCommsNodeType {
10188    #[must_use]
10189    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10190        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10191    }
10192}
10193
10194// SISO-REF-010-2023 DISAttributeActionCode [UID 295]
10195#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10196pub enum DISAttributeActionCode {
10197    #[default]
10198    NoStatement = 0,
10199}
10200
10201impl DISAttributeActionCode {
10202    #[must_use]
10203    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10204        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10205    }
10206}
10207
10208impl FieldSerialize for DISAttributeActionCode {
10209    fn serialize_field(&self, buf: &mut BytesMut) {
10210        buf.put_u8(*self as u8);
10211    }
10212}
10213
10214impl FieldDeserialize for DISAttributeActionCode {
10215    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10216        Self::deserialize(buf)
10217    }
10218}
10219
10220impl FieldLen for DISAttributeActionCode {
10221    fn field_len(&self) -> usize {
10222        1
10223    }
10224}
10225
10226// SISO-REF-010-2023 DRParametersType [UID 296]
10227#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10228pub enum DRParametersType {
10229    #[default]
10230    None = 0,
10231    LocalEulerAngles = 1,
10232    WorldOrientationQuaternion = 2,
10233}
10234
10235impl DRParametersType {
10236    #[must_use]
10237    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10238        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10239    }
10240}
10241
10242// SISO-REF-010-2023 HighFidelityHAVEQUICKTODTransmitIndicator [UID 297]
10243#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10244pub enum HighFidelityHAVEQUICKTODTransmitIndicator {
10245    #[default]
10246    NoTODIsBeingTransmitted = 0,
10247    TODTransmissioninProgress = 1,
10248}
10249
10250impl HighFidelityHAVEQUICKTODTransmitIndicator {
10251    #[must_use]
10252    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10253        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10254    }
10255}
10256
10257// SISO-REF-010-2023 NETIDRecordMode [UID 298]
10258#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10259pub enum NETIDRecordMode {
10260    #[default]
10261    AHAVEQUICKIorHAVEQUICKIICOMBAT = 1,
10262    BSATURNCOMBAT = 2,
10263    TTRAINING = 3,
10264}
10265
10266impl NETIDRecordMode {
10267    #[must_use]
10268    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10269        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10270    }
10271}
10272
10273// SISO-REF-010-2023 NETIDRecordFrequencyTable [UID 299]
10274#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10275pub enum NETIDRecordFrequencyTable {
10276    #[default]
10277    HQIOperations = 0,
10278    HQIINATOEuropeAreaOperations = 1,
10279    HQIINonNATOEuropeAreaOperations = 2,
10280    SATURNOperations = 3,
10281}
10282
10283impl NETIDRecordFrequencyTable {
10284    #[must_use]
10285    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10286        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10287    }
10288}
10289
10290// SISO-REF-010-2023 EEAttributeStateIndicator [UID 300]
10291#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10292pub enum EEAttributeStateIndicator {
10293    #[default]
10294    HeartbeatUpdate = 0,
10295    ChangedData = 1,
10296    HasCeased = 2,
10297}
10298
10299impl EEAttributeStateIndicator {
10300    #[must_use]
10301    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10302        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10303    }
10304}
10305
10306impl FieldSerialize for EEAttributeStateIndicator {
10307    fn serialize_field(&self, buf: &mut BytesMut) {
10308        buf.put_u8(*self as u8);
10309    }
10310}
10311
10312impl FieldDeserialize for EEAttributeStateIndicator {
10313    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10314        Self::deserialize(buf)
10315    }
10316}
10317
10318impl FieldLen for EEAttributeStateIndicator {
10319    fn field_len(&self) -> usize {
10320        1
10321    }
10322}
10323
10324// SISO-REF-010-2023 DISPDUStatusTransferredEntityIndicator(TEI) [UID 301]
10325#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10326#[bits = 1]
10327pub enum TransferredEntityIndicator {
10328    #[default]
10329    NoDifference = 0,
10330    Difference = 1,
10331}
10332
10333impl TransferredEntityIndicator {
10334    #[must_use]
10335    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10336        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10337    }
10338}
10339
10340// SISO-REF-010-2023 LVCIndicator [UID 302]
10341#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10342#[bits = 2]
10343pub enum LVCIndicator {
10344    #[default]
10345    NoStatement = 0,
10346    Live = 1,
10347    Virtual = 2,
10348    Constructive = 3,
10349}
10350
10351impl LVCIndicator {
10352    #[must_use]
10353    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10354        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10355    }
10356}
10357
10358// SISO-REF-010-2023 DISPDUStatusCoupledExtensionIndicator(CEI) [UID 303]
10359#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10360#[bits = 1]
10361pub enum CoupledExtensionIndicator {
10362    #[default]
10363    NotCoupled = 0,
10364    Coupled = 1,
10365}
10366
10367impl CoupledExtensionIndicator {
10368    #[must_use]
10369    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10370        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10371    }
10372}
10373
10374// SISO-REF-010-2023 DISPDUStatusFireTypeIndicator(FTI) [UID 304]
10375#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10376#[bits = 1]
10377pub enum FireTypeIndicator {
10378    #[default]
10379    Munition = 0,
10380    Expendable = 1,
10381}
10382
10383impl FireTypeIndicator {
10384    #[must_use]
10385    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10386        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10387    }
10388}
10389
10390// SISO-REF-010-2023 DISPDUStatusDetonationTypeIndicator(DTI) [UID 305]
10391#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10392#[bits = 2]
10393pub enum DetonationTypeIndicator {
10394    #[default]
10395    Munition = 0,
10396    Expendable = 1,
10397    NonMunitionExplosion = 2,
10398}
10399
10400impl From<u8> for DetonationTypeIndicator {
10401    fn from(value: u8) -> Self {
10402        match value & 0b11 {
10403            1 => Self::Expendable,
10404            2 => Self::NonMunitionExplosion,
10405            _ => Self::Munition,
10406        }
10407    }
10408}
10409
10410impl From<DetonationTypeIndicator> for u8 {
10411    fn from(value: DetonationTypeIndicator) -> Self {
10412        value as Self
10413    }
10414}
10415
10416impl DetonationTypeIndicator {
10417    #[must_use]
10418    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10419        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10420    }
10421}
10422
10423// SISO-REF-010-2023 RadioAttachedIndicator [UID 306]
10424#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10425#[bits = 2]
10426pub enum RadioAttachedIndicator {
10427    #[default]
10428    NoStatement = 0,
10429    Unattached = 1,
10430    Attached = 2,
10431}
10432
10433impl From<u8> for RadioAttachedIndicator {
10434    fn from(value: u8) -> Self {
10435        match value & 0b11 {
10436            1 => Self::Unattached,
10437            2 => Self::Attached,
10438            _ => Self::NoStatement,
10439        }
10440    }
10441}
10442
10443impl From<RadioAttachedIndicator> for u8 {
10444    fn from(value: RadioAttachedIndicator) -> Self {
10445        value as Self
10446    }
10447}
10448
10449impl RadioAttachedIndicator {
10450    #[must_use]
10451    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10452        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10453    }
10454}
10455
10456// SISO-REF-010-2023 IntercomAttachedIndicator(IAI) [UID 307]
10457#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10458#[bits = 2]
10459pub enum IntercomAttachedIndicator {
10460    #[default]
10461    NoStatement = 0,
10462    Unattached = 1,
10463    Attached = 2,
10464}
10465
10466impl From<u8> for IntercomAttachedIndicator {
10467    fn from(value: u8) -> Self {
10468        match value & 0b11 {
10469            1 => Self::Unattached,
10470            2 => Self::Attached,
10471            _ => Self::NoStatement,
10472        }
10473    }
10474}
10475
10476impl From<IntercomAttachedIndicator> for u8 {
10477    fn from(value: IntercomAttachedIndicator) -> Self {
10478        value as Self
10479    }
10480}
10481
10482impl IntercomAttachedIndicator {
10483    #[must_use]
10484    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10485        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10486    }
10487}
10488
10489// SISO-REF-010-2023 PduStatusIFFSimulationMode [UID 308]
10490#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10491#[bits = 1]
10492pub enum PduStatusIFFSimulationMode {
10493    #[default]
10494    Regeneration = 0,
10495    Interactive = 1,
10496}
10497
10498impl PduStatusIFFSimulationMode {
10499    #[must_use]
10500    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10501        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10502    }
10503}
10504
10505// SISO-REF-010-2023 ExplosiveMaterialGroups [UID 309]
10506#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10507pub enum ExplosiveMaterialGroups {
10508    #[default]
10509    General = 0,
10510    LiquidAviationMissileFuels = 1,
10511    LiquidOtherFuels = 2,
10512    LiquidExplosiveMaterial = 3,
10513    Solid = 4,
10514    Gaseous = 5,
10515    DustMaterial = 6,
10516}
10517
10518impl ExplosiveMaterialGroups {
10519    #[must_use]
10520    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10521        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10522    }
10523}
10524
10525// SISO-REF-010-2023 ExplosiveMaterialCategories [UID 310]
10526#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10527pub enum ExplosiveMaterialCategories {
10528    #[default]
10529    NoStatement = 0,
10530    AVGAS = 10,
10531    JetFuel = 11,
10532    JP4 = 12,
10533    JP5 = 13,
10534    JP7 = 14,
10535    JP8 = 15,
10536    JP10MissileFuel = 16,
10537    JPTS = 17,
10538    JetA = 18,
10539    JetA1 = 19,
10540    JetB = 20,
10541    JetBiofuel = 21,
10542    GasolinePetrolUnspecifiedOctane = 151,
10543    DieselFuelUnspecifiedGrade = 152,
10544    Ethanol = 153,
10545    E85Ethanol = 154,
10546    FuelOil = 155,
10547    Kerosene = 156,
10548    CrudeOil = 157,
10549    LightCrudeOil = 158,
10550    LiquidPetroleumGas = 159,
10551    RP1RocketFuel = 160,
10552    LH2RocketFuel = 161,
10553    LOXRocketFuel = 162,
10554    Alcohol = 164,
10555    HydrogenLiquid = 166,
10556    Nitroglycerin = 301,
10557    ANFO = 302,
10558    Dynamite = 451,
10559    TNT = 452,
10560    RDX = 453,
10561    PETN = 454,
10562    HMX = 455,
10563    C4 = 456,
10564    CompositionC4 = 457,
10565    NaturalGas = 601,
10566    Butane = 602,
10567    Propane = 603,
10568    Helium = 604,
10569    HydrogenGaseous = 605,
10570    DustUnspecifiedType = 801,
10571    GrainDust = 802,
10572    FlourDust = 803,
10573    SugarDust = 804,
10574}
10575
10576impl ExplosiveMaterialCategories {
10577    #[must_use]
10578    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10579        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
10580    }
10581}
10582
10583// SISO-REF-010-2023 DEPrecisionAimpointBeamSpotType [UID 311]
10584#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10585pub enum DEPrecisionAimpointBeamSpotType {
10586    #[default]
10587    Other = 0,
10588    Gaussian = 1,
10589    TopHat = 2,
10590}
10591
10592impl DEPrecisionAimpointBeamSpotType {
10593    #[must_use]
10594    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10595        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10596    }
10597}
10598
10599// SISO-REF-010-2023 DEFirePulseShape [UID 312]
10600#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10601pub enum DEFirePulseShape {
10602    #[default]
10603    Other = 0,
10604    SquareWave = 1,
10605    ContinuousWave = 2,
10606    Gaussian = 3,
10607}
10608
10609impl DEFirePulseShape {
10610    #[must_use]
10611    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10612        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10613    }
10614}
10615
10616impl FieldSerialize for DEFirePulseShape {
10617    fn serialize_field(&self, buf: &mut BytesMut) {
10618        buf.put_u8(*self as u8);
10619    }
10620}
10621
10622impl FieldDeserialize for DEFirePulseShape {
10623    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10624        Self::deserialize(buf)
10625    }
10626}
10627
10628impl FieldLen for DEFirePulseShape {
10629    fn field_len(&self) -> usize {
10630        1
10631    }
10632}
10633
10634// SISO-REF-010-2023 ComponentIdentification [UID 314]
10635#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10636pub enum ComponentIdentification {
10637    #[default]
10638    EntityCenter = 0,
10639    EntityStructure = 1,
10640    ControlSystem = 2,
10641    ControlSurface = 3,
10642    EnginePropulsionSystem = 4,
10643    CrewMember = 5,
10644    Fuse = 6,
10645    AcquisitionSensor = 7,
10646    TrackingSensor = 8,
10647    FuelTankSolidRocketMotor = 9,
10648}
10649
10650impl ComponentIdentification {
10651    #[must_use]
10652    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10653        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10654    }
10655}
10656
10657impl FieldSerialize for ComponentIdentification {
10658    fn serialize_field(&self, buf: &mut BytesMut) {
10659        buf.put_u8(*self as u8);
10660    }
10661}
10662
10663impl FieldDeserialize for ComponentIdentification {
10664    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10665        Self::deserialize(buf)
10666    }
10667}
10668
10669impl FieldLen for ComponentIdentification {
10670    fn field_len(&self) -> usize {
10671        1
10672    }
10673}
10674
10675// SISO-REF-010-2023 ComponentDamageStatus [UID 315]
10676#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10677pub enum ComponentDamageStatus {
10678    #[default]
10679    NoDamage = 0,
10680    MinorDamage = 1,
10681    MediumDamage = 2,
10682    MajorDamage = 3,
10683    Destroyed = 4,
10684}
10685
10686impl ComponentDamageStatus {
10687    #[must_use]
10688    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10689        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10690    }
10691}
10692
10693impl FieldSerialize for ComponentDamageStatus {
10694    fn serialize_field(&self, buf: &mut BytesMut) {
10695        buf.put_u8(*self as u8);
10696    }
10697}
10698
10699impl FieldDeserialize for ComponentDamageStatus {
10700    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10701        Self::deserialize(buf)
10702    }
10703}
10704
10705impl FieldLen for ComponentDamageStatus {
10706    fn field_len(&self) -> usize {
10707        1
10708    }
10709}
10710
10711// SISO-REF-010-2023 ComponentVisualSmokeColor [UID 316]
10712#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10713pub enum ComponentVisualSmokeColor {
10714    #[default]
10715    NoSmoke = 0,
10716    White = 1,
10717    Gray = 2,
10718    Black = 3,
10719}
10720
10721impl ComponentVisualSmokeColor {
10722    #[must_use]
10723    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10724        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10725    }
10726}
10727
10728impl FieldSerialize for ComponentVisualSmokeColor {
10729    fn serialize_field(&self, buf: &mut BytesMut) {
10730        buf.put_u8(*self as u8);
10731    }
10732}
10733
10734impl FieldDeserialize for ComponentVisualSmokeColor {
10735    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
10736        Self::deserialize(buf)
10737    }
10738}
10739
10740impl FieldLen for ComponentVisualSmokeColor {
10741    fn field_len(&self) -> usize {
10742        1
10743    }
10744}
10745
10746// SISO-REF-010-2023 BeamStatusBeamState [UID 318]
10747#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10748pub enum BeamStatusBeamState {
10749    #[default]
10750    Active = 0,
10751    Deactivated = 1,
10752}
10753
10754impl BeamStatusBeamState {
10755    #[must_use]
10756    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10757        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10758    }
10759}
10760
10761// SISO-REF-010-2023 EntityAssociationAssociationStatus [UID 319]
10762#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10763pub enum EntityAssociationAssociationStatus {
10764    #[default]
10765    NotSpecified = 0,
10766    PhysicalAssociationGeneralObject1 = 1,
10767    FunctionalAssociationGeneral = 2,
10768    AssociationBroken = 3,
10769    PhysicalAssociationObject2 = 4,
10770    FunctionalAssociationObject1 = 5,
10771    FunctionalAssociationObject2 = 6,
10772}
10773
10774impl EntityAssociationAssociationStatus {
10775    #[must_use]
10776    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10777        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10778    }
10779}
10780
10781// SISO-REF-010-2023 EntityVPRecordChangeIndicator [UID 320]
10782#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10783pub enum EntityVPRecordChangeIndicator {
10784    #[default]
10785    InitialReportorNoChangeSinceLastIssuance = 0,
10786    ChangeSinceLastIssuance = 1,
10787}
10788
10789impl EntityVPRecordChangeIndicator {
10790    #[must_use]
10791    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10792        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10793    }
10794}
10795
10796// SISO-REF-010-2023 EntityAssociationGroupMemberType [UID 321]
10797#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10798pub enum EntityAssociationGroupMemberType {
10799    #[default]
10800    NotPartofaGroup = 0,
10801    GroupLeader = 1,
10802    GroupMember = 2,
10803    FormationLeader = 3,
10804    FormationMember = 4,
10805    ConvoyLeader = 5,
10806    ConvoyMember = 6,
10807}
10808
10809impl EntityAssociationGroupMemberType {
10810    #[must_use]
10811    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10812        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10813    }
10814}
10815
10816// SISO-REF-010-2023 PhysicalAssociationTypeGroups [UID 322]
10817#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10818pub enum PhysicalAssociationTypeGroups {
10819    #[default]
10820    NotSpecified = 0,
10821    TowedMountedSlingLoad = 1,
10822    Restrained = 2,
10823    Mission = 3,
10824    OtherConnections = 4,
10825}
10826
10827impl PhysicalAssociationTypeGroups {
10828    #[must_use]
10829    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10830        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10831    }
10832}
10833
10834// SISO-REF-010-2023 EntityAssociationPhysicalAssociationType [UID 323]
10835#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10836pub enum EntityAssociationPhysicalAssociationType {
10837    #[default]
10838    NotSpecified = 0,
10839    TowedinAir = 1,
10840    TowedonLand = 2,
10841    TowedonWaterSurface = 3,
10842    TowedUnderwater = 4,
10843    MountedAttached = 5,
10844    MountedUnattachedandUnsupported = 6,
10845    MountedUnattachedandSupported = 7,
10846    TowedinAirCenterHook = 8,
10847    TowedinAirForwardHook = 9,
10848    TowedinAirAftHook = 10,
10849    TowedinAirTandemHookForeAndAft = 11,
10850    TowedinAirMismanagedTandemForeAndCenter = 12,
10851    TowedinAirMismanagedTandemCenterAndAft = 13,
10852    TowedinAirAllHooks = 14,
10853    Hoisted = 15,
10854    RestrainedtoaLifeform = 30,
10855    RestrainedtoaPlatform = 31,
10856    RestrainedtoanObject = 32,
10857    RefuelingOperation = 61,
10858    SearchandRescueBasket = 62,
10859    SearchandRescueRescueCollar = 63,
10860    EngagementObject2isBeingEngaged = 64,
10861    ReturnToBaseObject2istheDestinationObject = 65,
10862    LinebetweenCommunicationTowers = 90,
10863    LineBetweenPowerTowers = 91,
10864    Indoors = 92,
10865    TopSurface = 93,
10866}
10867
10868impl EntityAssociationPhysicalAssociationType {
10869    #[must_use]
10870    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10871        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10872    }
10873}
10874
10875// SISO-REF-010-2023 EntityAssociationPhysicalConnectionType [UID 324]
10876#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10877pub enum EntityAssociationPhysicalConnectionType {
10878    #[default]
10879    NotSpecified = 0,
10880    AttachedDirectlytoSurface = 1,
10881    CableWire = 2,
10882    Rope = 3,
10883    Chain = 4,
10884    PowerLine = 5,
10885    TelephoneLine = 6,
10886    CableLine = 7,
10887    RefuelingDrogue = 8,
10888    RefuelingBoom = 9,
10889    Handcuffs = 10,
10890    InContactWith = 11,
10891    FastRope = 12,
10892}
10893
10894impl EntityAssociationPhysicalConnectionType {
10895    #[must_use]
10896    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10897        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10898    }
10899}
10900
10901// SISO-REF-010-2023 SensorRecordSensorTypeOtherActiveSensors [UID 325]
10902#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10903pub enum SensorRecordSensorTypeOtherActiveSensors {
10904    #[default]
10905    Undefined = 0,
10906}
10907
10908impl SensorRecordSensorTypeOtherActiveSensors {
10909    #[must_use]
10910    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10911        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
10912    }
10913}
10914
10915// SISO-REF-010-2023 SensorRecordSensorTypePassiveSensors [UID 326]
10916#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
10917#[allow(non_camel_case_types)]
10918pub enum SensorRecordSensorTypePassiveSensors {
10919    #[default]
10920    ALR400 = 60000,
10921    ANAAR47 = 60001,
10922    ANAAR50 = 60002,
10923    ANAAR54 = 60003,
10924    ANAAR56 = 60004,
10925    ANAAR57 = 60005,
10926    ANALQ142 = 60006,
10927    ANALR45 = 60007,
10928    ANALR46 = 60008,
10929    ANALR56 = 60009,
10930    ANALR59 = 60010,
10931    ANALR64 = 60011,
10932    ANALR66 = 60012,
10933    ANALR67 = 60013,
10934    ANALR69 = 60014,
10935    ANALR73 = 60015,
10936    ANALR76 = 60016,
10937    ANALR91 = 60017,
10938    ANALR93 = 60018,
10939    ANALR94 = 60019,
10940    ANALR801 = 60020,
10941    ANAPR39 = 60021,
10942    ANAYR2 = 60022,
10943    ARI18223 = 60023,
10944    BOW21 = 60024,
10945    ChaparralIRST = 60025,
10946    FlankerIRST = 60026,
10947    FoxbatIRST = 60027,
10948    FoxhoundIRST = 60028,
10949    FulcrumIRST = 60029,
10950    HavocIRST = 60030,
10951    HindIRST = 60031,
10952    KJ200 = 60032,
10953    KJ8602 = 60033,
10954    L150Pastel = 60034,
10955    Serval = 60035,
10956    Sherloc = 60036,
10957    Sherlocvf = 60037,
10958    Sirena2 = 60038,
10959    Sirena3 = 60039,
10960    Sirena3M = 60040,
10961    SkyGuardian = 60041,
10962    SPO15 = 60042,
10963    SPS200 = 60043,
10964    Tarang = 60044,
10965    ANAAQ29A = 60045,
10966    _101KSUMAW = 60046,
10967    Abrams2GFFLIR = 60047,
10968    Abrams3GFFLIR = 60048,
10969    ANAAQ13LANTIRNFLIR = 60049,
10970    AN_ALR74 = 60050,
10971    AN_ALR90 = 60051,
10972    ANAPR48 = 60052,
10973    ELT156X = 60053,
10974    _101KSV = 60054,
10975    TP23ML = 60055,
10976    GenericFLIR = 60056,
10977    GenericIRST = 60057,
10978    GenericMAWS = 60058,
10979    GenericRWR = 60059,
10980    L136Mak = 60060,
10981    LeonardoSASSIRST = 60061,
10982    OSFIRST = 60062,
10983    PirateIRST = 60063,
10984    RECCELITE = 60064,
10985    ThalesNederlandSiriusIRST = 60065,
10986    TornadoRWR = 60066,
10987    TOES521FLIR = 60067,
10988    SafranVampir_MB = 60068,
10989}
10990
10991impl SensorRecordSensorTypePassiveSensors {
10992    #[must_use]
10993    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
10994        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
10995    }
10996}
10997
10998// SISO-REF-010-2023 MunitionExpendableStatus [UID 327]
10999#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11000pub enum MunitionExpendableStatus {
11001    #[default]
11002    Other = 0,
11003    Ready = 1,
11004    Inventory = 2,
11005}
11006
11007impl MunitionExpendableStatus {
11008    #[must_use]
11009    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11010        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11011    }
11012}
11013
11014// SISO-REF-010-2023 FuelMeasurementUnits [UID 328]
11015#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11016pub enum FuelMeasurementUnits {
11017    #[default]
11018    Other = 0,
11019    Liter = 1,
11020    Kilogram = 2,
11021}
11022
11023impl FuelMeasurementUnits {
11024    #[must_use]
11025    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11026        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11027    }
11028}
11029
11030// SISO-REF-010-2023 FuelLocation [UID 329]
11031#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11032pub enum FuelLocation {
11033    #[default]
11034    Other = 0,
11035}
11036
11037impl FuelLocation {
11038    #[must_use]
11039    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11040        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11041    }
11042}
11043
11044// SISO-REF-010-2023 EntityAssociationAssociationType [UID 330]
11045#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11046pub enum EntityAssociationAssociationType {
11047    #[default]
11048    Other = 0,
11049    TargetEntity = 1,
11050    TargetLocation = 2,
11051    HomeBaseLocation = 3,
11052    CAPPointLocation = 4,
11053    FlightLeader = 5,
11054    FlightMember = 6,
11055    IPPoint = 7,
11056    RendezvousPoint = 8,
11057    OnStationLocation = 9,
11058    LandingZoneLocation = 10,
11059    DownedPilot = 11,
11060    TankerEntitythatIsCurrentlyRefuelingtheTransferredEntity = 12,
11061    TankerEntitytheTransferredEntityIsHeadedtowardstoRefuel = 13,
11062    EntityHeadedtowardstoJoinUpWith = 14,
11063}
11064
11065impl EntityAssociationAssociationType {
11066    #[must_use]
11067    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11068        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11069    }
11070}
11071
11072// SISO-REF-010-2023 SensorOnOffStatus [UID 331]
11073#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11074pub enum SensorOnOffStatus {
11075    #[default]
11076    Off = 0,
11077    On = 1,
11078}
11079
11080impl SensorOnOffStatus {
11081    #[must_use]
11082    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11083        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11084    }
11085}
11086
11087// SISO-REF-010-2023 OwnershipStatus [UID 332]
11088#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11089pub enum OwnershipStatus {
11090    #[default]
11091    Other = 0,
11092    NewOwner = 1,
11093    OwnershipQueryResponse = 2,
11094    OwnershipConflict = 3,
11095    LocalEntityCancelledAutoResolveConflict = 4,
11096    LocalEntityCancelledManualResolveConflict = 5,
11097    LocalEntityCancelledRemoveEntityTCRReceived = 6,
11098}
11099
11100impl OwnershipStatus {
11101    #[must_use]
11102    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11103        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11104    }
11105}
11106
11107// SISO-REF-010-2023 RecordREventType [UID 333]
11108#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11109pub enum RecordREventType {
11110    #[default]
11111    Other = 0,
11112}
11113
11114impl RecordREventType {
11115    #[must_use]
11116    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11117        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11118    }
11119}
11120
11121// SISO-REF-010-2023 RecordQueryREventType [UID 334]
11122#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11123pub enum RecordQueryREventType {
11124    #[default]
11125    Periodic = 0,
11126    InternalEntityStateData = 1,
11127}
11128
11129impl RecordQueryREventType {
11130    #[must_use]
11131    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11132        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
11133    }
11134}
11135
11136impl FieldSerialize for RecordQueryREventType {
11137    fn serialize_field(&self, buf: &mut BytesMut) {
11138        buf.put_u16(*self as u16);
11139    }
11140}
11141
11142impl FieldDeserialize for RecordQueryREventType {
11143    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
11144        Self::deserialize(buf)
11145    }
11146}
11147
11148impl FieldLen for RecordQueryREventType {
11149    fn field_len(&self) -> usize {
11150        2
11151    }
11152}
11153
11154// SISO-REF-010-2023 UAPropulsionPlantConfigurationConfiguration [UID 335]
11155#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11156pub enum UAPropulsionPlantConfigurationConfiguration {
11157    #[default]
11158    Other = 0,
11159    DieselElectric = 1,
11160    Diesel = 2,
11161    Battery = 3,
11162    TurbineReduction = 4,
11163    Steam = 6,
11164    GasTurbine = 7,
11165}
11166
11167impl UAPropulsionPlantConfigurationConfiguration {
11168    #[must_use]
11169    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11170        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11171    }
11172}
11173
11174// SISO-REF-010-2023 MinefieldStateProtocolMode [UID 336]
11175#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11176pub enum MinefieldStateProtocolMode {
11177    #[default]
11178    HeartbeatMode = 0,
11179    QRPMode = 1,
11180}
11181
11182impl MinefieldStateProtocolMode {
11183    #[must_use]
11184    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11185        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
11186    }
11187}
11188
11189impl FieldSerialize for MinefieldStateProtocolMode {
11190    fn serialize_field(&self, buf: &mut BytesMut) {
11191        buf.put_u16(*self as u16);
11192    }
11193}
11194
11195impl FieldDeserialize for MinefieldStateProtocolMode {
11196    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
11197        Self::deserialize(buf)
11198    }
11199}
11200
11201impl FieldLen for MinefieldStateProtocolMode {
11202    fn field_len(&self) -> usize {
11203        2
11204    }
11205}
11206
11207// SISO-REF-010-2023 TransponderInterrogatorIndicator [UID 337]
11208#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11209pub enum TransponderInterrogatorIndicator {
11210    #[default]
11211    Transponder = 0,
11212    Interrogator = 1,
11213}
11214
11215impl TransponderInterrogatorIndicator {
11216    #[must_use]
11217    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11218        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11219    }
11220}
11221
11222// SISO-REF-010-2023 IFFSimulationMode [UID 338]
11223#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11224pub enum IFFSimulationMode {
11225    #[default]
11226    Regeneration = 0,
11227    Interactive = 1,
11228}
11229
11230impl IFFSimulationMode {
11231    #[must_use]
11232    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11233        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11234    }
11235}
11236
11237// SISO-REF-010-2023 IFFApplicableModes [UID 339]
11238#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11239pub enum IFFApplicableModes {
11240    #[default]
11241    NoApplicableModesData = 0,
11242    AllModes = 1,
11243}
11244
11245impl IFFApplicableModes {
11246    #[must_use]
11247    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11248        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11249    }
11250}
11251
11252// SISO-REF-010-2023 ModeCAltitudeIndicator [UID 340]
11253#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11254pub enum ModeCAltitudeIndicator {
11255    #[default]
11256    PositiveAltitudeAboveMSL = 0,
11257    NegativeAltitudeBelowMSLUseAlternateModeCAltitude = 1,
11258}
11259
11260impl ModeCAltitudeIndicator {
11261    #[must_use]
11262    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11263        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11264    }
11265}
11266
11267// SISO-REF-010-2023 TCASACASBasicAdvancedIndicator [UID 341]
11268#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11269pub enum TCASACASBasicAdvancedIndicator {
11270    #[default]
11271    Basic = 0,
11272    Advanced = 1,
11273}
11274
11275impl TCASACASBasicAdvancedIndicator {
11276    #[must_use]
11277    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11278        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11279    }
11280}
11281
11282// SISO-REF-010-2023 TCASACASIndicator [UID 342]
11283#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11284pub enum TCASACASIndicator {
11285    #[default]
11286    TCAS = 0,
11287    ACAS = 1,
11288}
11289
11290impl TCASACASIndicator {
11291    #[must_use]
11292    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11293        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11294    }
11295}
11296
11297// SISO-REF-010-2023 TCASACASSoftwareVersion [UID 343]
11298#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11299pub enum TCASACASSoftwareVersion {
11300    #[default]
11301    NoStatement = 0,
11302    _6_0_2 = 1,
11303    _7_0 = 2,
11304}
11305
11306impl TCASACASSoftwareVersion {
11307    #[must_use]
11308    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11309        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11310    }
11311}
11312
11313// SISO-REF-010-2023 TCASACASType [UID 344]
11314#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11315pub enum TCASACASType {
11316    #[default]
11317    NoStatement = 0,
11318    ACASI = 1,
11319    ACASII = 2,
11320}
11321
11322impl TCASACASType {
11323    #[must_use]
11324    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11325        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11326    }
11327}
11328
11329// SISO-REF-010-2023 TCASIIIType [UID 345]
11330#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11331pub enum TCASIIIType {
11332    #[default]
11333    TCASI = 0,
11334    TCASII = 1,
11335}
11336
11337impl TCASIIIType {
11338    #[must_use]
11339    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11340        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11341    }
11342}
11343
11344// SISO-REF-010-2023 Mode5IFFMission [UID 346]
11345#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11346pub enum Mode5IFFMission {
11347    #[default]
11348    NoStatement = 0,
11349    SurveillanceSHORAD = 1,
11350    SHORADassociatedwithaWeaponsSystem = 2,
11351    WeaponSystem = 3,
11352    AirborneandSurfaceSurveillancePlatforms = 4,
11353    AirborneandSurfaceWeaponsPlatforms = 5,
11354    GroundtoGround = 6,
11355}
11356
11357impl Mode5IFFMission {
11358    #[must_use]
11359    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11360        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11361    }
11362}
11363
11364// SISO-REF-010-2023 ModeSInterrogatorStatusTransmitState [UID 347]
11365#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11366pub enum ModeSInterrogatorStatusTransmitState {
11367    #[default]
11368    NoStatement = 0,
11369    RollCall = 1,
11370    AllCall = 2,
11371    LockoutOverride = 3,
11372    TemporaryLockout = 4,
11373    IntermittentLockout = 5,
11374}
11375
11376impl ModeSInterrogatorStatusTransmitState {
11377    #[must_use]
11378    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11379        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11380    }
11381}
11382
11383// SISO-REF-010-2023 ModeSInterrogatorIdentifierICType [UID 348]
11384#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11385pub enum ModeSInterrogatorIdentifierICType {
11386    #[default]
11387    II = 0,
11388    SI = 1,
11389}
11390
11391impl ModeSInterrogatorIdentifierICType {
11392    #[must_use]
11393    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11394        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11395    }
11396}
11397
11398// SISO-REF-010-2023 ISLSAntennaType [UID 349]
11399#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11400pub enum ISLSAntennaType {
11401    #[default]
11402    NoStatement = 0,
11403    MonopulseAntenna = 1,
11404}
11405
11406impl ISLSAntennaType {
11407    #[must_use]
11408    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11409        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11410    }
11411}
11412
11413// SISO-REF-010-2023 Mode5Reply [UID 350]
11414#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11415pub enum Mode5Reply {
11416    #[default]
11417    NoResponse = 0,
11418    Valid = 1,
11419    Invalid = 2,
11420    UnabletoVerify = 3,
11421}
11422
11423impl Mode5Reply {
11424    #[must_use]
11425    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11426        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11427    }
11428}
11429
11430// SISO-REF-010-2023 AntennaSelection [UID 351]
11431#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11432pub enum AntennaSelection {
11433    #[default]
11434    NoStatement = 0,
11435    Top = 1,
11436    Bottom = 2,
11437    Diversity = 3,
11438}
11439
11440impl AntennaSelection {
11441    #[must_use]
11442    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11443        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11444    }
11445}
11446
11447// SISO-REF-010-2023 Mode5SquitterType [UID 352]
11448#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11449pub enum Mode5SquitterType {
11450    #[default]
11451    NotCapable = 0,
11452    Short = 1,
11453    Extended = 2,
11454}
11455
11456impl Mode5SquitterType {
11457    #[must_use]
11458    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11459        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11460    }
11461}
11462
11463// SISO-REF-010-2023 Level2SquitterStatus [UID 353]
11464#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11465pub enum Level2SquitterStatus {
11466    #[default]
11467    Disabled = 0,
11468    Enabled = 1,
11469}
11470
11471impl Level2SquitterStatus {
11472    #[must_use]
11473    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11474        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11475    }
11476}
11477
11478// SISO-REF-010-2023 ModeSSquitterType [UID 354]
11479#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11480pub enum ModeSSquitterType {
11481    #[default]
11482    NotCapable = 0,
11483    Acquisition = 1,
11484    Extended = 2,
11485    Short = 3,
11486}
11487
11488impl ModeSSquitterType {
11489    #[must_use]
11490    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11491        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11492    }
11493}
11494
11495// SISO-REF-010-2023 ModeSSquitterRecordSource [UID 355]
11496#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11497pub enum ModeSSquitterRecordSource {
11498    #[default]
11499    Layer4IFFDataRecords = 0,
11500    Layer5GICBIFFDataRecords = 1,
11501}
11502
11503impl ModeSSquitterRecordSource {
11504    #[must_use]
11505    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11506        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11507    }
11508}
11509
11510// SISO-REF-010-2023 AircraftPresentDomain [UID 356]
11511#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11512pub enum AircraftPresentDomain {
11513    #[default]
11514    NoStatement = 0,
11515    Airborne = 1,
11516    OnGroundSurface = 2,
11517}
11518
11519impl AircraftPresentDomain {
11520    #[must_use]
11521    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11522        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11523    }
11524}
11525
11526// SISO-REF-010-2023 AircraftIdentificationType [UID 357]
11527#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11528pub enum AircraftIdentificationType {
11529    #[default]
11530    NoStatement = 0,
11531    FlightNumber = 1,
11532    TailNumber = 2,
11533}
11534
11535impl AircraftIdentificationType {
11536    #[must_use]
11537    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11538        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11539    }
11540}
11541
11542// SISO-REF-010-2023 CapabilityReport [UID 358]
11543#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11544pub enum CapabilityReport {
11545    #[default]
11546    NoCommunicationsCapability = 0,
11547    SignifiesatLeastCommAandCommBCapabilityandAbilitytoSetCACode7andontheGround = 4,
11548    SignifiesatLeastCommAandCommBcapabilityandAbilitytoSetCACode7andAirborne = 5,
11549    SignifiesatLeastCommAandCommBcapabilityandAbilitytoSetCACode7andEitherAirborneorontheGround = 6,
11550    SignifiestheDownlinkRequestFieldEquals234or5andEitherAirborneorontheGround = 7,
11551    NoStatement = 255,
11552}
11553
11554impl CapabilityReport {
11555    #[must_use]
11556    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11557        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11558    }
11559}
11560
11561// SISO-REF-010-2023 NavigationSource [UID 359]
11562#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11563pub enum NavigationSource {
11564    #[default]
11565    NoStatement = 0,
11566    GPS = 1,
11567    INS = 2,
11568    INSGPS = 3,
11569}
11570
11571impl NavigationSource {
11572    #[must_use]
11573    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11574        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11575    }
11576}
11577
11578// SISO-REF-010-2023 IFFDataRecordAvailable [UID 360]
11579#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11580pub enum IFFDataRecordAvailable {
11581    #[default]
11582    ComputeLocally = 0,
11583    IFFDataRecordAvailable = 1,
11584}
11585
11586impl IFFDataRecordAvailable {
11587    #[must_use]
11588    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11589        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11590    }
11591}
11592
11593// SISO-REF-010-2023 Mode5SAltitudeResolution [UID 361]
11594#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11595pub enum Mode5SAltitudeResolution {
11596    #[default]
11597    _100foot = 0,
11598    _25foot = 1,
11599}
11600
11601impl Mode5SAltitudeResolution {
11602    #[must_use]
11603    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11604        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11605    }
11606}
11607
11608// SISO-REF-010-2023 DeltaMode5SAltitudePositiveNegativeIndicator [UID 362]
11609#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11610pub enum DeltaMode5SAltitudePositiveNegativeIndicator {
11611    #[default]
11612    Positive = 0,
11613    Negative = 1,
11614}
11615
11616impl DeltaMode5SAltitudePositiveNegativeIndicator {
11617    #[must_use]
11618    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11619        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11620    }
11621}
11622
11623// SISO-REF-010-2023 FormatType [UID 363]
11624#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11625pub enum FormatType {
11626    #[default]
11627    NoData = 0,
11628    IdentityFormat = 4,
11629    SurfaceFormat5meterRNP = 5,
11630    SurfaceFormat100meterRNP = 6,
11631    AirborneFormat5meterRNP25footBarometricAltitude = 7,
11632    AirborneFormat100meterRNP25footBarometricAltitude = 8,
11633    AirborneFormat0_25nmiRNP25footBarometricAltitude = 9,
11634    AirborneFormat1_0nmiRNP25footBarometricAltitude = 10,
11635    AirborneFormat5meterRNP100footBarometricAltitude = 11,
11636    AirborneFormat100meterRNP100footBarometricAltitude = 12,
11637    AirborneFormat0_25nmiRNP100footBarometricAltitude = 13,
11638    AirborneFormat1_0nmiRNP100footBarometricAltitude = 14,
11639    AirborneFormat5meterRNPGPSHeight = 15,
11640    AirborneFormat100meterRNPGPSHeight = 16,
11641}
11642
11643impl FormatType {
11644    #[must_use]
11645    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11646        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11647    }
11648}
11649
11650// SISO-REF-010-2023 AircraftAddressSource [UID 364]
11651#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11652pub enum AircraftAddressSource {
11653    #[default]
11654    ModeSAircraftAddressFieldValue = 0,
11655    GICBIFFDataRecordAvailable = 1,
11656}
11657
11658impl AircraftAddressSource {
11659    #[must_use]
11660    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11661        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11662    }
11663}
11664
11665// SISO-REF-010-2023 SurveillanceStatus [UID 365]
11666#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11667pub enum SurveillanceStatus {
11668    #[default]
11669    NoInformation = 0,
11670    EmergencyLossofCommunications = 1,
11671    SPI = 2,
11672    ATCRBSCodeChange = 3,
11673}
11674
11675impl SurveillanceStatus {
11676    #[must_use]
11677    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11678        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11679    }
11680}
11681
11682// SISO-REF-010-2023 TurnRateSource [UID 366]
11683#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11684pub enum TurnRateSource {
11685    #[default]
11686    ComputeLocally = 0,
11687    LessThan1DegreeTurnorNotTurning = 1,
11688    _1DegreeorGreaterTurnRate = 2,
11689}
11690
11691impl TurnRateSource {
11692    #[must_use]
11693    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11694        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11695    }
11696}
11697
11698// SISO-REF-010-2023 TimeTypeSource [UID 367]
11699#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11700pub enum TimeTypeSource {
11701    #[default]
11702    ComputeLocally = 0,
11703    EvenSecond = 1,
11704    OddSecond = 2,
11705}
11706
11707impl TimeTypeSource {
11708    #[must_use]
11709    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11710        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11711    }
11712}
11713
11714// SISO-REF-010-2023 AircraftTypeWake [UID 368]
11715#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11716pub enum AircraftTypeWake {
11717    #[default]
11718    NoStatement = 0,
11719}
11720
11721impl AircraftTypeWake {
11722    #[must_use]
11723    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11724        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11725    }
11726}
11727
11728// SISO-REF-010-2023 DataCategory [UID 369]
11729#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11730pub enum DataCategory {
11731    #[default]
11732    NoStatement = 0,
11733    FunctionalData = 1,
11734    TransponderInterrogatorDataLinkMessages = 2,
11735}
11736
11737impl DataCategory {
11738    #[must_use]
11739    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11740        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11741    }
11742}
11743
11744// SISO-REF-010-2023 TILinkType [UID 370]
11745#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11746pub enum TILinkType {
11747    #[default]
11748    NotUsed = 0,
11749    GroundInitiatedCommunicationsB = 1,
11750    AutomaticDependentSurveillance = 2,
11751    GlobalNavigationSatelliteSystem = 3,
11752    DataLinkInitiationCapability = 4,
11753    AircraftCommunicationsAddressingandReportingSystem = 5,
11754    ATCCommunicationsManagement = 6,
11755    VHFDigitalLink = 7,
11756    AeronauticalTelecommunicationNetwork = 8,
11757    ModeSelect = 9,
11758    AirborneCollisionAvoidanceSystems = 10,
11759    TrafficCollisionAvoidanceSystems = 11,
11760    AutomaticDependentSurveillanceB = 12,
11761}
11762
11763impl TILinkType {
11764    #[must_use]
11765    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11766        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11767    }
11768}
11769
11770// SISO-REF-010-2023 AntennaStatus [UID 371]
11771#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11772pub enum AntennaStatus {
11773    #[default]
11774    NoStatement = 0,
11775    NotAbletoEmit = 1,
11776    AbletoEmit = 2,
11777}
11778
11779impl AntennaStatus {
11780    #[must_use]
11781    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11782        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11783    }
11784}
11785
11786// SISO-REF-010-2023 TransmissionIndicator [UID 372]
11787#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11788pub enum TransmissionIndicator {
11789    #[default]
11790    NoStatement = 0,
11791    OriginalInterrogation = 1,
11792    InterrogationReply = 2,
11793    SquitterTransmission = 3,
11794}
11795
11796impl TransmissionIndicator {
11797    #[must_use]
11798    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11799        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11800    }
11801}
11802
11803// SISO-REF-010-2023 ReplyAmplification [UID 373]
11804#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11805pub enum ReplyAmplification {
11806    #[default]
11807    NoStatement = 0,
11808    Complete = 1,
11809    Limted = 2,
11810    UnabletoRespond = 3,
11811}
11812
11813impl ReplyAmplification {
11814    #[must_use]
11815    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11816        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11817    }
11818}
11819
11820// SISO-REF-010-2023 DEFireFlagsStateUpdateFlag [UID 374]
11821#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11822pub enum DEFireFlagsStateUpdateFlag {
11823    #[default]
11824    UpdateDuetoHeartbeatTimer = 0,
11825    StateChange = 1,
11826}
11827
11828impl DEFireFlagsStateUpdateFlag {
11829    #[must_use]
11830    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11831        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11832    }
11833}
11834
11835// SISO-REF-010-2023 ComponentVisualDamageStatusSmoke [UID 375]
11836#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11837pub enum ComponentVisualDamageStatusSmoke {
11838    #[default]
11839    NoSmoke = 0,
11840    LightSmoke = 1,
11841    ModerateSmoke = 2,
11842    HeavySmoke = 3,
11843}
11844
11845impl ComponentVisualDamageStatusSmoke {
11846    #[must_use]
11847    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11848        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11849    }
11850}
11851
11852// SISO-REF-010-2023 ComponentVisualDamageStatusSurfaceDamage [UID 376]
11853#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11854pub enum ComponentVisualDamageStatusSurfaceDamage {
11855    #[default]
11856    NormalAppearance = 0,
11857    LightCharring = 1,
11858    HeavyCharring = 2,
11859    OneorMoreHolesBurnedCompletelythroughSurface = 3,
11860}
11861
11862impl ComponentVisualDamageStatusSurfaceDamage {
11863    #[must_use]
11864    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11865        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11866    }
11867}
11868
11869// SISO-REF-010-2023 GridAxisDescriptorAxisType [UID 377]
11870#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11871pub enum GridAxisDescriptorAxisType {
11872    #[default]
11873    RegularAxis = 0,
11874    IrregularAxis = 1,
11875}
11876
11877impl GridAxisDescriptorAxisType {
11878    #[must_use]
11879    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11880        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11881    }
11882}
11883
11884impl FieldSerialize for GridAxisDescriptorAxisType {
11885    fn serialize_field(&self, buf: &mut BytesMut) {
11886        buf.put_u8(*self as u8);
11887    }
11888}
11889
11890impl FieldDeserialize for GridAxisDescriptorAxisType {
11891    fn deserialize_field<B: Buf>(buf: &mut B) -> Self {
11892        Self::deserialize(buf)
11893    }
11894}
11895
11896impl FieldLen for GridAxisDescriptorAxisType {
11897    fn field_len(&self) -> usize {
11898        1
11899    }
11900}
11901
11902// SISO-REF-010-2023 AppearancePaintScheme [UID 378]
11903#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11904pub enum AppearancePaintScheme {
11905    #[default]
11906    UniformColor = 0,
11907    Camouflage = 1,
11908}
11909
11910impl AppearancePaintScheme {
11911    #[must_use]
11912    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11913        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11914    }
11915}
11916
11917// SISO-REF-010-2023 AppearanceDamage [UID 379]
11918#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11919pub enum AppearanceDamage {
11920    #[default]
11921    NoDamage = 0,
11922    SlightDamage = 1,
11923    ModerateDamage = 2,
11924    Destroyed = 3,
11925}
11926
11927impl AppearanceDamage {
11928    #[must_use]
11929    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11930        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11931    }
11932}
11933
11934// SISO-REF-010-2023 Mode5MessageFormatsStatus [UID 380]
11935#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11936pub enum Mode5MessageFormatsStatus {
11937    #[default]
11938    Capability = 0,
11939    ActiveInterrogation = 1,
11940}
11941
11942impl Mode5MessageFormatsStatus {
11943    #[must_use]
11944    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11945        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11946    }
11947}
11948
11949// SISO-REF-010-2023 AppearanceTrailingEffects [UID 381]
11950#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11951pub enum AppearanceTrailingEffects {
11952    #[default]
11953    None = 0,
11954    Small = 1,
11955    Medium = 2,
11956    Large = 3,
11957}
11958
11959impl AppearanceTrailingEffects {
11960    #[must_use]
11961    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11962        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11963    }
11964}
11965
11966// SISO-REF-010-2023 AppearanceHatch [UID 382]
11967#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11968pub enum AppearanceHatch {
11969    #[default]
11970    NotApplicable = 0,
11971    Closed = 1,
11972    Popped = 2,
11973    PoppedandPersonIsVisible = 3,
11974    Open = 4,
11975    OpenandPersonIsVisible = 5,
11976}
11977
11978impl AppearanceHatch {
11979    #[must_use]
11980    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11981        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11982    }
11983}
11984
11985// SISO-REF-010-2023 AppearanceLauncherOperational [UID 383]
11986#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
11987pub enum AppearanceLauncherOperational {
11988    #[default]
11989    NotRaisedNotOperational = 0,
11990    RaisedOperational = 1,
11991}
11992
11993impl AppearanceLauncherOperational {
11994    #[must_use]
11995    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
11996        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
11997    }
11998}
11999
12000// SISO-REF-010-2023 AppearanceCamouflageType [UID 384]
12001#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12002pub enum AppearanceCamouflageType {
12003    #[default]
12004    DesertCamouflage = 0,
12005    WinterCamouflage = 1,
12006    ForestCamouflage = 2,
12007    Other = 3,
12008}
12009
12010impl AppearanceCamouflageType {
12011    #[must_use]
12012    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12013        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12014    }
12015}
12016
12017// SISO-REF-010-2023 AppearanceConcealedPosition [UID 385]
12018#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12019pub enum AppearanceConcealedPosition {
12020    #[default]
12021    NotConcealed = 0,
12022    PreparedConcealedPosition = 1,
12023}
12024
12025impl AppearanceConcealedPosition {
12026    #[must_use]
12027    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12028        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12029    }
12030}
12031
12032// SISO-REF-010-2023 AppearanceEntityorObjectState [UID 386]
12033#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12034pub enum AppearanceEntityorObjectState {
12035    #[default]
12036    Active = 0,
12037    Deactivated = 1,
12038}
12039
12040impl AppearanceEntityorObjectState {
12041    #[must_use]
12042    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12043        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12044    }
12045}
12046
12047// SISO-REF-010-2023 AppearanceCanopy [UID 387]
12048#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12049pub enum AppearanceCanopy {
12050    #[default]
12051    NotApplicable = 0,
12052    SingleCanopySingleTroopDoorClosed = 1,
12053    FrontandRearCanopyLeftandRightTroopDoorClosed = 2,
12054    FrontCanopyLeftTroopDoorOpen = 3,
12055    SingleCanopySingleTroopDoorOpen = 4,
12056    RearCanopyRightTroopDoorOpen = 5,
12057    FrontandRearCanopyLeftandRightTroopDoorOpen = 6,
12058}
12059
12060impl AppearanceCanopy {
12061    #[must_use]
12062    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12063        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12064    }
12065}
12066
12067// SISO-REF-010-2023 AppearanceSubsurfaceHatch [UID 388]
12068#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12069pub enum AppearanceSubsurfaceHatch {
12070    #[default]
12071    NotApplicable = 0,
12072    HatchIsClosed = 1,
12073    HatchIsOpen = 4,
12074}
12075
12076impl AppearanceSubsurfaceHatch {
12077    #[must_use]
12078    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12079        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12080    }
12081}
12082
12083// SISO-REF-010-2023 DISPDUStatusActiveInterrogationIndicator(AII) [UID 389]
12084#[derive(Specifier, Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12085#[bits = 1]
12086pub enum ActiveInterrogationIndicator {
12087    #[default]
12088    NotActive = 0,
12089    Active = 1,
12090}
12091
12092impl ActiveInterrogationIndicator {
12093    #[must_use]
12094    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12095        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12096    }
12097}
12098
12099// SISO-REF-010-2023 AppearanceLifeformHealth [UID 390]
12100#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12101pub enum AppearanceLifeformHealth {
12102    #[default]
12103    NoInjury = 0,
12104    SlightInjury = 1,
12105    ModerateInjury = 2,
12106    FatalInjury = 3,
12107}
12108
12109impl AppearanceLifeformHealth {
12110    #[must_use]
12111    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12112        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12113    }
12114}
12115
12116// SISO-REF-010-2023 AppearanceLifeFormComplianceStatus [UID 391]
12117#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12118pub enum AppearanceLifeFormComplianceStatus {
12119    #[default]
12120    NotSpecified = 0,
12121    Detained = 1,
12122    Surrender = 2,
12123    UsingFists = 3,
12124    VerbalAbuseLevel1 = 4,
12125    VerbalAbuseLevel2 = 5,
12126    VerbalAbuseLevel3 = 6,
12127    PassiveResistanceLevel1 = 7,
12128    PassiveResistanceLevel2 = 8,
12129    PassiveResistanceLevel3 = 9,
12130    UsingNonLethalWeapon1 = 10,
12131    UsingNonLethalWeapon2 = 11,
12132    UsingNonLethalWeapon3 = 12,
12133    UsingNonLethalWeapon4 = 13,
12134    UsingNonLethalWeapon5 = 14,
12135    UsingNonLethalWeapon6 = 15,
12136}
12137
12138impl AppearanceLifeFormComplianceStatus {
12139    #[must_use]
12140    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12141        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12142    }
12143}
12144
12145// SISO-REF-010-2023 AppearanceLifeFormPosture [UID 392]
12146#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12147pub enum AppearanceLifeFormPosture {
12148    #[default]
12149    NotSpecified = 0,
12150    UprightStandingStill = 1,
12151    UprightWalking = 2,
12152    UprightRunning = 3,
12153    Kneeling = 4,
12154    Prone = 5,
12155    Crawling = 6,
12156    Swimming = 7,
12157    Parachuting = 8,
12158    Jumping = 9,
12159    Sitting = 10,
12160    Squatting = 11,
12161    Crouching = 12,
12162    Wading = 13,
12163    Surrender = 14,
12164    Detained = 15,
12165}
12166
12167impl AppearanceLifeFormPosture {
12168    #[must_use]
12169    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12170        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12171    }
12172}
12173
12174// SISO-REF-010-2023 AppearanceLifeFormWeaponImplement [UID 393]
12175#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12176pub enum AppearanceLifeFormWeaponImplement {
12177    #[default]
12178    NotPresent = 0,
12179    Stowed = 1,
12180    DeployedActive = 2,
12181    FiringPositionInUse = 3,
12182}
12183
12184impl AppearanceLifeFormWeaponImplement {
12185    #[must_use]
12186    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12187        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12188    }
12189}
12190
12191// SISO-REF-010-2023 AppearanceConcealedMovement [UID 394]
12192#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12193pub enum AppearanceConcealedMovement {
12194    #[default]
12195    OpenMovement = 0,
12196    RushesBetweenCoveredPositions = 1,
12197}
12198
12199impl AppearanceConcealedMovement {
12200    #[must_use]
12201    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12202        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12203    }
12204}
12205
12206// SISO-REF-010-2023 AppearanceEnvironmentalDensity [UID 395]
12207#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12208pub enum AppearanceEnvironmentalDensity {
12209    #[default]
12210    Clear = 0,
12211    Hazy = 1,
12212    Dense = 2,
12213    VeryDense = 3,
12214    Opaque = 4,
12215}
12216
12217impl AppearanceEnvironmentalDensity {
12218    #[must_use]
12219    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12220        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12221    }
12222}
12223
12224// SISO-REF-010-2023 Mode5PlatformType [UID 396]
12225#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12226pub enum Mode5PlatformType {
12227    #[default]
12228    GroundVehicle = 0,
12229    AirVehicle = 1,
12230}
12231
12232impl Mode5PlatformType {
12233    #[must_use]
12234    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12235        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12236    }
12237}
12238
12239// SISO-REF-010-2023 AppearanceAntiCollisionDayNight [UID 397]
12240#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12241pub enum AppearanceAntiCollisionDayNight {
12242    #[default]
12243    Day = 0,
12244    Night = 1,
12245}
12246
12247impl AppearanceAntiCollisionDayNight {
12248    #[must_use]
12249    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12250        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12251    }
12252}
12253
12254// SISO-REF-010-2023 AppearanceNavigationPositionBrightness [UID 398]
12255#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12256pub enum AppearanceNavigationPositionBrightness {
12257    #[default]
12258    Dim = 0,
12259    Bright = 1,
12260}
12261
12262impl AppearanceNavigationPositionBrightness {
12263    #[must_use]
12264    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12265        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12266    }
12267}
12268
12269// SISO-REF-010-2023 AppearanceSupplyDeployed [UID 399]
12270#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12271pub enum AppearanceSupplyDeployed {
12272    #[default]
12273    NotApplicable = 0,
12274    Stowed = 1,
12275    Deployed = 2,
12276    DeployedandActive = 3,
12277}
12278
12279impl AppearanceSupplyDeployed {
12280    #[must_use]
12281    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12282        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12283    }
12284}
12285
12286// SISO-REF-010-2023 AppearanceNVGMode [UID 400]
12287#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12288pub enum AppearanceNVGMode {
12289    #[default]
12290    OvertLighting = 0,
12291    CovertLighting = 1,
12292}
12293
12294impl AppearanceNVGMode {
12295    #[must_use]
12296    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12297        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12298    }
12299}
12300
12301// SISO-REF-010-2023 Parachute [UID 401]
12302#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12303pub enum Parachute {
12304    #[default]
12305    None = 0,
12306    Deployed = 1,
12307    Collapsed = 2,
12308    MalfunctionStreamer = 3,
12309}
12310
12311impl Parachute {
12312    #[must_use]
12313    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12314        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12315    }
12316}
12317
12318// SISO-REF-010-2023 FlareSmokeColor [UID 402]
12319#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12320pub enum FlareSmokeColor {
12321    #[default]
12322    White = 0,
12323    Red = 1,
12324    Green = 2,
12325    IR = 3,
12326}
12327
12328impl FlareSmokeColor {
12329    #[must_use]
12330    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12331        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12332    }
12333}
12334
12335// SISO-REF-010-2023 FlareSmokeStatus [UID 403]
12336#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12337pub enum FlareSmokeStatus {
12338    #[default]
12339    NotIgnited = 0,
12340    Burning = 1,
12341    BurnedOut = 2,
12342}
12343
12344impl FlareSmokeStatus {
12345    #[must_use]
12346    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12347        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12348    }
12349}
12350
12351// SISO-REF-010-2023 SpotChaffStatus [UID 404]
12352#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12353pub enum SpotChaffStatus {
12354    #[default]
12355    None = 0,
12356    Deployed = 1,
12357    Malfunction = 2,
12358}
12359
12360impl SpotChaffStatus {
12361    #[must_use]
12362    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12363        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12364    }
12365}
12366
12367// SISO-REF-010-2023 AppearanceObjectGeneralDamage [UID 405]
12368#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12369pub enum AppearanceObjectGeneralDamage {
12370    #[default]
12371    NoDamage = 0,
12372    Damaged = 1,
12373    Destroyed = 2,
12374}
12375
12376impl AppearanceObjectGeneralDamage {
12377    #[must_use]
12378    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12379        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12380    }
12381}
12382
12383// SISO-REF-010-2023 AppearanceObjectGeneralPredistributed [UID 406]
12384#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12385pub enum AppearanceObjectGeneralPredistributed {
12386    #[default]
12387    ObjectCreatedDuringtheExercise = 0,
12388    ObjectPredistributedPriortoExerciseStart = 1,
12389}
12390
12391impl AppearanceObjectGeneralPredistributed {
12392    #[must_use]
12393    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12394        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12395    }
12396}
12397
12398// SISO-REF-010-2023 AppearanceObjectSpecificBreachState [UID 407]
12399#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12400pub enum AppearanceObjectSpecificBreachState {
12401    #[default]
12402    NoBreaching = 0,
12403    Breached = 1,
12404    Cleared = 2,
12405}
12406
12407impl AppearanceObjectSpecificBreachState {
12408    #[must_use]
12409    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12410        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12411    }
12412}
12413
12414// SISO-REF-010-2023 AppearanceObjectSpecificChemicalType [UID 408]
12415#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12416pub enum AppearanceObjectSpecificChemicalType {
12417    #[default]
12418    Other = 0,
12419    Hydrochloric = 1,
12420    WhitePhosphorous = 2,
12421    RedPhosphorous = 3,
12422}
12423
12424impl AppearanceObjectSpecificChemicalType {
12425    #[must_use]
12426    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12427        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12428    }
12429}
12430
12431// SISO-REF-010-2023 AppearanceLinearObjectTankDitchBreach [UID 409]
12432#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12433pub enum AppearanceLinearObjectTankDitchBreach {
12434    #[default]
12435    NoBreaching = 0,
12436    SlightBreaching = 1,
12437    ModerateBreached = 2,
12438    Cleared = 3,
12439}
12440
12441impl AppearanceLinearObjectTankDitchBreach {
12442    #[must_use]
12443    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12444        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12445    }
12446}
12447
12448// SISO-REF-010-2023 AppearanceLinearObjectLaneMarkerVisible [UID 410]
12449#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12450pub enum AppearanceLinearObjectLaneMarkerVisible {
12451    #[default]
12452    LeftSideIsVisible = 0,
12453    RightSideIsVisible = 1,
12454    BothSidesAreVisible = 2,
12455}
12456
12457impl AppearanceLinearObjectLaneMarkerVisible {
12458    #[must_use]
12459    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12460        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12461    }
12462}
12463
12464// SISO-REF-010-2023 AppearanceObjectGeneralIEDPresent [UID 411]
12465#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12466pub enum AppearanceObjectGeneralIEDPresent {
12467    #[default]
12468    None = 0,
12469    Visible = 1,
12470    PartiallyHidden = 2,
12471    CompletelyHidden = 3,
12472}
12473
12474impl AppearanceObjectGeneralIEDPresent {
12475    #[must_use]
12476    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12477        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12478    }
12479}
12480
12481// SISO-REF-010-2023 Mode5LevelSelection [UID 412]
12482#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12483pub enum Mode5LevelSelection {
12484    #[default]
12485    Mode5Level1 = 0,
12486    Mode5Level2 = 1,
12487}
12488
12489impl Mode5LevelSelection {
12490    #[must_use]
12491    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12492        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12493    }
12494}
12495
12496// SISO-REF-010-2023 SupplyFuelType [UID 413]
12497#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12498pub enum SupplyFuelType {
12499    #[default]
12500    Other = 0,
12501    Gasoline = 1,
12502    DieselFuel = 2,
12503    JP4 = 3,
12504    FuelOil = 4,
12505    JP8 = 5,
12506    FogOil = 6,
12507    MultiSpectralFogOil = 7,
12508    JP5 = 8,
12509    JPTS = 9,
12510    TS1 = 10,
12511}
12512
12513impl SupplyFuelType {
12514    #[must_use]
12515    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12516        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12517    }
12518}
12519
12520// SISO-REF-010-2023 SensorTypeSource [UID 414]
12521#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12522pub enum SensorTypeSource {
12523    #[default]
12524    OtherActiveSensors = 0,
12525    Electromagnetic = 1,
12526    PassiveSensors = 2,
12527    MinefieldSensors = 3,
12528    UnderwaterAcoustics = 4,
12529    Lasers = 5,
12530}
12531
12532impl SensorTypeSource {
12533    #[must_use]
12534    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12535        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12536    }
12537}
12538
12539// SISO-REF-010-2023 AttachedPartDetachedIndicator [UID 415]
12540#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12541pub enum AttachedPartDetachedIndicator {
12542    #[default]
12543    Attached = 0,
12544    Detached = 1,
12545}
12546
12547impl AttachedPartDetachedIndicator {
12548    #[must_use]
12549    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12550        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12551    }
12552}
12553
12554// SISO-REF-010-2023 IntercomControlCommunicationsClass [UID 416]
12555#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12556pub enum IntercomControlCommunicationsClass {
12557    #[default]
12558    SimulatedCommunicationsChannel = 0,
12559    SimulationSupportCommunicationsChannel = 1,
12560}
12561
12562impl IntercomControlCommunicationsClass {
12563    #[must_use]
12564    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12565        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12566    }
12567}
12568
12569// SISO-REF-010-2023 DISLiveEntitySubprotocolNumber [UID 417]
12570#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12571pub enum DISLiveEntitySubprotocolNumber {
12572    #[default]
12573    NoSubprotocol = 0,
12574}
12575
12576impl DISLiveEntitySubprotocolNumber {
12577    #[must_use]
12578    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12579        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12580    }
12581}
12582
12583// SISO-REF-010-2023 MinefieldAppearanceMinefieldType [UID 418]
12584#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12585pub enum MinefieldAppearanceMinefieldType {
12586    #[default]
12587    MixedAntiPersonnelandAntiTankMinefield = 0,
12588    PureAntiPersonnelMinefield = 1,
12589    PureAntiTankMinefield = 2,
12590}
12591
12592impl MinefieldAppearanceMinefieldType {
12593    #[must_use]
12594    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12595        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12596    }
12597}
12598
12599// SISO-REF-010-2023 MinefieldAppearanceActiveStatus [UID 419]
12600#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12601pub enum MinefieldAppearanceActiveStatus {
12602    #[default]
12603    Active = 0,
12604    Inactive = 1,
12605}
12606
12607impl MinefieldAppearanceActiveStatus {
12608    #[must_use]
12609    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12610        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12611    }
12612}
12613
12614// SISO-REF-010-2023 MinefieldAppearanceLane [UID 420]
12615#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12616pub enum MinefieldAppearanceLane {
12617    #[default]
12618    MinefieldHasActiveLane = 0,
12619    MinefieldHasanInactiveLane = 1,
12620}
12621
12622impl MinefieldAppearanceLane {
12623    #[must_use]
12624    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12625        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12626    }
12627}
12628
12629// SISO-REF-010-2023 MinefieldAppearanceState [UID 421]
12630#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12631pub enum MinefieldAppearanceState {
12632    #[default]
12633    Active = 0,
12634    Deactivated = 1,
12635}
12636
12637impl MinefieldAppearanceState {
12638    #[must_use]
12639    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12640        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12641    }
12642}
12643
12644// SISO-REF-010-2023 MinefieldFusingFuseType [UID 422]
12645#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12646pub enum MinefieldFusingFuseType {
12647    #[default]
12648    NoFuse = 0,
12649    Other = 1,
12650    Pressure = 2,
12651    Magnetic = 3,
12652    TiltRod = 4,
12653    Command = 5,
12654    TripWire = 6,
12655}
12656
12657impl MinefieldFusingFuseType {
12658    #[must_use]
12659    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12660        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12661    }
12662}
12663
12664// SISO-REF-010-2023 Mode5LocationErrors [UID 423]
12665#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12666pub enum Mode5LocationErrors {
12667    #[default]
12668    NoLocationErrors = 0,
12669    IFFDataRecordPresent = 1,
12670}
12671
12672impl Mode5LocationErrors {
12673    #[must_use]
12674    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12675        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12676    }
12677}
12678
12679// SISO-REF-010-2023 MinefieldPaintSchemeAlgae [UID 424]
12680#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12681pub enum MinefieldPaintSchemeAlgae {
12682    #[default]
12683    None = 0,
12684    Light = 1,
12685    Moderate = 2,
12686    Heavy = 3,
12687}
12688
12689impl MinefieldPaintSchemeAlgae {
12690    #[must_use]
12691    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12692        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12693    }
12694}
12695
12696// SISO-REF-010-2023 MinefieldPaintSchemePaintScheme [UID 425]
12697#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12698pub enum MinefieldPaintSchemePaintScheme {
12699    #[default]
12700    Other = 0,
12701    Standard = 1,
12702    CamouflageDesert = 2,
12703    CamouflageJungle = 3,
12704    CamouflageSnow = 4,
12705    CamouflageGravel = 5,
12706    CamouflagePavement = 6,
12707    CamouflageSand = 7,
12708    NaturalWood = 8,
12709    Clear = 9,
12710    Red = 10,
12711    Blue = 11,
12712    Green = 12,
12713    Olive = 13,
12714    White = 14,
12715    Tan = 15,
12716    Black = 16,
12717    Yellow = 17,
12718    Brown = 18,
12719}
12720
12721impl MinefieldPaintSchemePaintScheme {
12722    #[must_use]
12723    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12724        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12725    }
12726}
12727
12728// SISO-REF-010-2023 CoverShroudStatus [UID 426]
12729#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12730pub enum CoverShroudStatus {
12731    #[default]
12732    Closed = 0,
12733    Opening = 1,
12734    CoverShroudBlownDetached = 2,
12735    OpenAttached = 3,
12736}
12737
12738impl CoverShroudStatus {
12739    #[must_use]
12740    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12741        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12742    }
12743}
12744
12745// SISO-REF-010-2023 PlatformLandMotorcycleSubcategories [UID 427]
12746#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12747pub enum PlatformLandMotorcycleSubcategories {
12748    #[default]
12749    Other = 0,
12750    Scooter = 1,
12751    SportStreet = 2,
12752    Cruiser = 3,
12753    DirtBike = 4,
12754    Standard = 5,
12755    Touring = 6,
12756    DualPurpose = 7,
12757}
12758
12759impl PlatformLandMotorcycleSubcategories {
12760    #[must_use]
12761    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12762        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12763    }
12764}
12765
12766// HERE
12767
12768// SISO-REF-010-2023 PlatformLandCarSubcategories [UID 428]
12769#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12770pub enum PlatformLandCarSubcategories {
12771    #[default]
12772    Other = 0,
12773    Generic = 10,
12774    GenericMiniMicrocar = 11,
12775    GenericEconomyCompact = 12,
12776    GenericIntermediateStandard = 13,
12777    GenericFullPremiumLuxury = 14,
12778    GenericOversize = 15,
12779    _2DoorCoupe = 20,
12780    _2DoorCoupeMiniMicrocar = 21,
12781    _2DoorCoupeEconomyCompact = 22,
12782    _2DoorCoupeIntermediateStandard = 23,
12783    _3DoorHatchback = 30,
12784    _3DoorHatchbackMiniMicrocar = 31,
12785    _3DoorHatchbackEconomyCompact = 32,
12786    _4DoorSedan = 40,
12787    _4DoorSedanMiniMicrocar = 41,
12788    _4DoorSedanEconomyCompact = 42,
12789    _4DoorSedanIntermediateStandard = 43,
12790    _4DoorSedanFullPremiumLuxury = 44,
12791    _4DoorSedanOversize = 45,
12792    _5DoorHatchback = 50,
12793    _5DoorHatchbackMiniMicrocar = 51,
12794    _5DoorHatchbackEconomyCompact = 52,
12795    _5DoorHatchbackIntermediateStandard = 53,
12796    _5DoorHatchbackFullPremiumLuxury = 54,
12797    Wagon = 60,
12798    WagonEconomyCompact = 62,
12799    WagonIntermediateStandard = 63,
12800    WagonFullPremiumLuxury = 64,
12801    Minivan = 70,
12802    Limousine = 80,
12803    LimousineFullPremiumLuxury = 84,
12804    LimousineOversize = 85,
12805    Sports = 90,
12806    Convertible = 100,
12807    ConvertibleMiniMicrocar = 101,
12808    ConvertibleEconomyCompact = 102,
12809    ConvertibleIntermediateStandard = 103,
12810    ConvertibleFullPremiumLuxury = 104,
12811    SportsUtilityVehicle = 110,
12812    SportsUtilityVehicleEconomyCompact = 112,
12813    SportsUtilityVehicleIntermediateStandard = 113,
12814    SportsUtilityVehicleFullPremiumLuxury = 114,
12815    SportsUtilityVehicleOversize = 115,
12816}
12817
12818impl PlatformLandCarSubcategories {
12819    #[must_use]
12820    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12821        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12822    }
12823}
12824
12825// SISO-REF-010-2023 PlatformLandBusSubcategories [UID 429]
12826#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12827pub enum PlatformLandBusSubcategories {
12828    #[default]
12829    Other = 0,
12830    CommuterFlatNose = 1,
12831    CommuterSnoutNose = 2,
12832    Shuttle = 3,
12833    DoubleDecker = 4,
12834    Guided = 5,
12835    Kneeling = 6,
12836    Midibus = 7,
12837    Minibus = 8,
12838    MiniWheelchair = 9,
12839    Motorcoach = 10,
12840    PrisonBus = 11,
12841    Schoolbus = 12,
12842    SchoolWheelchair = 13,
12843    Tour = 14,
12844    TramParkingLot = 15,
12845    Trolley = 16,
12846    AirportTransport = 17,
12847    Articulated = 18,
12848}
12849
12850impl PlatformLandBusSubcategories {
12851    #[must_use]
12852    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12853        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12854    }
12855}
12856
12857// SISO-REF-010-2023 PlatformLandSingleUnitCargoTruckSubcategories [UID 430]
12858#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12859pub enum PlatformLandSingleUnitCargoTruckSubcategories {
12860    #[default]
12861    Other = 0,
12862    PickupTruckMini = 1,
12863    PickupTruckMidSize = 2,
12864    PickupTruckFullSize = 3,
12865    PickupTruckCrewCab = 4,
12866    PickupTruckExtendedCab = 5,
12867    PickupTruckLongBed = 6,
12868    PickupTruckCabForward = 7,
12869    CargoTruck = 10,
12870    CargoTruckupto2_5Ton = 11,
12871    CargoTruckupto5Ton = 12,
12872    CargoTruckupto7_5Ton = 13,
12873    CargoTruckupto10Ton = 14,
12874    CargoTruckover10Ton = 15,
12875    Tanker = 20,
12876    SemiTrailerCab = 30,
12877    Van = 70,
12878    VanExtended = 71,
12879    VanCompact = 72,
12880    VanWheelchair = 73,
12881    VanDelivery = 74,
12882    DeliveryTruck = 100,
12883    DeliveryTruckBox = 101,
12884    DeliveryTruckFlatbed = 102,
12885    DeliveryTruckStakeBed = 103,
12886    MessTruck = 104,
12887    TruckPalletisedLoadSystem = 105,
12888    TruckPetroleumOilandLubricants = 106,
12889    TruckPetroleumOilandLubricantsSurveillance = 107,
12890    RefrigeratedTruckSmall = 108,
12891    RefrigeratedTruckMedium = 109,
12892    RefrigeratedTruckLarge = 110,
12893}
12894
12895impl PlatformLandSingleUnitCargoTruckSubcategories {
12896    #[must_use]
12897    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12898        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12899    }
12900}
12901
12902// SISO-REF-010-2023 PlatformLandSingleUnitUtilityEmergencyTruckSubcategories [UID 431]
12903#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12904pub enum PlatformLandSingleUnitUtilityEmergencyTruckSubcategories {
12905    #[default]
12906    Other = 0,
12907    AmbulanceTruck = 1,
12908    FireParamedicTruck = 2,
12909    AmbulanceAdvancedLifeSupport = 3,
12910    AmbulancePickupTruck = 4,
12911    FireEngine = 10,
12912    AerialLadderFireEngine = 11,
12913    AirportFireEngine = 12,
12914    WildlandFireEngine = 13,
12915    FireChief = 14,
12916    PolicePaddyWagon = 20,
12917    PoliceSWAT = 21,
12918    PoliceBombSquad = 22,
12919    PolicePickupTruck = 23,
12920    Hazmat = 30,
12921    WreckerNormalHookandChain = 40,
12922    WreckerNormalBoom = 41,
12923    WreckerNormalWheelLift = 42,
12924    WreckerNormalFlatbed = 43,
12925    WreckerNormalIntegrated = 44,
12926    WreckerHeavyHookandChain = 45,
12927    WreckerHeavyBoom = 46,
12928    WreckerHeavyWheelLift = 47,
12929    WreckerHeavyFlatbed = 48,
12930    WreckerHeavyIntegrated = 49,
12931    PostalTruck = 60,
12932    StreetSweeper = 70,
12933    StreetSweeperThreeWheeled = 71,
12934    WasteCollectionOther = 80,
12935    WasteCollectionFrontLoader = 81,
12936    WasteCollectionRearLoader = 82,
12937    WasteCollectionAutomatedSideLoader = 83,
12938    WasteCollectionPneumaticCollection = 84,
12939    WasteCollectionGrapple = 85,
12940    UtilityTruck = 90,
12941    UtilityTruckwBoom = 91,
12942    AerialWorkPlatformOther = 100,
12943    AerialWorkPlatformScissorLift = 101,
12944    AerialWorkPlatformTelescoping = 102,
12945    MaintenanceTruck = 120,
12946    DecontaminationTruck = 121,
12947    WaterCannonTruck = 122,
12948    WaterPurificationTruck = 123,
12949    SmokeGeneratorTruck = 124,
12950    AutoRickshaw = 150,
12951}
12952
12953impl PlatformLandSingleUnitUtilityEmergencyTruckSubcategories {
12954    #[must_use]
12955    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12956        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12957    }
12958}
12959
12960// SISO-REF-010-2023 PlatformLandMultipleUnitCargoTruckSubcategories [UID 432]
12961#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12962pub enum PlatformLandMultipleUnitCargoTruckSubcategories {
12963    #[default]
12964    Other = 0,
12965    TractorTrailer = 1,
12966    Tanker = 2,
12967}
12968
12969impl PlatformLandMultipleUnitCargoTruckSubcategories {
12970    #[must_use]
12971    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12972        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12973    }
12974}
12975
12976// SISO-REF-010-2023 PlatformLandMultipleUnitUtilityEmergencyTruckSubcategories [UID 433]
12977#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12978pub enum PlatformLandMultipleUnitUtilityEmergencyTruckSubcategories {
12979    #[default]
12980    Other = 0,
12981    FireEngineHookAndLadder = 1,
12982}
12983
12984impl PlatformLandMultipleUnitUtilityEmergencyTruckSubcategories {
12985    #[must_use]
12986    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
12987        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
12988    }
12989}
12990
12991// SISO-REF-010-2023 PlatformLandConstructionSpecialtyVehicleSubcategories [UID 434]
12992#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
12993pub enum PlatformLandConstructionSpecialtyVehicleSubcategories {
12994    #[default]
12995    Other = 0,
12996    Tug = 1,
12997    Forklift = 2,
12998    Loader = 3,
12999    LoaderBackhoe = 4,
13000    CraneTractorMounted = 5,
13001    CraneWheeled = 6,
13002    Grader = 7,
13003    RoadRollerOther = 8,
13004    RoadRollerDoubleDrumSmooth = 9,
13005    RoadRollerSingleDrumSmooth = 10,
13006    RoadRollerDoubleDrumSheeps = 11,
13007    RoadRollerSingleDrumSheeps = 12,
13008    RoadRollerPneumaticTired = 13,
13009    ExcavatorOther = 14,
13010    ExcavatorDragline = 15,
13011    ExcavatorLongReach = 16,
13012    ExcavatorMobileTire = 17,
13013    MiniExcavator = 18,
13014    ExcavatorGiant = 19,
13015    BulldozerTractorMounted = 20,
13016    BulldozerTracked = 21,
13017    Scraper = 22,
13018    SkidSteer = 23,
13019    DumpTruckOther = 24,
13020    DumpTruckArticulated = 25,
13021    DumpTruckTransfer = 26,
13022    DumpTruckSuper = 27,
13023    DumpTruckOffRoad = 28,
13024    Paver = 29,
13025    DrillingMachine = 30,
13026    ConcreteMixerOther = 31,
13027    ConcreteMixerRearDischarge = 32,
13028    ConcreteMixerFrontDischarge = 33,
13029    ConcreteMixerSixAxle = 34,
13030    ConcreteMixerLongReachBoom = 35,
13031    ConcreteMixerVolumetric = 36,
13032    TrencherChain = 37,
13033    TrencherRockwheel = 38,
13034    Snowcat = 39,
13035    CraneTracked = 40,
13036    CraneShovel = 41,
13037    SweeperRotary = 42,
13038    RollerVibratoryCompactor = 43,
13039    ForkLiftTruck = 44,
13040    ForkLiftRoughtTerrain = 45,
13041    Transloader = 46,
13042    TruckWaterConstruction = 47,
13043    TruckFuelDelivery = 48,
13044    TruckSawmill = 49,
13045    TruckLineMarkingConstruction = 50,
13046    TractorIndustrial = 51,
13047    CompactorHighSpeed = 52,
13048    TruckDrilling = 53,
13049    TruckDrillingSupport = 54,
13050    CraneConstruction = 55,
13051}
13052
13053impl PlatformLandConstructionSpecialtyVehicleSubcategories {
13054    #[must_use]
13055    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13056        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13057    }
13058}
13059
13060// SISO-REF-010-2023 PlatformLandFarmSpecialtyVehicleSubcategories [UID 435]
13061#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13062pub enum PlatformLandFarmSpecialtyVehicleSubcategories {
13063    #[default]
13064    Other = 0,
13065    Tractor = 1,
13066    HarvesterReaper = 2,
13067    Skidder = 3,
13068    Forwarder = 4,
13069    LawnMowerOther = 5,
13070    LawnMowerRiding = 6,
13071    LawnMowerStanding = 7,
13072    LawnMowerPush = 8,
13073}
13074
13075impl PlatformLandFarmSpecialtyVehicleSubcategories {
13076    #[must_use]
13077    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13078        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13079    }
13080}
13081
13082// SISO-REF-010-2023 PlatformLandTrailerSubcategories [UID 436]
13083#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13084pub enum PlatformLandTrailerSubcategories {
13085    #[default]
13086    Other = 0,
13087    TrailerFlatbed = 1,
13088    TrailerContainer = 2,
13089    TrailerContainerRefrigerated = 3,
13090    TrailerDouble = 4,
13091    TrailerAutoTransport = 5,
13092    TrailerArticulated = 6,
13093    TrailerTanker = 7,
13094    TrailerTankerSmall = 8,
13095    TrailerTankerLarge = 9,
13096    TrailerTankerGasoline = 10,
13097    TrailerTankerMilk = 11,
13098    TrailerTankerWater = 12,
13099    TrailerTankerSeptic = 13,
13100    TrailerBoat = 14,
13101    TrailerBoatSmall = 15,
13102    TrailerBoatLarge = 16,
13103    TrailerRecreational = 17,
13104    TrailerRecreationalConventional = 18,
13105    TrailerRecreationalTravelExpandable = 19,
13106    TrailerRecreationalFifthWheelTravel = 20,
13107    TrailerRecreationalFoldingCamping = 21,
13108    TrailerRecreationalTruckCamper = 22,
13109    TrailerAerostatMooringPlatform = 23,
13110    TrailerHousehold = 24,
13111    TrailerKitchen = 25,
13112    TrailerUltraLightAircraft = 26,
13113    TrailerHeavyEquipment = 27,
13114}
13115
13116impl PlatformLandTrailerSubcategories {
13117    #[must_use]
13118    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13119        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13120    }
13121}
13122
13123// SISO-REF-010-2023 PlatformLandRecreationalSubcategories [UID 437]
13124#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13125pub enum PlatformLandRecreationalSubcategories {
13126    #[default]
13127    Other = 0,
13128    ATV2X4 = 1,
13129    ATV4X4 = 2,
13130    ATV6X6 = 3,
13131    ATV3wheeled = 4,
13132    ToyOther = 5,
13133    ToyCar = 6,
13134    ToyATV = 7,
13135    GolfCart = 8,
13136    Snowmobile = 9,
13137    RecreationalVehicle = 10,
13138    RecreationalVehicleTypeAMotorhome = 11,
13139    RecreationalVehicleTypeBMotorhome = 12,
13140    RecreationalVehicleTypeCMotorhome = 13,
13141    ConversionVan = 14,
13142}
13143
13144impl PlatformLandRecreationalSubcategories {
13145    #[must_use]
13146    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13147        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13148    }
13149}
13150
13151// SISO-REF-010-2023 PlatformLandNonmotorizedSubcategories [UID 438]
13152#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13153pub enum PlatformLandNonmotorizedSubcategories {
13154    #[default]
13155    Other = 0,
13156    Unicycle = 1,
13157    Bicycle = 2,
13158    BicycleMountain = 3,
13159    BicycleRacing = 4,
13160    Tricycle = 5,
13161    Quadricycle = 6,
13162    RickshawTwoPerson = 7,
13163    RickshawOnePerson = 8,
13164    TandemBicycle = 9,
13165    CycleTrailer = 10,
13166    CycleSidecar = 11,
13167    Sled = 12,
13168    Skis = 13,
13169    Snowboard = 14,
13170    Skateboard = 15,
13171    Skates = 16,
13172    SkatesInLine = 17,
13173    WagonCart = 18,
13174    Dolly = 19,
13175    Handtruck = 20,
13176    PushCart = 21,
13177    Wheelbarrow = 22,
13178    KickScooter = 23,
13179    Wheelchair = 24,
13180}
13181
13182impl PlatformLandNonmotorizedSubcategories {
13183    #[must_use]
13184    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13185        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13186    }
13187}
13188
13189// SISO-REF-010-2023 PlatformLandTrainsSubcategories [UID 439]
13190#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13191pub enum PlatformLandTrainsSubcategories {
13192    #[default]
13193    Other = 0,
13194    Engine = 1,
13195    BoxCar = 2,
13196    Tanker = 3,
13197    Flatcar = 4,
13198    Caboose = 5,
13199    PassengerCar = 6,
13200    Hopper = 7,
13201}
13202
13203impl PlatformLandTrainsSubcategories {
13204    #[must_use]
13205    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13206        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13207    }
13208}
13209
13210// SISO-REF-010-2023 PlatformLandUtilityEmergencyCarSubcategories [UID 440]
13211#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13212pub enum PlatformLandUtilityEmergencyCarSubcategories {
13213    #[default]
13214    Other = 0,
13215    AmbulanceCar = 1,
13216    PoliceCar = 2,
13217    PoliceChief = 3,
13218    Hearse = 4,
13219    Taxi = 5,
13220}
13221
13222impl PlatformLandUtilityEmergencyCarSubcategories {
13223    #[must_use]
13224    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13225        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13226    }
13227}
13228
13229// SISO-REF-010-2023 PlatformSurfacePassengerVesselSubcategories [UID 441]
13230#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13231pub enum PlatformSurfacePassengerVesselSubcategories {
13232    #[default]
13233    CruiseShip = 1,
13234    CruiseFerry = 2,
13235    HighSpeedFerry = 3,
13236    Ferry = 4,
13237    OceanLiner = 5,
13238}
13239
13240impl PlatformSurfacePassengerVesselSubcategories {
13241    #[must_use]
13242    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13243        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13244    }
13245}
13246
13247// SISO-REF-010-2023 PlatformSurfaceDryCargoShipSubcategories [UID 442]
13248#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13249pub enum PlatformSurfaceDryCargoShipSubcategories {
13250    #[default]
13251    CommonDryCargoShip = 1,
13252    DryBulkCargoShip = 2,
13253    ContainerShip = 3,
13254    ReeferShip = 4,
13255    RoRoShip = 5,
13256    Barge = 6,
13257    HeavyLiftShip = 7,
13258}
13259
13260impl PlatformSurfaceDryCargoShipSubcategories {
13261    #[must_use]
13262    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13263        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13264    }
13265}
13266
13267// SISO-REF-010-2023 PlatformSurfaceTankerSubcategories [UID 443]
13268#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13269pub enum PlatformSurfaceTankerSubcategories {
13270    #[default]
13271    LiquidPetroleumGasTanker = 1,
13272    ChemicalTanker = 2,
13273    LiquidNaturalGasTanker = 3,
13274    CoastalTradingVessel = 4,
13275    CrudeOilTanker = 5,
13276    LiquidBulkTanker = 6,
13277    VeryLargeCrudeCarrier = 7,
13278    UltraLargeCrudeCarrier = 8,
13279    CondensateStorageTanker = 9,
13280}
13281
13282impl PlatformSurfaceTankerSubcategories {
13283    #[must_use]
13284    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13285        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13286    }
13287}
13288
13289// SISO-REF-010-2023 PlatformSurfaceSupportVesselSubcategories [UID 444]
13290#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13291pub enum PlatformSurfaceSupportVesselSubcategories {
13292    #[default]
13293    PlatformSupplyVessel = 1,
13294    TenderVessel = 2,
13295    Tugboat = 3,
13296    DiveSupportVessel = 4,
13297    Fireboat = 5,
13298    WellStimulationVessel = 6,
13299    AnchorHandlingTugSupplyVessel = 7,
13300    OffshoreConstructionVessel = 8,
13301    EmergencyResponseandRescueVessel = 9,
13302}
13303
13304impl PlatformSurfaceSupportVesselSubcategories {
13305    #[must_use]
13306    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13307        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13308    }
13309}
13310
13311// SISO-REF-010-2023 PlatformSurfacePrivateMotorboatSubcategories [UID 445]
13312#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13313pub enum PlatformSurfacePrivateMotorboatSubcategories {
13314    #[default]
13315    SmallMotorboat = 1,
13316    MediumMotorboat = 2,
13317    LargeMotorboat = 3,
13318    VeryLargeMotorboat = 4,
13319}
13320
13321impl PlatformSurfacePrivateMotorboatSubcategories {
13322    #[must_use]
13323    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13324        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13325    }
13326}
13327
13328// SISO-REF-010-2023 PlatformSurfacePrivateSailboatSubcategories [UID 446]
13329#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13330pub enum PlatformSurfacePrivateSailboatSubcategories {
13331    #[default]
13332    SmallSailboat = 1,
13333    MediumSailboat = 2,
13334    LargeSailboat = 3,
13335    VeryLargeSailboat = 4,
13336}
13337
13338impl PlatformSurfacePrivateSailboatSubcategories {
13339    #[must_use]
13340    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13341        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13342    }
13343}
13344
13345// SISO-REF-010-2023 PlatformSurfaceFishingVesselSubcategories [UID 447]
13346#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13347pub enum PlatformSurfaceFishingVesselSubcategories {
13348    #[default]
13349    SmallFishingVessel = 1,
13350    MediumFishingVessel = 2,
13351    LargeFishingVessel = 3,
13352    FishProcessingVessel = 4,
13353    MastedFishingVessel = 5,
13354}
13355
13356impl PlatformSurfaceFishingVesselSubcategories {
13357    #[must_use]
13358    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13359        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13360    }
13361}
13362
13363// SISO-REF-010-2023 PlatformSurfaceOtherVesselsSubcategories [UID 448]
13364#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13365pub enum PlatformSurfaceOtherVesselsSubcategories {
13366    #[default]
13367    GoFastBoat = 1,
13368    ResearchVessel = 2,
13369    HydrofoilVessel = 3,
13370    CableLayerVessel = 4,
13371    DredgerVessel = 5,
13372    JunkDhowVessel = 6,
13373    Catamaran = 7,
13374    Pontoon = 8,
13375    PersonalWaterCraft = 9,
13376    RefugeeRaft = 10,
13377}
13378
13379impl PlatformSurfaceOtherVesselsSubcategories {
13380    #[must_use]
13381    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13382        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13383    }
13384}
13385
13386// SISO-REF-010-2023 CryptoKeyIDCryptoMode [UID 449]
13387#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13388pub enum CryptoKeyIDCryptoMode {
13389    #[default]
13390    Baseband = 0,
13391    Diphase = 1,
13392}
13393
13394impl CryptoKeyIDCryptoMode {
13395    #[must_use]
13396    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13397        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13398    }
13399}
13400
13401// TODO(@anyone) Implement bitfields [UID 450 - 462]
13402
13403// SISO-REF-010-2023 Color [UID 463]
13404#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13405pub enum Color {
13406    #[default]
13407    NotSpecified = 0,
13408    WhiteVGA = 1,
13409    RedVGA = 2,
13410    YellowVGA = 3,
13411    LimeVGA = 4,
13412    CyanVGA = 5,
13413    BlueVGA = 6,
13414    MagentaVGA = 7,
13415    GreyVGA = 8,
13416    SilverVGA = 9,
13417    MaroonVGA = 10,
13418    OliveVGA = 11,
13419    GreenVGA = 12,
13420    TealVGA = 13,
13421    NavyVGA = 14,
13422    PurpleVGA = 15,
13423    Black = 20,
13424    Navy = 21,
13425    DarkBlue = 22,
13426    MediumBlue = 23,
13427    Blue = 24,
13428    DarkGreen = 25,
13429    Green = 26,
13430    Teal = 27,
13431    DarkCyan = 28,
13432    DeepSkyBlue = 29,
13433    DarkTurquoise = 30,
13434    MediumSpringGreen = 31,
13435    Lime = 32,
13436    SpringGreen = 33,
13437    Cyan = 34,
13438    MidnightBlue = 35,
13439    DodgerBlue = 36,
13440    LightSeaGreen = 37,
13441    ForestGreen = 38,
13442    SeaGreen = 39,
13443    DarkSlateGray = 40,
13444    LimeGreen = 41,
13445    MediumSeaGreen = 42,
13446    Turquoise = 43,
13447    RoyalBlue = 44,
13448    SteelBlue = 45,
13449    DarkSlateBlue = 46,
13450    MediumTurquoise = 47,
13451    Indigo = 48,
13452    DarkOliveGreen = 49,
13453    CadetBlue = 50,
13454    CornflowerBlue = 51,
13455    MediumAquamarine = 52,
13456    DimGray = 53,
13457    SlateBlue = 54,
13458    OliveDrab = 55,
13459    SlateGray = 56,
13460    LightSlateGray = 57,
13461    MediumSlateBlue = 58,
13462    LawnGreen = 59,
13463    Chartreuse = 60,
13464    Aquamarine = 61,
13465    Maroon = 62,
13466    Purple = 63,
13467    Olive = 64,
13468    Gray = 65,
13469    Grey = 66,
13470    SkyBlue = 67,
13471    LightSkyBlue = 68,
13472    BlueViolet = 69,
13473    DarkRed = 70,
13474    DarkMagenta = 71,
13475    SaddleBrown = 72,
13476    DarkSeaGreen = 73,
13477    LightGreen = 74,
13478    MediumPurple = 75,
13479    DarkViolet = 76,
13480    PaleGreen = 77,
13481    DarkOrchid = 78,
13482    YellowGreen = 79,
13483    Sienna = 80,
13484    Brown = 81,
13485    DarkGray = 82,
13486    LightBlue = 83,
13487    GreenYellow = 84,
13488    PaleTurquoise = 85,
13489    LightSteelBlue = 86,
13490    PowderBlue = 87,
13491    FireBrick = 88,
13492    DarkGoldenRod = 89,
13493    MediumOrchid = 90,
13494    RosyBrown = 91,
13495    DarkKhaki = 92,
13496    Silver = 93,
13497    MediumVioletRed = 94,
13498    IndianRed = 95,
13499    Peru = 96,
13500    Chocolate = 97,
13501    Tan = 98,
13502    LightGray = 99,
13503    PaleVioletRed = 100,
13504    Thistle = 101,
13505    Orchid = 102,
13506    GoldenRod = 103,
13507    Crimson = 104,
13508    Gainsboro = 105,
13509    Plum = 106,
13510    BurlyWood = 107,
13511    LightCyan = 108,
13512    Lavender = 109,
13513    DarkSalmon = 110,
13514    Violet = 111,
13515    PaleGoldenRod = 112,
13516    LightCoral = 113,
13517    Khaki = 114,
13518    AliceBlue = 115,
13519    HoneyDew = 116,
13520    Azure = 117,
13521    SandyBrown = 118,
13522    Wheat = 119,
13523    Beige = 120,
13524    WhiteSmoke = 121,
13525    MintCream = 122,
13526    GhostWhite = 123,
13527    Salmon = 124,
13528    AntiqueWhite = 125,
13529    Linen = 126,
13530    LightGoldenRodYellow = 127,
13531    OldLace = 128,
13532    Red = 129,
13533    Fuchsia = 130,
13534    Magenta = 131,
13535    DeepPink = 132,
13536    OrangeRed = 133,
13537    Tomato = 134,
13538    HotPink = 135,
13539    Coral = 136,
13540    DarkOrange = 137,
13541    LightSalmon = 138,
13542    Orange = 139,
13543    LightPink = 140,
13544    Pink = 141,
13545    Gold = 142,
13546    PeachPuff = 143,
13547    NavajoWhite = 144,
13548    Moccasin = 145,
13549    Bisque = 146,
13550    MistyRose = 147,
13551    BlanchedAlmond = 148,
13552    PapayaWhip = 149,
13553    LavenderBlush = 150,
13554    SeaShell = 151,
13555    Cornsilk = 152,
13556    LemonChiffon = 153,
13557    FloralWhite = 154,
13558    Snow = 155,
13559    Yellow = 156,
13560    LightYellow = 157,
13561    Ivory = 158,
13562    White = 159,
13563}
13564
13565impl Color {
13566    #[must_use]
13567    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13568        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13569    }
13570}
13571
13572// SISO-REF-010-2023 BuildingPaintScheme [UID 464]
13573#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13574pub enum BuildingPaintScheme {
13575    #[default]
13576    Default = 0,
13577}
13578
13579impl BuildingPaintScheme {
13580    #[must_use]
13581    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13582        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13583    }
13584}
13585
13586// SISO-REF-010-2023 Season [UID 465]
13587#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13588pub enum Season {
13589    #[default]
13590    Summer = 0,
13591    Winter = 1,
13592    Spring = 2,
13593    Autumn = 3,
13594}
13595
13596impl Season {
13597    #[must_use]
13598    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13599        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13600    }
13601}
13602
13603// SISO-REF-010-2023 Material [UID 466]
13604#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13605pub enum Material {
13606    #[default]
13607    NotSpecified = 0,
13608    Plastic = 1,
13609    Rubber = 2,
13610    Road = 3,
13611}
13612
13613impl Material {
13614    #[must_use]
13615    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13616        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13617    }
13618}
13619
13620// SISO-REF-010-2023 Link11_11BFidelityLevel [UID 467]
13621#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13622pub enum Link11_11BFidelityLevel {
13623    #[default]
13624    FidelityLevel0 = 0,
13625    FidelityLevel1 = 1,
13626    FidelityLevel2 = 2,
13627}
13628
13629impl Link11_11BFidelityLevel {
13630    #[must_use]
13631    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13632        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13633    }
13634}
13635
13636// SISO-REF-010-2023 Link11TerminalMode [UID 468]
13637#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13638pub enum Link11TerminalMode {
13639    #[default]
13640    NoStatement = 0,
13641    NetworkControlStation = 1,
13642    Picket = 2,
13643}
13644
13645impl Link11TerminalMode {
13646    #[must_use]
13647    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13648        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13649    }
13650}
13651
13652// SISO-REF-010-2023 Link11DataTerminalSetIndicator [UID 469]
13653#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13654#[deprecated(note = "Enumeration is deprecated and only serves an historical purpose")]
13655pub enum Link11DataTerminalSetIndicator {
13656    #[default]
13657    NoStatement = 0,
13658    Transmit = 1,
13659    Receive = 2,
13660    NetBusy = 3,
13661    TransmitDataError = 4,
13662    ReceiveDataError = 5,
13663    CodeError = 6,
13664    SynchronizationComplete = 7,
13665}
13666
13667impl Link11DataTerminalSetIndicator {
13668    #[must_use]
13669    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13670        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13671    }
13672}
13673
13674// SISO-REF-010-2023 Link11ModeofOperation [UID 470]
13675#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13676pub enum Link11ModeofOperation {
13677    #[default]
13678    NoStatement = 0,
13679    NetSync = 1,
13680    NetTest = 2,
13681    RollCall = 3,
13682    ShortBroadcast = 4,
13683    Broadcast = 5,
13684}
13685
13686impl Link11ModeofOperation {
13687    #[must_use]
13688    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13689        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
13690    }
13691}
13692
13693// SISO-REF-010-2023 LifeFormsSubcategoryIranianWeapons [UID 471]
13694#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13695pub enum LifeFormsSubcategoryIranianWeapons {
13696    #[default]
13697    Misagh2 = 1,
13698    RBS70 = 2,
13699}
13700
13701impl LifeFormsSubcategoryIranianWeapons {
13702    #[must_use]
13703    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13704        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13705    }
13706}
13707
13708// SISO-REF-010-2023 LifeFormLandCategories [UID 472]
13709#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13710pub enum LifeFormLandCategories {
13711    #[default]
13712    ConventionalArmedForces = 10,
13713    Army = 11,
13714    NavalInfantry = 12,
13715    AirForce = 13,
13716    Navy = 14,
13717    CoastGuard = 15,
13718    UnitedNations = 16,
13719    SpecialOperationsForces = 30,
13720    LawEnforcement = 50,
13721    NonMilitaryNationalGovernmentAgencies = 70,
13722    RegionalLocalForces = 90,
13723    IrregularForces = 100,
13724    TerroristCombatant = 101,
13725    Insurgent = 102,
13726    ParamilitaryForces = 110,
13727    HumanitarianOrganizations = 120,
13728    Civilian = 130,
13729    EmergencyMedicalTechnician = 131,
13730    Firefighter = 132,
13731    Press = 133,
13732    Mammal = 200,
13733    Reptile = 201,
13734    Amphibian = 202,
13735    Insect = 203,
13736    Arachnid = 204,
13737    Mollusk = 205,
13738    Marsupial = 206,
13739}
13740
13741impl LifeFormLandCategories {
13742    #[must_use]
13743    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13744        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13745    }
13746}
13747
13748// SISO-REF-010-2023 LifeFormHumanSubcategoryEquipmentClass [UID 473]
13749#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13750pub enum LifeFormHumanSubcategoryEquipmentClass {
13751    #[default]
13752    None = 0,
13753    WeaponNonspecific = 1,
13754    AssaultRifles = 5,
13755    HighPowerRifles = 10,
13756    SniperRifles = 15,
13757    AntiMaterielRifle = 17,
13758    SubMachineGuns = 20,
13759    ShotGuns = 25,
13760    GrenadeLaunchers = 30,
13761    MachineGuns = 35,
13762    GrenadeLaunchingMachineGun = 40,
13763    AntiTankRockets = 45,
13764    AntiTankMissiles = 50,
13765    AntiTankGuns = 55,
13766    FlameRockets = 60,
13767    FlameThrowers = 65,
13768    RocketLaunchers = 70,
13769    Mortars = 75,
13770    HandGuns = 80,
13771    ManPortableAirDefenseSystem = 85,
13772    RecoillessRifles = 90,
13773    DroneGuns = 95,
13774    EquipmentNonspecific = 150,
13775    Sensors = 151,
13776    SignalSensor = 152,
13777    Lasers = 153,
13778    AnimalCompanion = 160,
13779    PersonalElectronics = 171,
13780    LogisticsEquipment = 172,
13781}
13782
13783impl LifeFormHumanSubcategoryEquipmentClass {
13784    #[must_use]
13785    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13786        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13787    }
13788}
13789
13790// SISO-REF-010-2023 LifeFormHumanSpecificAssaultRifles [UID 474]
13791#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13792#[allow(non_camel_case_types)]
13793pub enum LifeFormHumanSpecificAssaultRifles {
13794    #[default]
13795    Other = 0,
13796    _4_5mmInterdynamicsMKR = 1,
13797    _5_45mmAK74 = 10,
13798    _5_45mmAKS74 = 11,
13799    _5_45mmAK74M = 12,
13800    _5_45mmKbkwz_1988Tantal = 13,
13801    _5_56mmAK101 = 30,
13802    _5_56mmDiemacoC7 = 31,
13803    _5_56mmColtCanadaC8Carbine = 32,
13804    _5_56mmGIATFAMASG2 = 33,
13805    _5_56mmFNFNC = 34,
13806    _5_56mmHKG36 = 35,
13807    _5_56mmIMIGalil = 36,
13808    _5_56mmINSAS = 37,
13809    _5_56mmDaewooK1 = 38,
13810    _5_56mmDaewooK2 = 39,
13811    _5_56mmM16A1 = 40,
13812    _5_56mmM16A2A3A4 = 41,
13813    _5_56mmColtM4 = 42,
13814    _5_56mmColtM4SpecialOperationsPeculiarModification = 43,
13815    _5_56mmRugerMini14 = 44,
13816    _5_56mmEnfieldSA80A2 = 45,
13817    _5_56mmPindadSS1V1 = 46,
13818    _5_56mmPindadSS1V2 = 47,
13819    _5_56mmPindadSS1V3 = 48,
13820    _5_56mmSteyrAUGA1 = 49,
13821    _5_56mmT65 = 50,
13822    _5_56mmT91 = 51,
13823    _5_56mmTavorTAR21 = 52,
13824    _5_56mmTypeCQM311 = 53,
13825    _5_56mmDaewooK11 = 54,
13826    _5_56mmAusteyrF88 = 55,
13827    _5_56mmAusteyrF88GLA = 56,
13828    _5_56mmAusteyrF88SA1 = 57,
13829    _5_56mmAusteyrF88SA2 = 58,
13830    _5_56mmAusteyrF88C = 59,
13831    _5_56mmAusteyrF88SA1C = 60,
13832    _5_56mmAusteyrF88SA1LTR = 61,
13833    _5_56mmAusteyrEF88 = 62,
13834    _5_56mmBushmasterXM15 = 63,
13835    _5_56mmHK416 = 64,
13836    _5_56mmF90 = 65,
13837    _5_56mmF90G = 66,
13838    _5_56mmF90M = 67,
13839    _5_56mmF90MG = 68,
13840    _5_56mmF90CQB = 69,
13841    _5_56mmMK17SCARL = 70,
13842    _5_8mmQBZ95 = 100,
13843    _7_62mmAK103 = 110,
13844    _7_62mmAK104 = 111,
13845    _7_62mmAK47 = 112,
13846    _7_62mmAKM = 113,
13847    _7_62mmAKS47 = 114,
13848    _7_62mmHKG3A3 = 115,
13849    _7_62mmIMIGalil = 116,
13850    _7_62mmKLS = 117,
13851    _7_62mmSKS = 118,
13852    _7_62mmType56 = 119,
13853    _7_62mmType6368 = 120,
13854    _7_62mmType81 = 121,
13855    _7_62mmMK17SCARH = 122,
13856    _8mmLebelM16 = 240,
13857}
13858
13859impl LifeFormHumanSpecificAssaultRifles {
13860    #[must_use]
13861    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13862        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13863    }
13864}
13865
13866// SISO-REF-010-2023 LifeFormHumanSpecificHighPowerRifles [UID 475]
13867#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13868pub enum LifeFormHumanSpecificHighPowerRifles {
13869    #[default]
13870    Other = 0,
13871    _7_62mmM14 = 10,
13872    _7_62mmRemington700 = 11,
13873    _7_62mmSIGSauerSSG2000 = 12,
13874    _7_62mmStonerSR25 = 13,
13875    _7_62mmMosinNagantModel189130 = 14,
13876    _7_62mmHK417 = 15,
13877    _7_62mmHK41716Recce = 16,
13878    _7_65mmBARM1918 = 50,
13879    _7_65mmM1Garand = 51,
13880}
13881
13882impl LifeFormHumanSpecificHighPowerRifles {
13883    #[must_use]
13884    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13885        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13886    }
13887}
13888
13889// SISO-REF-010-2023 LifeFormCategoriesUS [UID 476]
13890#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13891pub enum LifeFormCategoriesUS {
13892    #[default]
13893    USArmy = 11,
13894    USMarineCorps = 12,
13895    USAirForce = 13,
13896    USNavy = 14,
13897    USCoastGuard = 15,
13898    Rangers = 31,
13899    ARSOF = 32,
13900    ForceReconnaissance = 33,
13901    NavySEAL = 34,
13902    AFSOF = 35,
13903    DeltaForce = 36,
13904    FederalBureauofInvestigation = 51,
13905    CentralIntelligenceAgency = 52,
13906    DepartmentofHomelandSecurity = 53,
13907    BureauofAlcoholTobaccoFirearmsandExplosives = 54,
13908    USSecretService = 55,
13909    USMarshal = 56,
13910    StatePolice = 71,
13911    CountySheriffPolice = 72,
13912    MunicipalPolice = 73,
13913    RedCross = 124,
13914}
13915
13916impl LifeFormCategoriesUS {
13917    #[must_use]
13918    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13919        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13920    }
13921}
13922
13923// SISO-REF-010-2023 LifeFormExtraPersonalData [UID 477]
13924#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13925pub enum LifeFormExtraPersonalData {
13926    #[default]
13927    NotSpecifiedMale = 0,
13928    AsianMale = 1,
13929    PacificIslanderMale = 2,
13930    BlackMale = 3,
13931    EastAsianMale = 4,
13932    HispanicMale = 5,
13933    WhiteMale = 6,
13934    ArabMale = 7,
13935    HomogenousCountryCodeMale = 8,
13936    IndigenousCountryCodeMale = 9,
13937    InfantMale = 10,
13938    ToddlerMale = 20,
13939    ChildMale = 30,
13940    AdolescentMale = 40,
13941    TeenagerMale = 50,
13942    YoungAdultMale = 60,
13943    AdultMale = 70,
13944    SeniorAdultMale = 80,
13945    ElderlyMale = 90,
13946    Female = 100,
13947    AsianFemale = 101,
13948    PacificIslanderFemale = 102,
13949    BlackFemale = 103,
13950    EastAsianFemale = 104,
13951    HispanicFemale = 105,
13952    WhiteFemale = 106,
13953    ArabFemale = 107,
13954    HomogenousCountryCodeFemale = 108,
13955    IndigenousCountryCodeFemale = 109,
13956    InfantFemale = 110,
13957    ToddlerFemale = 120,
13958    ChildFemale = 130,
13959    AdolescentFemale = 140,
13960    TeenagerFemale = 150,
13961    YoungAdultFemale = 160,
13962    AdultFemale = 170,
13963    SeniorAdultFemale = 180,
13964    ElderlyFemale = 190,
13965}
13966
13967impl LifeFormExtraPersonalData {
13968    #[must_use]
13969    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13970        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13971    }
13972}
13973
13974// SISO-REF-010-2023 LifeFormAirCategories [UID 478]
13975#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13976pub enum LifeFormAirCategories {
13977    #[default]
13978    Bird = 200,
13979    Insect = 201,
13980    Mammal = 202,
13981}
13982
13983impl LifeFormAirCategories {
13984    #[must_use]
13985    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
13986        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
13987    }
13988}
13989
13990// SISO-REF-010-2023 LifeFormSubsurfaceCategories [UID 479]
13991#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
13992pub enum LifeFormSubsurfaceCategories {
13993    #[default]
13994    Fish = 200,
13995    Mammal = 201,
13996    Mollusk = 202,
13997    Crustacean = 203,
13998    Insect = 204,
13999}
14000
14001impl LifeFormSubsurfaceCategories {
14002    #[must_use]
14003    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14004        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14005    }
14006}
14007
14008// TODO(@anyone) Implement bitfield UID 480
14009
14010// SISO-REF-010-2023 LifeFormHumanSpecificSniper [UID 481]
14011#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14012#[allow(non_camel_case_types)]
14013pub enum LifeFormHumanSpecificSniper {
14014    #[default]
14015    Other = 0,
14016    _5_8mmQBU88 = 1,
14017    _7_62mmC3 = 30,
14018    _7_62mmFRF2 = 31,
14019    _7_62mmAWMF = 32,
14020    _7_62mmG3SG1 = 33,
14021    _7_62mmGalilSniper = 34,
14022    _7_62mmL96A1 = 35,
14023    _7_62mmM14DMR = 36,
14024    _7_62mmM24SniperWeaponSystem = 37,
14025    _7_62mmM40A1A3 = 38,
14026    _7_62mmSteyrSSG69 = 39,
14027    _7_62mmSVD = 40,
14028    _7_62mmTYPE79 = 41,
14029    _7_62mmSR25MK11 = 42,
14030    _7_62mmAWSR98 = 43,
14031    _7_62mmBlaserR93 = 44,
14032    _7_62mmM2010EnhancedSniperRifle = 45,
14033    _7_62mmM110SemiAutomaticSniperSystem = 46,
14034    _7_62mmL129A1 = 47,
14035    _7_7mmTYPE99 = 100,
14036    _8_58mmBlaserR93Tactical2 = 105,
14037    _9mmVSSVintorez = 110,
14038    _12_7mmSteyrHS_50 = 170,
14039    _12_7mmM82A1ASpecialApplicationsScopedRifle = 171,
14040    _12_7mmNSV = 172,
14041    _12_7mmOSV96 = 173,
14042    _12_7mmRangemaster50 = 174,
14043    _12_7mmV94 = 175,
14044    _12_7mmM107 = 176,
14045    _20mmDenelNTW20 = 200,
14046}
14047
14048impl LifeFormHumanSpecificSniper {
14049    #[must_use]
14050    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14051        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14052    }
14053}
14054
14055// SISO-REF-010-2023 LifeFormHumanSpecificSubMachineGun [UID 482]
14056#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14057pub enum LifeFormHumanSpecificSubMachineGun {
14058    #[default]
14059    Other = 0,
14060    _5_45mmAKS74U = 10,
14061    _5_56mmDaewooK1A = 20,
14062    _9mmDaewooK7 = 60,
14063    _9mmMAC10 = 61,
14064    _9mmMadsenMKII = 62,
14065    _9mmMiniUzi = 63,
14066    _9mmModel83SkorpionSMG = 64,
14067    _9mmMP5A2 = 65,
14068    _9mmMP5N = 66,
14069    _9mmSterlingSMG = 67,
14070    _9mmTypeCF05 = 68,
14071    _9mmUzi = 69,
14072}
14073
14074impl LifeFormHumanSpecificSubMachineGun {
14075    #[must_use]
14076    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14077        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14078    }
14079}
14080
14081// TODO(@anyone) Implement bitfields [UID 483 - 489]
14082
14083// SISO-REF-010-2023 AustralianCategoryOverlay [UID 500]
14084#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14085pub enum AustralianCategoryOverlay {
14086    #[default]
14087    AustralianArmy = 11,
14088    RoyalAustralianAirForce = 13,
14089    RoyalAustralianNavy = 14,
14090    AustralianSpecialOperationsCommand = 30,
14091    AustralianDepartmentofHomeAffairs = 51,
14092    AustralianFederalPolice = 52,
14093}
14094
14095impl AustralianCategoryOverlay {
14096    #[must_use]
14097    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14098        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14099    }
14100}
14101
14102// SISO-REF-010-2023 LifeFormCategoriesAfghanistan [UID 501]
14103#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14104pub enum LifeFormCategoriesAfghanistan {
14105    #[default]
14106    AfghanNationalArmy = 11,
14107    AfghanAirForce = 13,
14108    NationalDirectorateofSecurity = 51,
14109    AfghanNationalPolice = 52,
14110    AfghanBorderPolice = 53,
14111    AfghanNationalCivilOrderPolice = 54,
14112    AfghanPublicProtectionForce = 55,
14113    NonMilitaryNationalGovernmentAgencies = 70,
14114    TerroristCombatant = 101,
14115    HumanitarianOrganizations = 120,
14116    RedCrescent = 121,
14117    Civilian = 130,
14118    Press = 133,
14119}
14120
14121impl LifeFormCategoriesAfghanistan {
14122    #[must_use]
14123    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14124        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14125    }
14126}
14127
14128// SISO-REF-010-2023 LifeFormHumanSpecificEquipmentClass [UID 505]
14129#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14130pub enum LifeFormHumanSpecificEquipmentClass {
14131    #[default]
14132    SignalSmoke = 1,
14133    FlashLight = 2,
14134    SignalMirror = 3,
14135    IRStrobe = 4,
14136    IRIlluminator = 5,
14137    Spotlight = 6,
14138}
14139
14140impl LifeFormHumanSpecificEquipmentClass {
14141    #[must_use]
14142    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14143        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14144    }
14145}
14146
14147// SISO-REF-010-2023 CivilianSubmarineSubcategories [UID 506]
14148#[derive(Copy, Clone, Debug, FromPrimitive, PartialEq, Eq)]
14149pub enum CivilianSubmarineSubcategories {}
14150
14151impl CivilianSubmarineSubcategories {
14152    pub fn deserialize(_buf: &mut BytesMut) -> Self {
14153        unimplemented!()
14154    }
14155}
14156
14157// SISO-REF-010-2023 PlatformSubsurfaceCivilianSubmersibleSubcategories [UID 507]
14158#[derive(Copy, Clone, Debug, FromPrimitive, PartialEq, Eq)]
14159pub enum CivilianSubmersibleSubcategories {}
14160
14161impl CivilianSubmersibleSubcategories {
14162    pub fn deserialize(_buf: &mut BytesMut) -> Self {
14163        unimplemented!()
14164    }
14165}
14166
14167// SISO-REF-010-2023 PlatformSubsurfaceCivilianSemiSubmersiblesSubcategories [UID 508]
14168#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14169pub enum PlatformSubsurfaceCivilianSemiSubmersiblesSubcategories {
14170    #[default]
14171    NarcoSubmarine = 1,
14172}
14173
14174impl PlatformSubsurfaceCivilianSemiSubmersiblesSubcategories {
14175    #[must_use]
14176    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14177        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14178    }
14179}
14180
14181// SISO-REF-010-2023 LeafCoverage [UID 509]
14182#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14183pub enum LeafCoverage {
14184    #[default]
14185    Normal = 0,
14186    Bare = 1,
14187}
14188
14189impl LeafCoverage {
14190    #[must_use]
14191    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14192        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14193    }
14194}
14195
14196// SISO-REF-010-2023 LifeFormHumanSpecificAntiMaterielRifles [UID 510]
14197#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14198pub enum LifeFormHumanSpecificAntiMaterielRifles {
14199    #[default]
14200    Other = 0,
14201    _12_7mmAW50 = 10,
14202    _12_7mmAW50F = 11,
14203}
14204
14205impl LifeFormHumanSpecificAntiMaterielRifles {
14206    #[must_use]
14207    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14208        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14209    }
14210}
14211
14212// SISO-REF-010-2023 LifeFormHumanSpecificShotGuns [UID 511]
14213#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14214#[allow(non_camel_case_types)]
14215pub enum LifeFormHumanSpecificShotGuns {
14216    #[default]
14217    Other = 0,
14218    BrowningSuperposedOU = 20,
14219    BrowningCynergy = 21,
14220    BrowningAuto5 = 22,
14221    _18_5mmBrowningCitoriOU12Gauge = 23,
14222    _16_8mmBrowningCitoriOU16Gauge = 24,
14223    _15_6mmBrowningCitoriOU20Gauge = 25,
14224    _14mmBrowningCitoriOU28Gauge = 26,
14225    _10_4mmBrowningCitoriOU_410Bore = 27,
14226    _18_5mmBrowningDoubleAutomatic12Gauge = 28,
14227    _18_5mmIthaca3712Gauge = 29,
14228    _16_8mmIthaca3716Gauge = 30,
14229    _15_6mmIthaca3720Gauge = 31,
14230    _14mmIthaca3728Gauge = 32,
14231    _19_7mmIthacaMag10SA10Gauge = 33,
14232    _19_7mmMarlinModel5510Gauge = 34,
14233    _18_5mmMarlinModel5512Gauge = 35,
14234    _16_8mmMarlinModel5516Gauge = 36,
14235    _15_6mmMarlinModel5520Gauge = 37,
14236    _18_5mmMossberg50012Gauge = 38,
14237    _15_6mmMossberg50020Gauge = 39,
14238    _10_4mmMossberg500_410Bore = 40,
14239    _18_5mmMossberg59012Gauge = 41,
14240    _15_6mmMossberg59020Gauge = 42,
14241    _10_4mmMossberg590_410Bore = 43,
14242    _18_5mmMossberg930SA12Gauge = 44,
14243    RemingtonModel11SA = 45,
14244    RemingtonModel1012Gauge = 46,
14245    _15_6mmRemingtonModel1720Gauge = 47,
14246    RemingtonModel31 = 48,
14247    RemingtonModel1148SA = 49,
14248    _18_5mmRemington87012Gauge = 50,
14249    _16_8mmRemington87016Gauge = 51,
14250    _15_6mmRemington87020Gauge = 52,
14251    _14mmRemington87028Gauge = 53,
14252    _10_4mmRemington870_410Bore = 54,
14253    RemingtonModel58SA = 55,
14254    _18_5mmRemington878SA12Gauge = 56,
14255    _18_5mmRemingtonModel1100SA12Gauge = 57,
14256    _16_8mmRemingtonModel1100SA16Gauge = 58,
14257    _15_6mmRemingtonModel1100SA20Gauge = 59,
14258    _14mmRemingtonModel1100SA28Gauge = 60,
14259    _10_4mmRemingtonModel1100SA_410Bore = 61,
14260    _18_5mmRemington1187SA12Gauge = 62,
14261    _15_6mmRemington1187SA20Gauge = 63,
14262    _19_7mmRemingtonModelSP10SA10Gauge = 64,
14263    _18_5mmRemington88712Gauge = 65,
14264    _18_5mmRemingtonSparta100SxS12Gauge = 70,
14265    _15_6mmRemingtonSparta100SxS20Gauge = 71,
14266    _10_4mmRemingtonSparta100SxS_410Bore = 72,
14267    _18_5mmRemingtonSpartan310OU12Gauge = 73,
14268    _15_6mmRemingtonSpartan310OU20Gauge = 74,
14269    _14mmRemingtonSpartan310OU28Gauge = 75,
14270    _10_4mmRemingtonSpartan310OU_410Bore = 76,
14271    _18_5mmRemingtonSpartan453SA12Gauge = 77,
14272    _18_5mmWinchesterModel120012Gauge = 80,
14273    _16_8mmWinchesterModel120016Gauge = 81,
14274    _15_6mmWinchesterModel120020Gauge = 82,
14275    WinchesterModel18871901 = 83,
14276    WinchesterModel1897 = 84,
14277    WinchesterModel1912 = 85,
14278    WinchesterModel21SxS = 86,
14279    WinchesterModel37SxS = 87,
14280    _18_5mmHRUltraslugSxS12Gauge = 88,
14281    _15_6mmHRUltraslugSxS20Gauge = 89,
14282    _18_5mmCienerUltimateOU12Gauge = 90,
14283    _18_5mmCoachGunSxSDoubleBarrel12Gauge = 91,
14284    _18_5mmRugerGoldLabelSxS12Gauge = 92,
14285    _18_5mmHighStandardModel10SA12Gauge = 93,
14286    _18_5mmKelTexKSG12Gauge = 94,
14287    _18_5KACMasterkey12Gauge = 95,
14288    _18_5mmM26M_A_S_S_12Gauge = 96,
14289    _18_5mmSRMArmsM1216SA12Gauge = 97,
14290    _18_5mmAA12FAAtchissonAssault = 98,
14291    _18_5mmPancorJackhammerFA12Gauge = 99,
14292    _18_5mmUSAS12FA12Gauge = 110,
14293    _18_5mmMAULSA12Gauge = 111,
14294    _18_5mmFNSLPSA12Gauge = 112,
14295    _18_5mmFNTPS12Gauge = 113,
14296    _18_5mmENARMPentagunSA12Gauge = 115,
14297    StevensModel520620 = 116,
14298    StoegerCoachGunSxS = 117,
14299    StoegerCondorOU = 118,
14300    _18_5mmArmscorModel30SA12Gauge = 120,
14301    WeatherbySA08SA = 121,
14302    _18_5mmFabarmSDASSTactical12Gauge = 122,
14303    _18_5mmMAG712Gauge = 123,
14304    _18_5mmNeostead12Gauge = 124,
14305    _18_5mmArmselStrikerSA12Gauge = 125,
14306    _18_5mmParkerHaleRogunSA12Gauge = 127,
14307    _26mmRGA86Revolver = 130,
14308    _18_5mmSjorgrenSA12Gauge = 131,
14309    _18_5mmAkdalMKA1919SA12Gauge = 132,
14310    _18_5mmRetayMasaiMaraSA12Gauge = 133,
14311    _18_5mmSafirT14SA12Gauge = 134,
14312    _18_5mmBenelliM1Super90SA12Gauge = 150,
14313    _15_6mmBenelliM1Super90SA20Gauge = 151,
14314    _18_5mmBenelliM3Super90SA12Gauge = 152,
14315    _15_6mmBenelliM3Super90SA20Gauge = 153,
14316    _18_5mmBenelliM4Super90SA12Gauge = 154,
14317    _18_5mmBenelliNova12Gauge = 155,
14318    _15_6mmBenelliNove20Gauge = 156,
14319    _18_5mmBenelliRaffaelloSA12Gauge = 157,
14320    _18_5mmBenelliSupernova12Gauge = 158,
14321    _18_5mmBenelliVinciSA12Gauge = 159,
14322    _18_5mmBeretta1201FPSA12Gauge = 160,
14323    _18_5mmBeretta682OU12Gauge = 161,
14324    _15_6mmBeretta682OU20Gauge = 162,
14325    _14mmBeretta682OU28Gauge = 163,
14326    _10_4mmBeretta682OU_410Bore = 164,
14327    _18_5mmBerettaA303SA12Gauge = 165,
14328    _18_5mmBerettaAL391SA12Gauge = 166,
14329    _15_6mmBerettaAL391SA20Gauge = 167,
14330    _18_5mmBerettaDT10OU12Gauge = 168,
14331    BerettaSilverPigeonOU = 169,
14332    _18_5mmBerettaXtrema2SA12Gauge = 170,
14333    _15_6mmFranchiAL48SA20Gauge = 171,
14334    _14mmFranchiAL48SA28Gauge = 172,
14335    _10_4mmFranchimod_410FA_410Bore = 173,
14336    _18_5mmFranchiSPAS12SA12Gauge = 174,
14337    _18_5mmFranchiSPAS15SA12Gauge = 175,
14338    _18_5mmValtroPM5PM535012Gauge = 176,
14339    BlazerF3OU = 180,
14340    _18_5mmHKFABARMFP612Gauge = 181,
14341    _18_5mmHKCAWSFA12Gauge = 182,
14342    _18_5mmBaikalMP153SA12Gauge = 200,
14343    _18_5mmBandayevskyRB1212Gauge = 201,
14344    _18_5mmMolotBekasM12Gauge = 202,
14345    _16_8mmMolotBekasM16Gauge = 203,
14346    _18_5mmTOZ19412Gauge = 204,
14347    _23mmKS23 = 205,
14348    MTs255Revoler12Gauge = 206,
14349    _18_5mmRMB9312Gauge = 207,
14350    _18_5mmSaiga12SA12Gauge = 208,
14351    _15_6mmSaiga12SA20Gauge = 209,
14352    _10_4mmSaiga12SA_410Bore = 210,
14353    _18_5mmVepr12SA12Gauge = 211,
14354    _18_5mmFort50012Gauge = 212,
14355    _18_5mmNorincoHP9112Gauge = 220,
14356}
14357
14358impl LifeFormHumanSpecificShotGuns {
14359    #[must_use]
14360    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14361        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14362    }
14363}
14364
14365// SISO-REF-010-2023 LifeFormHumanSpecificMortars [UID 512]
14366#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14367pub enum LifeFormHumanSpecificMortars {
14368    #[default]
14369    Others = 0,
14370    _60mmM224 = 30,
14371    _81mmF2 = 50,
14372    _81mmL16 = 51,
14373    _81mmM252 = 52,
14374}
14375
14376impl LifeFormHumanSpecificMortars {
14377    #[must_use]
14378    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14379        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14380    }
14381}
14382
14383// SISO-REF-010-2023 LifeFormHumanSpecificHandGuns [UID 513]
14384#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14385pub enum LifeFormHumanSpecificHandGuns {
14386    #[default]
14387    Other = 0,
14388    _5_45mmPSM = 1,
14389    _9mmMK3SLP = 30,
14390    _9mmBeretta92S92FS = 31,
14391    _9mmHKUSP = 32,
14392    _9mmStechkinAPS = 33,
14393    _9mmMakarovPM = 34,
14394    _9mmSmithandWessonSD = 35,
14395    _9mmGlock17 = 36,
14396    _9mmSIGSauerM17 = 37,
14397    _9mmSIGPro = 38,
14398    _9mmSmithandWessonSW1911 = 39,
14399    _9mmSmithandWesson5900series = 40,
14400    _45CalM1911 = 41,
14401    _9_07mmRugerGP100 = 50,
14402    _10mmGlock20 = 60,
14403}
14404
14405impl LifeFormHumanSpecificHandGuns {
14406    #[must_use]
14407    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14408        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14409    }
14410}
14411
14412// SISO-REF-010-2023 LifeFormHumanSpecificWeaponNonspecific [UID 514]
14413#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14414pub enum LifeFormHumanSpecificWeaponNonspecific {
14415    #[default]
14416    Other = 0,
14417    Knife = 10,
14418    Machete = 50,
14419    ExplosiveVest = 100,
14420    M18A1Claymore = 150,
14421}
14422
14423impl LifeFormHumanSpecificWeaponNonspecific {
14424    #[must_use]
14425    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14426        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14427    }
14428}
14429
14430// SISO-REF-010-2023 LifeFormHumanSpecificGrenadeLaunchers [UID 515]
14431#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14432pub enum LifeFormHumanSpecificGrenadeLaunchers {
14433    #[default]
14434    Other = 0,
14435    _40x46mmArsenalUGGLM1 = 1,
14436    _40x46mmArsenalMSGL = 2,
14437    _40mmVOGArsenalMSGL = 3,
14438    _40x46mmArsenalUBGLM16 = 4,
14439    _40x46mmArsenalUBGLM8 = 5,
14440    _40x46mmArsenalUBGLM7 = 6,
14441    _30mmBS1Tishina = 10,
14442    _40mmBTS203 = 11,
14443    _40mmIndumilIMC40 = 12,
14444    _40mmVOGBG15 = 20,
14445    _40mmVOGGP25Kostoyor = 21,
14446    _40mmVOGGP30Obuvka = 22,
14447    _40mmVOGGP34 = 23,
14448    _40mmVOGRGM40Kastet = 24,
14449    _40mmVOGRG6 = 25,
14450    _40x46mmM79 = 30,
14451    _40x46mmM203 = 31,
14452    _40x36mmM320 = 32,
14453    _40x46mmCIS40GL = 35,
14454    _40x46mmEAGLEGL = 36,
14455    _40x46mmHKAG36 = 37,
14456    _40x46mmHKAGCGLM = 38,
14457    _40x46mmHK69A1 = 39,
14458    _40x46mmBerettaGLX160 = 40,
14459    _40x46mmARDEUBGL = 41,
14460    _40x46mmXML148 = 42,
14461    _40x46mmChinaLakeGL = 43,
14462    _40x46mmHawkMM1 = 44,
14463    _25x40mmXM25CDTE = 50,
14464    _37mmMilkor3738LLStopper = 60,
14465    _40mmMilkor40GL = 61,
14466    _40mmMilkorMGL = 62,
14467    _40x47mmPalladwz1974 = 65,
14468    _40x47mmPalladwz1983 = 66,
14469    UGL200CanisterRWGL3 = 70,
14470    _20x30mmSTDaewooK11 = 80,
14471    _35mmType91BreechLoadGL = 90,
14472    _40x53mmCZW40 = 95,
14473    _45mmDP64 = 100,
14474    _20x42mmNeopupPAW20 = 105,
14475}
14476
14477impl LifeFormHumanSpecificGrenadeLaunchers {
14478    #[must_use]
14479    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14480        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14481    }
14482}
14483
14484// SISO-REF-010-2023 LifeFormHumanSpecificMachineGuns [UID 516]
14485#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14486#[allow(non_camel_case_types)]
14487pub enum LifeFormHumanSpecificMachineGuns {
14488    #[default]
14489    Other = 0,
14490    _5_56x45mmXM214MicrogunSixPak = 10,
14491    _7_62x51mmM134XM196Minigun = 11,
14492    _5_56x45mmM249FNMinimiSAWLMG = 20,
14493    _5_56x45mmFNMinimiMk3LMG = 21,
14494    _7_62x51mmFNMinimi7_62Mk3GPMG = 22,
14495    _7_62x63mmM1941Johnson = 25,
14496    _7_62x63mmM1918BAR = 26,
14497    _7_62x51mmM1919A4Mk21Mod0BrowningMMG = 27,
14498    _7_62x63mmM1919A6BrowningMMG = 28,
14499    _7_62x51mmM37BrowningMMG = 29,
14500    _5_56x45mmAresShrike5_56LMG = 30,
14501    _5_56x45mmLSATLMG = 31,
14502    _5_56x45mmCMG1LMG = 32,
14503    _5_56x45mmCMG2LMG = 33,
14504    _5_56x45mmStoner63ALMG = 34,
14505    _5_56x45mmUltimax100LMG = 35,
14506    _5_56x54mmBerettaAS7090LMG = 36,
14507    _5_56x45mmCETMEAmeliLMG = 37,
14508    _5_56x45mmIMINegevLMG = 38,
14509    _5_56x45mmINSASLMG = 39,
14510    _5_56x45mmAUGLMG = 40,
14511    _5_56x45mmAUGHBARLMG = 41,
14512    _5_56x45mmHKMG4LMG = 43,
14513    _5_56x45mmHK23GR9LMG = 44,
14514    _5_56x45mmM27IARSAW = 46,
14515    _5_56x45mmL86LSW = 47,
14516    _5_56x45mmDaewooK3LMG = 48,
14517    _5_56x45mmVectorMiniSSGPMG = 49,
14518    _7_62x51mmM60GPMG = 50,
14519    _7_62x51mmM60E3GPMG = 51,
14520    _7_62x51mmM60E4GPMG = 52,
14521    _7_62x51mmM60E6GPMG = 53,
14522    _7_62x51mmMark48GMPG = 55,
14523    _7_62x51mmM240FNMAG58GPMG = 58,
14524    _7_62x51mmM240E4M240BGPMG = 59,
14525    _7_62x51mmM240E1M240DGPMG = 60,
14526    _7_62x51mmM240GGPMG = 61,
14527    _7_62x51mmM240E5M240HGPMG = 62,
14528    _7_62x51mmM240LGPMG = 63,
14529    _7_62x39mmKk62LMG = 65,
14530    _7_62x51mmVectorSS77GPMG = 70,
14531    _7_62x51mmSIGMG7103GPMG = 71,
14532    _7_62x51mmSterling7_62GMPG = 72,
14533    _7_62x51mmSumitomoType62GPMG = 73,
14534    _7_62x51mmDaewooK12GPMG = 74,
14535    _7_62x51mmMG51GPMG = 75,
14536    _7_62x51mmRheinmetallMG3 = 76,
14537    _7_62x51mmRheinmetallMG3KWS = 77,
14538    _7_62x51mmMG5HK121GPMG = 80,
14539    _7_62x51mmHK21GPMG = 81,
14540    _7_62x51mmAA52GPMP = 85,
14541    _7_62x51mmUKM2000GPMG = 86,
14542    _7_62x54mmUkvz_59GPMG = 88,
14543    _7_92x57mmMG42GPMG = 89,
14544    _12_7x99mmM2A1BrowningHMG = 100,
14545    _12_7x99mmM2HBBrowningHMG = 101,
14546    _12_7x99mmM2HBQCBBrowningHMG = 102,
14547    _12_7x99mmM85CHMG = 105,
14548    _12_7x99mmRheinmetallRMG_50HMG = 108,
14549    _12_7x99mmHK25HMG = 110,
14550    _12_7x99mmCIS50MG = 112,
14551    _5_45x39mmIP2LMG = 120,
14552    _5_45x39mmNikonovLMG = 121,
14553    _5_45x39mmM74RPK = 122,
14554    _7_62x39mmM43RPK = 125,
14555    _7_62x39mmRPDSAW = 126,
14556    _7_62x39mmZastavaM72 = 127,
14557    _7_62x39mmType81LMG = 128,
14558    _7_62x51mmZastavaM77 = 135,
14559    _7_62x54mmPKGPMG = 140,
14560    _7_62x54mmAEK999GPMP = 141,
14561    _7_62x54mmPechenegGPMG = 142,
14562    _7_62x54mmZastavaM84 = 143,
14563    _7_62x54mmType67GPMG = 144,
14564    _7_62x54mmType80GPMG = 145,
14565    _12_7x108mmNSVHMG = 150,
14566    _12_7x108mmKordHMG = 151,
14567    _12_7x108mmKPD12_7HMG = 152,
14568    _12_7x108mmZastavaM02CoyotoeHMG = 153,
14569    _12_7x108mmZastavaM87 = 154,
14570    _12_7x108mmType77HMG = 155,
14571    _12_7x108mmW85HMG = 156,
14572    _12_7x108mmType90HMG = 157,
14573    _5_8x42mmQJY88LMG = 164,
14574    _5_8x42mmQBB95DBP87LMG = 165,
14575    _5_56x45mmQBB951LMG = 166,
14576}
14577
14578impl LifeFormHumanSpecificMachineGuns {
14579    #[must_use]
14580    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14581        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14582    }
14583}
14584
14585// SISO-REF-010-2023 LifeFormHumanSpecificGrenadeLaunchingMachineGun [UID 517]
14586#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14587pub enum LifeFormHumanSpecificGrenadeLaunchingMachineGun {
14588    #[default]
14589    Other = 0,
14590    _40x53mmHKGMG = 20,
14591    _40x53mmMk47Striker = 25,
14592    _40mmM75 = 26,
14593    _40mmM129 = 27,
14594    _40x46mmXM174 = 28,
14595    _40x46mmMk18Mod0 = 29,
14596    _40x53mmMk19 = 30,
14597    _40x46mmMk20Mod0 = 31,
14598    _30x29mmRAG30SAG30 = 40,
14599    _30x29mmAGS17Plamya = 41,
14600    _30x29mmAGS30Atlant = 42,
14601    _40mmVOGAGS40Balkan = 43,
14602    _40x53mmSBLAG40 = 44,
14603    _40x53mmVektorY3 = 50,
14604    _40x53mmCIS40 = 55,
14605    _40x56mmHowaType96 = 60,
14606    _40x53mmDaewooPrecisionIndustriesK4 = 65,
14607    _25x59mmXM307AdvancedCrewServedWeapon = 70,
14608    _35x32mmQLZ87 = 80,
14609}
14610
14611impl LifeFormHumanSpecificGrenadeLaunchingMachineGun {
14612    #[must_use]
14613    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14614        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14615    }
14616}
14617
14618// SISO-REF-010-2023 LifeFormHumanSpecificAntiTankRockets [UID 518]
14619#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14620pub enum LifeFormHumanSpecificAntiTankRockets {
14621    #[default]
14622    Other = 0,
14623    _82mmB300 = 10,
14624    _82mmShipon = 11,
14625    _83mmMK153Mod0SMAW = 12,
14626    _66mmM72LAW = 20,
14627    _66mmM72A1LAW = 21,
14628    _66mmM72A2LAW = 22,
14629    _66mmM72A3LAW = 23,
14630    _66mmM72A4LAW = 24,
14631    _66mmM72A5LAW = 25,
14632    _66mmM72A6LAW = 26,
14633    _66mmM72A7LAW = 27,
14634    _66mmM72E8LAW = 28,
14635    _66mmM72E9LAW = 29,
14636    _66mmM72E10LAW = 30,
14637    _66mmM72ASLAW = 31,
14638    _94mmLAW80 = 35,
14639    _60mmM1Bazooka = 40,
14640    _60mmM1A1Bazooka = 41,
14641    _60mmM9Bazooka = 42,
14642    _60mmM9A1Bazooka = 43,
14643    _89mmM20SuperBazooka = 44,
14644    _89mmM20A1SuperBazooka = 45,
14645    _89mmM20B1SuperBazooka = 46,
14646    _89mmM20A1B1SuperBazooka = 47,
14647    _89mmM25ThreeShotBazooka = 48,
14648    _89mmInstalazaM65 = 49,
14649    _90mmInstalazaC90 = 50,
14650    _90mmC90CR = 51,
14651    _90mmC90CRAM = 52,
14652    _90mmC90CRBK = 53,
14653    _90mmC90CRIN = 54,
14654    _60mmPzF3 = 60,
14655    _60mmPzF3IT = 61,
14656    _60mmPzF3Bunkerfaust = 62,
14657    _44mmPzF44 = 65,
14658    _30mmPanzerfaust30 = 70,
14659    _50mmPanzerfaust60 = 71,
14660    _60mmPanzerfaust100 = 72,
14661    _60mmPanzerfaust150 = 73,
14662    _88mmPanzerschreckRPzB = 75,
14663    _83mmRL83Blindicide = 80,
14664    _100mmRL100Blindicide = 81,
14665    _90mmM79Osa = 85,
14666    _64mmM80Zolja = 86,
14667    _67mmArmburstCrossbow = 90,
14668    _40mmType69RPG = 93,
14669    _89mmPIAT = 95,
14670    _40mmRPG2 = 100,
14671    _64mmRPG18Mukha = 101,
14672    _72_5mmRPG22Netto = 102,
14673    _72_5mmRPG26Aglen = 103,
14674    _105mmRPG29Vampir = 104,
14675    _105mmRPG30Kryuk = 105,
14676    _105mmRPG32Nashshab = 106,
14677    _40mmRPG7 = 110,
14678    _40mmPSRL1 = 111,
14679    _40mmGS777PSRL2 = 112,
14680    _68mmRPG76Komar = 120,
14681    _120mmSEPDard120 = 125,
14682    _58mmWASP58 = 128,
14683    _73mmLRAC7350 = 130,
14684    _89mmLRAC89F1STRIM = 131,
14685    _90mmMATADOR = 135,
14686    _90mmMATADORMP = 136,
14687    _90mmMATADORWB = 137,
14688    _90mmMATADORAS = 138,
14689    _78mmMARAAntiTankRocketLauncher = 140,
14690    _120mmType98PF98 = 145,
14691}
14692
14693impl LifeFormHumanSpecificAntiTankRockets {
14694    #[must_use]
14695    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14696        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14697    }
14698}
14699
14700// SISO-REF-010-2023 LifeFormHumanSpecificAntiTankMissiles [UID 519]
14701#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14702#[allow(non_camel_case_types)]
14703pub enum LifeFormHumanSpecificAntiTankMissiles {
14704    #[default]
14705    Other = 0,
14706    _120mmType64MATKAM3 = 30,
14707    _153mmType79JyuMATKAM9 = 31,
14708    _120mmType87ChuMAT = 32,
14709    _140mmType01LMAT = 33,
14710    _140mmM47Dragon = 58,
14711    _140mmSaeghe12 = 59,
14712    _127mmFGM148Javelin = 60,
14713    _139mmFGM172SRAW = 63,
14714    _139mmFGM172BSRAWMPV = 64,
14715    _152mmBGM71TOW = 68,
14716    _152mmOrevTOWII = 69,
14717    _120mmVickersVigilantClevite = 75,
14718    _110mmBantam = 80,
14719    _150mmRBS56BILL1 = 81,
14720    _150mmRBS562BILL2 = 82,
14721    _130mmSpikeSR = 85,
14722    _130mmSpikeMR = 86,
14723    _130mmSpikeLR = 87,
14724    _60mmMosquito = 95,
14725    _160mmSS_10 = 98,
14726    _103mmMILAN = 100,
14727    _115mmMILAN2 = 101,
14728    _115mmMILAN2T = 102,
14729    _115mmMILAN3 = 103,
14730    _115mmMILANER = 104,
14731    _136mmERYX = 105,
14732    _152mmEntac = 107,
14733    _125mmRAAD = 110,
14734    _125mmIRAADT = 111,
14735    _152mmToophan = 112,
14736    _152mmToophan2 = 113,
14737    _152mmToophan5 = 114,
14738    _136mmBumbar = 120,
14739    _130mmShershenPK2 = 125,
14740    _152mmShershenQP2B = 126,
14741    _130mmMectronMSS1_2 = 130,
14742    _120mmHJ8 = 140,
14743    _120mmHJ8A = 141,
14744    _120mmHJ8B = 142,
14745    _120mmHJ8C = 143,
14746    _120mmHJ8D = 144,
14747    _120mmHJ8E = 145,
14748    _120mmHJ8F = 146,
14749    _120mmHJ8FAE = 147,
14750    _120mmHJ8L = 148,
14751    _120mmHJ8H = 149,
14752    _120mmHJ8S = 150,
14753    _120mmBaktarShikan = 151,
14754    _120mmHJ11 = 152,
14755    _152mmHJ9A = 153,
14756    _135mmHJ12RedArrow = 154,
14757    _125mmHJ73MCLOS = 155,
14758    _125mmHJ73BSACLOS = 156,
14759    _125mmHJ73CSACLOSERA = 157,
14760    _125mmAT3SaggerA9M14Malyutka = 170,
14761    _125mmAT3BSaggerB9M14MMalyutkaM = 171,
14762    _125mmAT3CSaggerC9M14PMalyutkaP = 172,
14763    _125mmAT3DSaggerD9M142Malyutka2 = 173,
14764    _125mmSusongPo = 174,
14765    _125mmAT3CPOLK = 175,
14766    _125mmKunWu1 = 176,
14767    _125mmMaliutkaM2T = 177,
14768    _120mmAT4ASpigotA9M111Fagot = 178,
14769    _120mmAT4BSpigotB9M1112Fagot = 179,
14770    _120mmAT4CSpigotC9M111MFaktoriya = 180,
14771    _135mmAT5ASpandrel9M113Kronkurs = 181,
14772    _135mmAT5BSpandrel9M113MKronkursM = 182,
14773    _135mmTosan = 183,
14774    _94mmAT7Saxhorn9K115Metis = 184,
14775    _130mmAT13Saxhorn29K1152MetisM = 185,
14776    _152mmAT14Spriggan9M133Kornet = 186,
14777    _152mmDehlavie = 187,
14778    _102mmMathogo = 200,
14779}
14780
14781impl LifeFormHumanSpecificAntiTankMissiles {
14782    #[must_use]
14783    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14784        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14785    }
14786}
14787
14788// SISO-REF-010-2023 LifeFormHumanSpecificManPortableAirDefenseSystem [UID 520]
14789#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14790pub enum LifeFormHumanSpecificManPortableAirDefenseSystem {
14791    #[default]
14792    Other = 0,
14793    _70mmFIM43Redeye = 1,
14794    _70mmFIM92Stinger = 2,
14795    _76mmBlowpipe = 10,
14796    _76mmStarburst = 11,
14797    _130mmStarstreakHVM = 12,
14798    _90mmMistral = 15,
14799    _72mm9K32MStrela2 = 20,
14800    _72mm9K36Strela3 = 21,
14801    _72mm9K38Igla = 22,
14802    _72mm9K310IglaM = 23,
14803    _72mm9K333Verba = 24,
14804    _72mm9K338IglaS = 25,
14805    _72mm9K32MStrela2M = 26,
14806    _72mmHN5HongYing5 = 30,
14807    _72mmQW1Vanguard = 31,
14808    _72mmQW2Vanguard2 = 32,
14809    _90mmQW3 = 33,
14810    _72mmFN6 = 34,
14811    _71mmMisagh1 = 45,
14812    _71mmMisagh2 = 46,
14813    _80mmType91KinSAM = 50,
14814    _80mmKPSAMShunGung = 55,
14815    _106mmRBS70 = 60,
14816}
14817
14818impl LifeFormHumanSpecificManPortableAirDefenseSystem {
14819    #[must_use]
14820    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14821        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14822    }
14823}
14824
14825// SISO-REF-010-2023 LifeFormHumanSpecificRecoillessRifles [UID 521]
14826#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14827pub enum LifeFormHumanSpecificRecoillessRifles {
14828    #[default]
14829    Other = 0,
14830    _84mmM136AT4CS = 15,
14831    _57mmM18RR = 20,
14832    _75mmM20RR = 21,
14833    _120mmM28DavyCrockett = 22,
14834    _155mmM29DavyCrockett = 23,
14835    _106mmM40RecoillessRifle = 24,
14836    _82mmM60RR = 25,
14837    _90mmM67RR = 26,
14838    _84mmM1CarlGustav = 30,
14839    _84mmM2CarlGustav = 31,
14840    _84mmM3CarlGustav = 32,
14841    _84mmM4CarlGustav = 33,
14842    _74mmPansarskottm68Miniman = 35,
14843    _84mmALAC = 40,
14844    _82mmB10RR = 45,
14845    _107mmB11RR = 46,
14846    _80mmBredaFolgore = 50,
14847    _120mmBATRR = 55,
14848    _73mmSPG9Kopye = 60,
14849    _88mmRCL3_45in = 65,
14850    _90mmPvpj110 = 70,
14851    _50mmJagdfaust = 75,
14852    _30mmRheinmetallRMK30 = 80,
14853    _88mm55S55Raikka = 90,
14854    _95mm95S5861 = 91,
14855    _73mmLG40 = 95,
14856    _105mmLG40 = 96,
14857    _105mmLG42 = 97,
14858}
14859
14860impl LifeFormHumanSpecificRecoillessRifles {
14861    #[must_use]
14862    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14863        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14864    }
14865}
14866
14867// SISO-REF-010-2023 LifeFormHumanSpecificFlameRockets [UID 522]
14868#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14869pub enum LifeFormHumanSpecificFlameRockets {
14870    #[default]
14871    Other = 0,
14872    _66mmM202Flash = 20,
14873    _62mmFHJ84 = 30,
14874    _90mmC90CRFIM = 40,
14875    _93mmRPOAShmel = 50,
14876    _93mmRPOZShmel = 51,
14877    _93mmRPODShmel = 52,
14878}
14879
14880impl LifeFormHumanSpecificFlameRockets {
14881    #[must_use]
14882    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14883        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14884    }
14885}
14886
14887// SISO-REF-010-2023 LifeFormHumanSpecificFlameThrowers [UID 523]
14888#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14889pub enum LifeFormHumanSpecificFlameThrowers {
14890    #[default]
14891    Other = 0,
14892    Handflammpatrone = 10,
14893    FmW41 = 11,
14894    M1A1 = 20,
14895    M2A17 = 21,
14896    M9A17 = 22,
14897    LPO50 = 30,
14898    KPattern = 35,
14899    PortableNo2AckPack = 36,
14900    Marsden = 37,
14901    Harvey = 38,
14902    ROKS2 = 45,
14903    ROKS3 = 46,
14904    Type93 = 50,
14905    Type100 = 51,
14906}
14907
14908impl LifeFormHumanSpecificFlameThrowers {
14909    #[must_use]
14910    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14911        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14912    }
14913}
14914
14915// SISO-REF-010-2023 LifeFormHumanSpecificDroneGuns [UID 524]
14916#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14917pub enum LifeFormHumanSpecificDroneGuns {
14918    #[default]
14919    Other = 0,
14920    DroneGunTactical = 15,
14921    DroneGunMKII = 16,
14922}
14923
14924impl LifeFormHumanSpecificDroneGuns {
14925    #[must_use]
14926    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14927        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14928    }
14929}
14930
14931// SISO-REF-010-2023 LifeFormHumanSpecificLogisticsEQClass [UID 525]
14932#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14933pub enum LifeFormHumanSpecificLogisticsEQClass {
14934    #[default]
14935    SlingLoadPendant = 1,
14936}
14937
14938impl LifeFormHumanSpecificLogisticsEQClass {
14939    #[must_use]
14940    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14941        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14942    }
14943}
14944
14945// SISO-REF-010-2023 LifeFormHumanSpecificPersonalElectronicsClass [UID 526]
14946#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14947pub enum LifeFormHumanSpecificPersonalElectronicsClass {
14948    #[default]
14949    CellPhone = 1,
14950}
14951
14952impl LifeFormHumanSpecificPersonalElectronicsClass {
14953    #[must_use]
14954    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14955        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14956    }
14957}
14958
14959// SISO-REF-010-2023 LifeFormHumanSpecificLasersClass [UID 527]
14960#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14961pub enum LifeFormHumanSpecificLasersClass {
14962    #[default]
14963    GenericLaserDesignator = 1,
14964    GenericLaserPointer = 2,
14965}
14966
14967impl LifeFormHumanSpecificLasersClass {
14968    #[must_use]
14969    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14970        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
14971    }
14972}
14973
14974// SISO-REF-010-2023 TransmitterDetailSATCOMModulation [UID 589]
14975#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14976pub enum TransmitterDetailSATCOMModulation {
14977    #[default]
14978    Other = 0,
14979    NoDelay = 1,
14980}
14981
14982impl TransmitterDetailSATCOMModulation {
14983    #[must_use]
14984    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
14985        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
14986    }
14987}
14988
14989// SISO-REF-010-2023 SupplyDomain [UID 600]
14990#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
14991pub enum SupplyDomain {
14992    #[default]
14993    NotUsed = 0,
14994    Class1Subsistence = 1,
14995    Class2ClothingIndividualEquipmentToolsAdminSupplies = 2,
14996    Class3PetroleumOilsLubricants = 3,
14997    Class4ConstructionMaterials = 4,
14998    Class5Ammunition = 5,
14999    Class6PersonnelDemandItems = 6,
15000    Class7MajorItems = 7,
15001    Class8MedicalMaterial = 8,
15002    Class9RepairPartsandComponents = 9,
15003    Class10MaterialtoSupportNonMilitaryPrograms = 10,
15004    Class11Supplies = 11,
15005    Class12SlingLoads = 12,
15006}
15007
15008impl SupplyDomain {
15009    #[must_use]
15010    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15011        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15012    }
15013}
15014
15015// SISO-REF-010-2023 Class1SupplyCategorySubsistence [UID 601]
15016#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15017pub enum Class1SupplyCategorySubsistence {
15018    #[default]
15019    Other = 1,
15020    ANonPerishable = 2,
15021    CCombatRations = 3,
15022    RRefrigerated = 4,
15023    SOtherNonRefrigerated = 5,
15024    WWater = 6,
15025}
15026
15027impl Class1SupplyCategorySubsistence {
15028    #[must_use]
15029    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15030        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15031    }
15032}
15033
15034// SISO-REF-010-2023 Class2SupplyCategoryClothingIndividualEquipmentToolsAdminSupplies [UID 602]
15035#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15036pub enum Class2SupplyCategoryClothingIndividualEquipmentToolsAdminSupplies {
15037    #[default]
15038    Other = 1,
15039    AAir = 2,
15040    BGroundSupportMateriel = 3,
15041    EGeneralSupplies = 4,
15042    FClothing = 5,
15043    GElectronics = 6,
15044    MWeapons = 7,
15045    TIndustrialSupplies = 8,
15046}
15047
15048impl Class2SupplyCategoryClothingIndividualEquipmentToolsAdminSupplies {
15049    #[must_use]
15050    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15051        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15052    }
15053}
15054
15055// SISO-REF-010-2023 Class3SupplyCategoryPetroleumOilsLubricants [UID 603]
15056#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15057pub enum Class3SupplyCategoryPetroleumOilsLubricants {
15058    #[default]
15059    Other = 1,
15060    APOLforAirVehicles = 2,
15061    WPOLforLandVehicles = 3,
15062    PPackagedPOL = 4,
15063}
15064
15065impl Class3SupplyCategoryPetroleumOilsLubricants {
15066    #[must_use]
15067    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15068        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15069    }
15070}
15071
15072// SISO-REF-010-2023 Class4SupplyCategoryConstructionMaterials [UID 604]
15073#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15074pub enum Class4SupplyCategoryConstructionMaterials {
15075    #[default]
15076    Other = 1,
15077    AConstruction = 2,
15078    BBarrier = 3,
15079}
15080
15081impl Class4SupplyCategoryConstructionMaterials {
15082    #[must_use]
15083    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15084        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15085    }
15086}
15087
15088// SISO-REF-010-2023 Class6SupplyCategoryPersonnelDemandItems [UID 606]
15089#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15090pub enum Class6SupplyCategoryPersonnelDemandItems {
15091    #[default]
15092    Other = 1,
15093}
15094
15095impl Class6SupplyCategoryPersonnelDemandItems {
15096    #[must_use]
15097    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15098        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15099    }
15100}
15101
15102// SISO-REF-010-2023 Class7SupplyCategoryMajorItems [UID 607]
15103#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15104pub enum Class7SupplyCategoryMajorItems {
15105    #[default]
15106    Other = 1,
15107    AAir = 2,
15108    BGroundSupportMateriel = 3,
15109    DAdminVehicles = 4,
15110    GElectronics = 5,
15111    JRacksAdaptorsPylons = 6,
15112    KTacticalVehicles = 7,
15113    LMissiles = 8,
15114    MWeapons = 9,
15115    NSpecialWeapons = 10,
15116    XAircraftEngines = 11,
15117    DropTank = 20,
15118    ConformalFuelTank = 21,
15119    LuggagePod = 22,
15120    ECMPod = 23,
15121    ParaDrogue = 24,
15122    TargetingPod = 25,
15123    Fairing = 26,
15124    AirRefuellingPod = 27,
15125    HeavyAirdrop = 28,
15126    ContainerDeliverySystemAirdrop = 29,
15127    RocketPodLauncher = 30,
15128    TacticalPod = 31,
15129    RECCEpod = 32,
15130    FLIRpod = 33,
15131}
15132
15133impl Class7SupplyCategoryMajorItems {
15134    #[must_use]
15135    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15136        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15137    }
15138}
15139
15140// SISO-REF-010-2023 Class8SupplyCategoryMedicalMaterial [UID 608]
15141#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15142pub enum Class8SupplyCategoryMedicalMaterial {
15143    #[default]
15144    Other = 1,
15145    AMedicalMateriel = 2,
15146    BBloodFluids = 3,
15147}
15148
15149impl Class8SupplyCategoryMedicalMaterial {
15150    #[must_use]
15151    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15152        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15153    }
15154}
15155
15156// SISO-REF-010-2023 Class9SupplyCategoryRepairPartsandComponents [UID 609]
15157#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15158pub enum Class9SupplyCategoryRepairPartsandComponents {
15159    #[default]
15160    Other = 1,
15161    AAir = 2,
15162    BGroundSupportMateriel = 3,
15163    DAdminVehicles = 4,
15164    GElectronics = 5,
15165    KTacticalVehicles = 6,
15166    LMissiles = 7,
15167    MWeapons = 8,
15168    NSpecialWeapons = 9,
15169    XAircraftEngines = 10,
15170}
15171
15172impl Class9SupplyCategoryRepairPartsandComponents {
15173    #[must_use]
15174    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15175        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15176    }
15177}
15178
15179// SISO-REF-010-2023 Class10SupplyCategoryMaterialtoSupportNonMilitaryPrograms [UID 610]
15180#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15181pub enum Class10SupplyCategoryMaterialToSupportNonMilitaryPrograms {
15182    #[default]
15183    Other = 1,
15184}
15185
15186impl Class10SupplyCategoryMaterialToSupportNonMilitaryPrograms {
15187    #[must_use]
15188    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15189        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15190    }
15191}
15192
15193// SISO-REF-010-2023 Class11SupplyCategorySupplies [UID 611]
15194#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15195pub enum Class11SupplyCategorySupplies {
15196    #[default]
15197    Other = 1,
15198    Pallets = 2,
15199    FuelTanksDrumsandBladders = 3,
15200    Chests = 4,
15201    Boxes = 5,
15202}
15203
15204impl Class11SupplyCategorySupplies {
15205    #[must_use]
15206    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15207        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15208    }
15209}
15210
15211// SISO-REF-010-2023 Class12SupplyCategorySlingLoads [UID 612]
15212#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15213pub enum Class12SupplyCategorySlingLoads {
15214    #[default]
15215    Other = 1,
15216    SlingLoadBlivet = 2,
15217    SlingLoadCrate = 3,
15218    SlingLoadWaterBucket = 4,
15219    SlingLoadVehicles = 5,
15220    SlingLoadHowitzer = 6,
15221    SlingLoadCollapsible = 7,
15222    SlingLoadBladder = 8,
15223    SlingLoadPalletofCrates = 9,
15224    SlingLoadHelicopters = 10,
15225    SlingLoadHoist = 11,
15226    SlingLoadConcreteBlock = 12,
15227}
15228
15229impl Class12SupplyCategorySlingLoads {
15230    #[must_use]
15231    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15232        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15233    }
15234}
15235
15236// SISO-REF-010-2023 LifeSavingEquipment [UID 633]
15237#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15238pub enum LifeSavingEquipment {
15239    #[default]
15240    Lifeboat = 1,
15241    Liferaft = 2,
15242    MOBBoat = 3,
15243    Lifebuoy = 4,
15244}
15245
15246impl LifeSavingEquipment {
15247    #[must_use]
15248    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15249        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15250    }
15251}
15252
15253// SISO-REF-010-2023 IslandSubcategory [UID 715]
15254#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15255pub enum IslandSubcategory {
15256    #[default]
15257    Other = 0,
15258    Islands10002499km2 = 1,
15259    Islands25004999km2 = 2,
15260    Islands50009999km2 = 3,
15261    Islands1000024999km2 = 4,
15262    Islands2500099999km2 = 5,
15263    Islands100000km2andGreater = 6,
15264}
15265
15266impl IslandSubcategory {
15267    #[must_use]
15268    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15269        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
15270    }
15271}
15272
15273// SISO-REF-010-2023 Link11MessageSubType [UID 730]
15274#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15275pub enum Link11MessageSubType {
15276    #[default]
15277    NoStatement = 0,
15278    Interrogation = 1,
15279    DataStart = 2,
15280    Data = 3,
15281    DataStop = 4,
15282}
15283
15284impl Link11MessageSubType {
15285    #[must_use]
15286    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15287        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15288    }
15289}
15290
15291// SISO-REF-010-2023 Link11MessageTypeIdentifier [UID 731]
15292#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15293pub enum Link11MessageTypeIdentifier {
15294    #[default]
15295    NoStatement = 0,
15296    NetTest = 1,
15297    RollCall = 2,
15298    PicketReply = 3,
15299    ShortBroadcast = 4,
15300    Broadcast = 5,
15301    NetSync = 6,
15302}
15303
15304impl Link11MessageTypeIdentifier {
15305    #[must_use]
15306    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15307        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15308    }
15309}
15310
15311// SISO-REF-010-2023 Link11DataSignallingRate [UID 732]
15312#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15313pub enum Link11DataSignallingRate {
15314    #[default]
15315    NoStatement = 0,
15316    _1364bps = 1,
15317    _2250bps = 2,
15318    _1200bps = 3,
15319    _2400bps = 4,
15320}
15321
15322impl Link11DataSignallingRate {
15323    #[must_use]
15324    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15325        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15326    }
15327}
15328
15329// SISO-REF-010-2023 Link11SignalIntegrationInterval [UID 733]
15330#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15331pub enum Link11SignalIntegrationInterval {
15332    #[default]
15333    NoStatement = 0,
15334    _9ms = 1,
15335    _18ms = 2,
15336}
15337
15338impl Link11SignalIntegrationInterval {
15339    #[must_use]
15340    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15341        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15342    }
15343}
15344
15345// SISO-REF-010-2023 Link11SignalWaveform [UID 734]
15346#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15347pub enum Link11SignalWaveform {
15348    #[default]
15349    NoStatementCLEWFormat = 0,
15350    ConventionalLinkElevenWaveform = 1,
15351    SingleToneLinkElevenWaveform = 2,
15352}
15353
15354impl Link11SignalWaveform {
15355    #[must_use]
15356    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15357        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15358    }
15359}
15360
15361// SISO-REF-010-2023 Link11_11BEncryptionFlag [UID 735]
15362#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15363pub enum Link11_11BEncryptionFlag {
15364    #[default]
15365    NoEncryptionUsed = 0,
15366    EncryptionUsed = 1,
15367}
15368
15369impl Link11_11BEncryptionFlag {
15370    #[must_use]
15371    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15372        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15373    }
15374}
15375
15376// SISO-REF-010-2023 SISOSTD002Version [UID 736]
15377#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15378pub enum SISOSTD002Version {
15379    #[default]
15380    SISOSTD0022006 = 0,
15381    SISOSTD0022021 = 1,
15382}
15383
15384impl SISOSTD002Version {
15385    #[must_use]
15386    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15387        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15388    }
15389}
15390
15391// SISO-REF-010-2023 Link11BLinkState [UID 737]
15392#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15393pub enum Link11BLinkState {
15394    #[default]
15395    NoStatement = 0,
15396    Inactive = 1,
15397    Ready = 2,
15398    Active = 3,
15399    Operational = 4,
15400}
15401
15402impl Link11BLinkState {
15403    #[must_use]
15404    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15405        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15406    }
15407}
15408
15409// SISO-REF-010-2023 Link11BModeofOperation [UID 738]
15410#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15411pub enum Link11BModeofOperation {
15412    #[default]
15413    NoStatement = 0,
15414    FullTransmissionofData = 1,
15415    LimitedTransmissionofData = 2,
15416    Receiveonly = 3,
15417}
15418
15419impl Link11BModeofOperation {
15420    #[must_use]
15421    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15422        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
15423    }
15424}
15425
15426// SISO-REF-010-2023 Link11BMessageSubType [UID 739]
15427#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15428pub enum Link11BMessageSubType {
15429    #[default]
15430    NoStatement = 0,
15431    TransmissionFrame = 1,
15432    StandbySignal = 2,
15433}
15434
15435impl Link11BMessageSubType {
15436    #[must_use]
15437    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15438        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15439    }
15440}
15441
15442// SISO-REF-010-2023 Link11BDataSignalingRate [UID 740]
15443#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15444pub enum Link11BDataSignalingRate {
15445    #[default]
15446    NoStatement = 0,
15447    _1200bps = 3,
15448    _2400bps = 4,
15449    _600bps = 5,
15450}
15451
15452impl Link11BDataSignalingRate {
15453    #[must_use]
15454    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15455        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15456    }
15457}
15458
15459// SISO-REF-010-2023 Link11BModulationStandard [UID 741]
15460#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15461#[allow(non_camel_case_types)]
15462pub enum Link11BModulationStandard {
15463    #[default]
15464    NoStatement = 0,
15465    CCITTV_23 = 1,
15466}
15467
15468impl Link11BModulationStandard {
15469    #[must_use]
15470    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15471        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15472    }
15473}
15474
15475// SISO-REF-010-2023 CIGIExtensionPacketID [UID 780]
15476#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15477pub enum CIGIExtensionPacketID {
15478    #[default]
15479    ImageCaptureRequestpacketID = 4096,
15480    ImageCaptureResponsepacketID = 4097,
15481    StateNotificationRequestPacketID = 4098,
15482    StateNotificationResponsePacketID = 4099,
15483    GlobalRefFrameDefPacketID = 5000,
15484}
15485
15486impl CIGIExtensionPacketID {
15487    #[must_use]
15488    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15489        Self::from_u16(buf.get_u16()).unwrap_or_else(Self::default)
15490    }
15491}
15492
15493// SISO-REF-010-2023 Link16Version [UID 800]
15494#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15495pub enum Link16Version {
15496    #[default]
15497    NoStatement = 0,
15498    MILSTD6016C = 1,
15499    MILSTD6016D = 2,
15500    MILSTD6016E = 3,
15501    MILSTD6016F = 4,
15502    MILSTD6016FC1 = 5,
15503    STANAG5516Ed3 = 103,
15504    STANAG5516Ed4 = 104,
15505    STANAG5516Ed5 = 105,
15506    STANAG5516Ed6 = 106,
15507    STANAG5516Ed8 = 108,
15508}
15509
15510impl Link16Version {
15511    #[must_use]
15512    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15513        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15514    }
15515}
15516
15517// SISO-REF-010-2023 AircraftIDSource [UID 801]
15518#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15519pub enum AircraftIDSource {
15520    #[default]
15521    ModeSAircraftIdentificationFieldValue = 0,
15522    GICBIFFDataRecordAvailable = 1,
15523}
15524
15525impl AircraftIDSource {
15526    #[must_use]
15527    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15528        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15529    }
15530}
15531
15532// SISO-REF-010-2023 ClothingIRSignature [UID 802]
15533#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15534pub enum ClothingIRSignature {
15535    #[default]
15536    StandardClothing = 0,
15537    Camouflage = 1,
15538    ThermalBlanket = 2,
15539    Other = 3,
15540}
15541
15542impl ClothingIRSignature {
15543    #[must_use]
15544    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15545        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15546    }
15547}
15548
15549// SISO-REF-010-2023 DamageArea [UID 889]
15550#[derive(Copy, Clone, Debug, Default, FromPrimitive, PartialEq, Eq)]
15551pub enum DamageArea {
15552    #[default]
15553    DamageArea1orNotApplicableifDamageAreasarenotdefined_ = 0,
15554    DamageArea2 = 1,
15555    DamageArea3 = 2,
15556    DamageArea4 = 3,
15557    DamageArea5 = 4,
15558    DamageArea6 = 5,
15559    DamageArea7 = 6,
15560    DamageArea8 = 7,
15561}
15562
15563impl DamageArea {
15564    #[must_use]
15565    pub fn deserialize<B: Buf>(buf: &mut B) -> Self {
15566        Self::from_u8(buf.get_u8()).unwrap_or_else(Self::default)
15567    }
15568}