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