sicd_rs/v1_3_0/
antenna.rs

1use super::{Poly1D, XyzPoly};
2pub use crate::dep::v0_4_0::antenna::{Array, Elem, EB};
3use serde::Deserialize;
4
5#[derive(Debug, Deserialize, PartialEq, Clone)]
6pub struct Antenna {
7    #[serde(rename = "Tx")]
8    pub tx: Option<AntennaType>,
9    #[serde(rename = "Rcv")]
10    pub rcv: Option<AntennaType>,
11    #[serde(rename = "TwoWay")]
12    pub two_way: Option<AntennaType>,
13}
14#[derive(Debug, Deserialize, PartialEq, Clone)]
15pub struct AntennaType {
16    #[serde(rename = "XAxisPoly")]
17    pub x_axis_poly: XyzPoly,
18    #[serde(rename = "YAxisPoly")]
19    pub y_axis_poly: XyzPoly,
20    #[serde(rename = "FreqZero")]
21    pub freq_zero: f64,
22    #[serde(rename = "EB")]
23    pub eb: Option<EB>,
24    #[serde(rename = "Array")]
25    pub array: Array,
26    #[serde(rename = "Elem")]
27    pub elem: Option<Elem>,
28    #[serde(rename = "GainBSPoly")]
29    pub gain_bs_poly: Option<Poly1D>,
30    #[serde(rename = "EBFreqShift")]
31    pub eb_freq_shift: Option<bool>,
32    #[serde(rename = "MLFreqDilation")]
33    pub ml_freq_dilation: Option<bool>,
34}
35
36#[cfg(test)]
37mod tests {
38    use super::Antenna;
39    use quick_xml::de::from_str;
40    #[test]
41    fn test_antenna() {
42        let xml_str = r#"<Antenna><Tx><XAxisPoly><X order1="1">
43            <Coef exponent1="0">0</Coef><Coef exponent1="1">0</Coef></X>
44            <Y order1="1"><Coef exponent1="0">0</Coef><Coef exponent1="1">
45            0</Coef></Y><Z order1="1"><Coef exponent1="0">0</Coef>
46            <Coef exponent1="1">0</Coef></Z></XAxisPoly><YAxisPoly>
47            <X order1="1"><Coef exponent1="0">0</Coef><Coef exponent1="1">0
48            </Coef></X><Y order1="1"><Coef exponent1="0">0</Coef>
49            <Coef exponent1="1">0</Coef></Y><Z order1="1"><Coef exponent1="0">0
50            </Coef><Coef exponent1="1">0</Coef></Z></YAxisPoly><FreqZero>0
51            </FreqZero><EB><DCXPoly order1="0"><Coef exponent1="0">0</Coef>
52            </DCXPoly><DCYPoly order1="0"><Coef exponent1="0">0</Coef></DCYPoly>
53            </EB><Array><GainPoly order1="1" order2="1">
54            <Coef exponent1="0" exponent2="0">0</Coef>
55            <Coef exponent1="0" exponent2="1">0</Coef>
56            <Coef exponent1="1" exponent2="0">0</Coef>
57            <Coef exponent1="1" exponent2="1">0</Coef></GainPoly>
58            <PhasePoly order1="1" order2="1"><Coef exponent1="0" exponent2="0">0
59            </Coef><Coef exponent1="0" exponent2="1">0</Coef>
60            <Coef exponent1="1" exponent2="0">0</Coef>
61            <Coef exponent1="1" exponent2="1">0</Coef></PhasePoly></Array><Elem>
62            <GainPoly order1="0" order2="0"><Coef exponent1="0" exponent2="0">0
63            </Coef></GainPoly><PhasePoly order1="0" order2="0">
64            <Coef exponent1="0" exponent2="0">0</Coef></PhasePoly></Elem>
65            <GainBSPoly order1="0"><Coef exponent1="0">0</Coef></GainBSPoly>
66            <EBFreqShift>false</EBFreqShift><MLFreqDilation>true
67            </MLFreqDilation></Tx></Antenna>"#;
68        assert!(match from_str::<Antenna>(&xml_str) {
69            Ok(_) => true,
70            Err(_) => false,
71        })
72    }
73}