Skip to main content

uls_core/records/
path.rs

1//! PA (Path) record type for microwave links.
2use super::common::*;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct PathRecord {
7    pub unique_system_identifier: i64,
8    pub uls_file_number: Option<String>,
9    pub ebf_number: Option<String>,
10    pub callsign: Option<String>,
11    pub path_action_performed: Option<char>,
12    pub path_number: Option<i32>,
13    pub transmit_location_number: Option<i32>,
14    pub transmit_antenna_number: Option<i32>,
15    pub receiver_location_number: Option<i32>,
16    pub receiver_antenna_number: Option<i32>,
17    pub path_type_desc: Option<String>,
18    pub passive_receiver_indicator: Option<char>,
19    pub country_code: Option<String>,
20    pub receiver_callsign: Option<String>,
21}
22
23impl PathRecord {
24    pub fn from_fields(fields: &[&str]) -> Self {
25        Self {
26            unique_system_identifier: parse_i64_or_default(fields.get(1).unwrap_or(&"")),
27            uls_file_number: parse_opt_string(fields.get(2).unwrap_or(&"")),
28            ebf_number: parse_opt_string(fields.get(3).unwrap_or(&"")),
29            callsign: parse_opt_string(fields.get(4).unwrap_or(&"")),
30            path_action_performed: parse_opt_char(fields.get(5).unwrap_or(&"")),
31            path_number: parse_opt_i32(fields.get(6).unwrap_or(&"")),
32            transmit_location_number: parse_opt_i32(fields.get(7).unwrap_or(&"")),
33            transmit_antenna_number: parse_opt_i32(fields.get(8).unwrap_or(&"")),
34            receiver_location_number: parse_opt_i32(fields.get(9).unwrap_or(&"")),
35            receiver_antenna_number: parse_opt_i32(fields.get(10).unwrap_or(&"")),
36            path_type_desc: parse_opt_string(fields.get(11).unwrap_or(&"")),
37            passive_receiver_indicator: parse_opt_char(fields.get(12).unwrap_or(&"")),
38            country_code: parse_opt_string(fields.get(13).unwrap_or(&"")),
39            receiver_callsign: parse_opt_string(fields.get(14).unwrap_or(&"")),
40        }
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47
48    #[test]
49    fn test_path_from_fields() {
50        let fields = vec![
51            "PA",
52            "12345",
53            "ULS123",
54            "EBF456",
55            "W1TEST",
56            "A",
57            "1",
58            "1",
59            "2",
60            "2",
61            "3",
62            "MICROWAVE",
63            "N",
64            "US",
65            "W2TEST",
66        ];
67        let pa = PathRecord::from_fields(&fields);
68
69        assert_eq!(pa.unique_system_identifier, 12345);
70        assert_eq!(pa.callsign, Some("W1TEST".to_string()));
71        assert_eq!(pa.path_number, Some(1));
72        assert_eq!(pa.path_type_desc, Some("MICROWAVE".to_string()));
73        assert_eq!(pa.receiver_callsign, Some("W2TEST".to_string()));
74    }
75}