Skip to main content

nexrad_decode/messages/
message.rs

1use crate::messages::clutter_filter_map;
2use crate::messages::digital_radar_data;
3use crate::messages::message_header::MessageHeader;
4use crate::messages::rda_status_data;
5use crate::messages::volume_coverage_pattern;
6
7/// A decoded NEXRAD Level II message with its metadata header.
8#[derive(Debug, Clone, PartialEq)]
9pub struct Message {
10    header: MessageHeader,
11    contents: MessageContents,
12}
13
14impl Message {
15    /// Create a new unsegmented message.
16    pub(crate) fn unsegmented(header: MessageHeader, contents: MessageContents) -> Self {
17        Self { header, contents }
18    }
19
20    /// This message's header.
21    pub fn header(&self) -> &MessageHeader {
22        &self.header
23    }
24
25    /// This message's contents.
26    pub fn contents(&self) -> &MessageContents {
27        &self.contents
28    }
29
30    /// Consume this message, returning ownership of its contents.
31    pub fn into_contents(self) -> MessageContents {
32        self.contents
33    }
34}
35
36/// A decoded NEXRAD Level II message's contents.
37#[derive(Debug, Clone, PartialEq)]
38pub enum MessageContents {
39    /// Message type 2 "RDA Status Data" contains information about the current RDA state, system
40    /// control, operating status, scanning strategy, performance parameters like transmitter power
41    /// and calibration, and system alarms
42    RDAStatusData(Box<rda_status_data::Message>),
43
44    /// Message type 31 "Digital Radar Data" consists of base data information such as reflectivity,
45    /// mean radial velocity, spectrum width, differential reflectivity, differential phase,
46    /// correlation coefficient, azimuth angle, elevation angle, cut type, scanning strategy, and
47    /// calibration parameters.
48    DigitalRadarData(Box<digital_radar_data::Message>),
49
50    /// Message type 15 "Clutter Filter Map" contains information about clutter filter maps that are
51    /// used to filter clutter from radar products
52    ClutterFilterMap(Box<clutter_filter_map::Message>),
53
54    /// Message type 5 "Volume Coverage Pattern" provides details about the volume
55    /// coverage pattern being used, including detailed settings for each elevation.
56    VolumeCoveragePattern(Box<volume_coverage_pattern::Message>),
57
58    Other,
59}