swift_mt_message/fields/
field12.rs1use super::swift_utils::{parse_exact_length, parse_numeric};
6use crate::traits::SwiftField;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
20pub struct Field12 {
21 pub type_code: String,
23}
24
25impl SwiftField for Field12 {
26 fn parse(input: &str) -> crate::Result<Self>
27 where
28 Self: Sized,
29 {
30 let type_code = parse_exact_length(input, 3, "Field 12 type code")?;
32 parse_numeric(&type_code, "Field 12 type code")?;
33
34 Ok(Field12 { type_code })
35 }
36
37 fn to_swift_string(&self) -> String {
38 format!(":12:{}", self.type_code)
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_field12_valid() {
48 let field = Field12::parse("103").unwrap();
49 assert_eq!(field.type_code, "103");
50 assert_eq!(field.to_swift_string(), ":12:103");
51
52 let field = Field12::parse("001").unwrap();
53 assert_eq!(field.type_code, "001");
54 assert_eq!(field.to_swift_string(), ":12:001");
55
56 let field = Field12::parse("950").unwrap();
57 assert_eq!(field.type_code, "950");
58 assert_eq!(field.to_swift_string(), ":12:950");
59 }
60
61 #[test]
62 fn test_field12_invalid() {
63 assert!(Field12::parse("12").is_err());
65
66 assert!(Field12::parse("1234").is_err());
68
69 assert!(Field12::parse("ABC").is_err());
71 assert!(Field12::parse("12A").is_err());
72 }
73}