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