dis_rs/v7/entity_state/
mod.rs

1use crate::enumerations::{
2    AirPlatformCapabilities, CulturalFeatureCapabilities, EntityCapabilities, EntityKind,
3    EnvironmentalCapabilities, ExpendableCapabilities, LandPlatformCapabilities,
4    LifeFormsCapabilities, MunitionCapabilities, PlatformDomain, RadioCapabilities,
5    SensorEmitterCapabilities, SpacePlatformCapabilities, SubsurfacePlatformCapabilities,
6    SupplyCapabilities, SurfacePlatformCapabilities,
7};
8use crate::model::EntityType;
9
10pub(crate) mod parser;
11
12/// Helper function to convert the V7 on-wire format bytes (as u32) to an `EntityCapabilities` struct
13/// based on the `EntityType` of the entity.
14#[must_use]
15pub fn entity_capabilities_from_bytes(
16    capabilities: u32,
17    entity_type: &EntityType,
18) -> EntityCapabilities {
19    match (entity_type.kind, entity_type.domain) {
20        (EntityKind::Other, _) => EntityCapabilities::Unspecified(0u32),
21        (EntityKind::Platform, PlatformDomain::Land) => {
22            EntityCapabilities::LandPlatformEntityCapabilities(LandPlatformCapabilities::from(
23                capabilities,
24            ))
25        }
26        (EntityKind::Platform, PlatformDomain::Air) => {
27            EntityCapabilities::AirPlatformEntityCapabilities(AirPlatformCapabilities::from(
28                capabilities,
29            ))
30        }
31        (EntityKind::Platform, PlatformDomain::Surface) => {
32            EntityCapabilities::SurfacePlatformEntityCapabilities(
33                SurfacePlatformCapabilities::from(capabilities),
34            )
35        }
36        (EntityKind::Platform, PlatformDomain::Subsurface) => {
37            EntityCapabilities::SubsurfacePlatformEntityCapabilities(
38                SubsurfacePlatformCapabilities::from(capabilities),
39            )
40        }
41        (EntityKind::Platform, PlatformDomain::Space) => {
42            EntityCapabilities::SpacePlatformEntityCapabilities(SpacePlatformCapabilities::from(
43                capabilities,
44            ))
45        }
46        (EntityKind::Munition, _) => {
47            EntityCapabilities::MunitionEntityCapabilities(MunitionCapabilities::from(capabilities))
48        }
49        (EntityKind::LifeForm, _) => EntityCapabilities::LifeFormsEntityCapabilities(
50            LifeFormsCapabilities::from(capabilities),
51        ),
52        (EntityKind::Environmental, _) => EntityCapabilities::EnvironmentalEntityCapabilities(
53            EnvironmentalCapabilities::from(capabilities),
54        ),
55        (EntityKind::CulturalFeature, _) => EntityCapabilities::CulturalFeatureEntityCapabilities(
56            CulturalFeatureCapabilities::from(capabilities),
57        ),
58        (EntityKind::Supply, _) => {
59            EntityCapabilities::SupplyEntityCapabilities(SupplyCapabilities::from(capabilities))
60        }
61        (EntityKind::Radio, _) => {
62            EntityCapabilities::RadioEntityCapabilities(RadioCapabilities::from(capabilities))
63        }
64        (EntityKind::Expendable, _) => EntityCapabilities::ExpendableEntityCapabilities(
65            ExpendableCapabilities::from(capabilities),
66        ),
67        (EntityKind::SensorEmitter, _) => EntityCapabilities::SensorEmitterEntityCapabilities(
68            SensorEmitterCapabilities::from(capabilities),
69        ),
70        (_, _) => EntityCapabilities::Unspecified(capabilities),
71    }
72}