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