swift_mt_message/
error.rs1use thiserror::Error;
4
5pub type Result<T> = std::result::Result<T, MTError>;
7
8#[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 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 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 pub fn field_not_found(field_tag: impl Into<String>) -> Self {
92 Self::FieldNotFound {
93 field_tag: field_tag.into(),
94 }
95 }
96
97 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 pub fn missing_required_field(field_tag: impl Into<String>) -> Self {
107 Self::MissingRequiredField {
108 field_tag: field_tag.into(),
109 }
110 }
111}