swift_mt_message/
error.rs

1//! Error types for SWIFT MT message parsing
2
3use thiserror::Error;
4
5/// Result type alias for convenience
6pub type Result<T> = std::result::Result<T, MTError>;
7
8/// Main error type for SWIFT MT message parsing
9#[derive(Debug, Error)]
10pub enum MTError {
11    #[error("Parse error at line {line}, column {column}: {message}")]
12    ParseError {
13        line: usize,
14        column: usize,
15        message: String,
16    },
17
18    #[error("Validation error in field {field}: {message}")]
19    ValidationError {
20        field: String,
21        message: String,
22    },
23
24    #[error("Unsupported message type: {message_type}")]
25    UnsupportedMessageType {
26        message_type: String,
27    },
28
29    #[error("Field not found: {field_tag}")]
30    FieldNotFound {
31        field_tag: String,
32    },
33
34    #[error("Invalid field format in field {field}: {message}")]
35    InvalidFieldFormat {
36        field: String,
37        message: String,
38    },
39
40    #[error("Missing required field: {field_tag}")]
41    MissingRequiredField {
42        field_tag: String,
43    },
44
45    #[error("Invalid message structure: {message}")]
46    InvalidMessageStructure {
47        message: String,
48    },
49
50    #[error("Date parsing error: {message}")]
51    DateParseError {
52        message: String,
53    },
54
55    #[error("Amount parsing error: {message}")]
56    AmountParseError {
57        message: String,
58    },
59
60    #[error("Currency code error: {message}")]
61    CurrencyError {
62        message: String,
63    },
64
65    #[error("IO error: {0}")]
66    IoError(#[from] std::io::Error),
67
68    #[error("Regex error: {0}")]
69    RegexError(#[from] regex::Error),
70}
71
72impl MTError {
73    /// Create a new parse error
74    pub fn parse_error(line: usize, column: usize, message: impl Into<String>) -> Self {
75        Self::ParseError {
76            line,
77            column,
78            message: message.into(),
79        }
80    }
81
82    /// Create a new validation error
83    pub fn validation_error(field: impl Into<String>, message: impl Into<String>) -> Self {
84        Self::ValidationError {
85            field: field.into(),
86            message: message.into(),
87        }
88    }
89
90    /// Create a new field not found error
91    pub fn field_not_found(field_tag: impl Into<String>) -> Self {
92        Self::FieldNotFound {
93            field_tag: field_tag.into(),
94        }
95    }
96
97    /// Create a new invalid field format error
98    pub fn invalid_field_format(field: impl Into<String>, message: impl Into<String>) -> Self {
99        Self::InvalidFieldFormat {
100            field: field.into(),
101            message: message.into(),
102        }
103    }
104
105    /// Create a new missing required field error
106    pub fn missing_required_field(field_tag: impl Into<String>) -> Self {
107        Self::MissingRequiredField {
108            field_tag: field_tag.into(),
109        }
110    }
111}