swift_mt_message/fields/
field13c.rs1use serde::{Deserialize, Serialize};
2use swift_mt_message_macros::SwiftField;
3
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, SwiftField)]
8pub struct Field13C {
9 #[component("/8c/", validate = ["time_indication_code"])]
11 pub time_code: String,
12 #[component("4!n", validate = ["time_format"])]
14 pub time: String,
15 #[component("1!x4!n", validate = ["utc_offset_format"])]
17 pub utc_offset: String,
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23 use crate::SwiftField;
24
25 #[test]
26 fn test_field13c_parsing() {
27 let test_input = ":13C:/RNCTIME/1405+0200";
28 println!("Testing input: {test_input}");
29
30 match Field13C::parse(test_input) {
31 Ok(parsed) => {
32 println!("Successfully parsed:");
33 println!(" time_code: {}", parsed.time_code);
34 println!(" time: {}", parsed.time);
35 println!(" utc_offset: {}", parsed.utc_offset);
36
37 let serialized = parsed.to_swift_string();
39 println!("Serialized back: {serialized}");
40
41 assert_eq!(parsed.time_code, "/RNCTIME/");
43 assert_eq!(parsed.time, "1405");
44 assert_eq!(parsed.utc_offset, "+0200");
45 }
46 Err(e) => {
47 println!("Parsing failed: {e:?}");
48 panic!("Failed to parse Field13C: {e:?}");
49 }
50 }
51 }
52
53 #[test]
54 fn test_field13c_additional_cases() {
55 let test_cases = vec![
57 (":13C:/CLSTIME/2359-0500", "/CLSTIME/", "2359", "-0500"),
58 (":13C:/SNDTIME/0000+0000", "/SNDTIME/", "0000", "+0000"),
59 (":13C:/ABC/1200+0100", "/ABC/", "1200", "+0100"),
60 ];
61
62 for (input, expected_code, expected_time, expected_offset) in test_cases {
63 match Field13C::parse(input) {
64 Ok(parsed) => {
65 assert_eq!(parsed.time_code, expected_code);
66 assert_eq!(parsed.time, expected_time);
67 assert_eq!(parsed.utc_offset, expected_offset);
68
69 let serialized = parsed.to_swift_string();
71 assert_eq!(serialized, input);
72 }
73 Err(e) => {
74 panic!("Failed to parse {input}: {e:?}");
75 }
76 }
77 }
78 }
79}