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}