sicd_rs/dep/v0_4_0/
collection_info.rs

1use serde::Deserialize;
2
3use super::Parameter;
4#[derive(Debug, Deserialize, PartialEq, Clone)]
5pub struct CollectionInfo {
6    #[serde(rename = "CollectorName")]
7    pub collector_name: String,
8    #[serde(rename = "IlluminatorName")]
9    pub illuminator_name: Option<String>,
10    #[serde(rename = "CoreName")]
11    pub core_name: String,
12    #[serde(rename = "CollectType")]
13    pub collect_type: Option<CollectType>,
14    #[serde(rename = "RadarMode")]
15    pub radar_mode: RadarMode,
16    #[serde(default = "default_classification")]
17    #[serde(rename = "Classification")]
18    pub classification: String,
19    #[serde(rename = "CountryCode")]
20    pub country_code: Option<Vec<String>>,
21    #[serde(rename = "Parameter")]
22    pub parameters: Option<Vec<Parameter>>,
23}
24
25#[derive(Debug, Deserialize, PartialEq, Clone)]
26pub struct CollectType {
27    #[serde(rename = "$text")]
28    pub value: CollectTypeEnum,
29}
30#[derive(Debug, Deserialize, PartialEq, Clone)]
31pub enum CollectTypeEnum {
32    MONOSTATIC,
33    BISTATIC,
34}
35fn default_classification() -> String {
36    String::from("UNCLASSIFIED")
37}
38#[derive(Debug, Deserialize, PartialEq, Clone)]
39pub struct RadarMode {
40    #[serde(rename = "ModeType")]
41    pub mode_type: ModeType,
42    #[serde(rename = "ModeID")]
43    pub mode_id: Option<String>,
44}
45#[derive(Debug, Deserialize, PartialEq, Clone)]
46pub struct ModeType {
47    #[serde(rename = "$text")]
48    pub value: ModeTypeEnum,
49}
50#[derive(Debug, Deserialize, PartialEq, Clone)]
51pub enum ModeTypeEnum {
52    SPOTLIGHT,
53    STRIPMAP,
54    #[serde(rename = "DYNAMIC STRIPMAP")]
55    DYNAMICSTRIPMAP,
56}
57
58#[cfg(test)]
59mod tests {
60    use super::CollectionInfo;
61    use quick_xml::de::from_str;
62
63    #[test]
64    fn test_collection_info() {
65        let xml_str = r#"<CollectionInfo><CollectorName></CollectorName>
66            <CoreName></CoreName><RadarMode><ModeType>SPOTLIGHT</ModeType>
67            </RadarMode><Classification>UNCLASSIFIED</Classification>
68            <Parameter name="param1">value</Parameter></CollectionInfo>"#;
69        assert!(match from_str::<CollectionInfo>(&xml_str) {
70            Ok(_) => true,
71            Err(_) => false,
72        });
73    }
74}