1use 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}