sicd_rs/v1_3_0/
radar_collection.rs

1use super::{DualPolarization, Parameter, SinglePolarization};
2pub use crate::dep::v0_4_0::radar_collection::{Area, TxFrequency, TxSequence, Waveform};
3use serde::Deserialize;
4
5#[derive(Debug, Deserialize, PartialEq, Clone)]
6pub struct RadarCollection {
7    #[serde(rename = "TxFrequency")]
8    pub tx_frequency: TxFrequency,
9    #[serde(rename = "RefFreqIndex")]
10    pub ref_freq_index: Option<i32>,
11    #[serde(rename = "Waveform")]
12    pub waveform: Option<Waveform>,
13    #[serde(rename = "TxPolarization")]
14    pub tx_polarization: TxPolarization,
15    #[serde(rename = "TxSequence")]
16    pub tx_sequence: Option<TxSequence>,
17    #[serde(rename = "RcvChannels")]
18    pub rcv_channels: RcvChannels,
19    #[serde(rename = "Area")]
20    pub area: Option<Area>,
21    #[serde(rename = "Parameter")]
22    pub parameters: Option<Vec<Parameter>>,
23}
24#[derive(Debug, Deserialize, PartialEq, Clone)]
25pub struct TxPolarization {
26    #[serde(rename = "$text")]
27    pub value: SinglePolarization,
28}
29
30#[derive(Debug, Deserialize, PartialEq, Clone)]
31pub struct RcvChannels {
32    #[serde(rename = "@size")]
33    pub size: u64,
34    #[serde(rename = "ChanParameters")]
35    pub chan_parameters: Vec<ChanParameters>,
36}
37#[derive(Debug, Deserialize, PartialEq, Clone)]
38pub struct ChanParameters {
39    #[serde(rename = "@index")]
40    pub index: usize,
41    #[serde(rename = "TxRcvPolarization")]
42    pub tx_rcv_polarization: TxRcvPolarization,
43    #[serde(rename = "RcvAPCIndex")]
44    pub rcv_apc_index: Option<usize>,
45}
46#[derive(Debug, Deserialize, PartialEq, Clone)]
47pub struct TxRcvPolarization {
48    #[serde(rename = "$text")]
49    pub value: DualPolarization,
50}
51
52#[cfg(test)]
53mod tests {
54    use super::RadarCollection;
55    use quick_xml::de::from_str;
56
57    #[test]
58    fn test_radar_collection() {
59        let xml_str = r#"<RadarCollection><TxFrequency><Min>0</Min><Max>0</Max>
60            </TxFrequency><Waveform size="1"><WFParameters index="1">
61            <TxPulseLength>0</TxPulseLength><TxRFBandwidth>0</TxRFBandwidth>
62            <TxFreqStart>0</TxFreqStart><TxFMRate>0</TxFMRate><RcvDemodType>
63            CHIRP</RcvDemodType><RcvWindowLength>0</RcvWindowLength>
64            <ADCSampleRate>0</ADCSampleRate><RcvIFBandwidth>0</RcvIFBandwidth>
65            <RcvFreqStart>0</RcvFreqStart><RcvFMRate>0</RcvFMRate>
66            </WFParameters></Waveform><TxPolarization>V</TxPolarization>
67            <RcvChannels size="1"><ChanParameters index="1"><TxRcvPolarization>
68            OTHER</TxRcvPolarization><RcvAPCIndex>1</RcvAPCIndex></ChanParameters>
69            </RcvChannels><Area><Corner><ACP index="1"><Lat>0</Lat><Lon>0</Lon>
70            <HAE>0</HAE></ACP></Corner><Plane><RefPt><ECF><X>0</X><Y>0</Y><Z>0
71            </Z></ECF><Line>0</Line><Sample>0</Sample></RefPt><XDir><UVectECF>
72            <X>0</X><Y>0</Y><Z>0</Z></UVectECF><LineSpacing>0</LineSpacing>
73            <NumLines>0</NumLines><FirstLine>0</FirstLine></XDir><YDir>
74            <UVectECF><X>0</X><Y>0</Y><Z>0</Z></UVectECF><SampleSpacing>0
75            </SampleSpacing><NumSamples>0</NumSamples><FirstSample>0
76            </FirstSample></YDir></Plane></Area></RadarCollection>"#;
77        assert!(match from_str::<RadarCollection>(&xml_str) {
78            Ok(_) => true,
79            Err(_) => false,
80        })
81    }
82}