sicd_rs/v1_3_0/
radar_collection.rs1use 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}