swift_mt_message/
errors.rs1use serde::{Deserialize, Serialize};
2use thiserror::Error;
3
4pub type Result<T> = std::result::Result<T, ParseError>;
6
7#[derive(Error, Debug, Clone, Serialize, Deserialize)]
9pub enum ParseError {
10 #[error("Invalid message format: {message}")]
11 InvalidFormat { message: String },
12
13 #[error("Missing required field: {field_tag}")]
14 MissingRequiredField { field_tag: String },
15
16 #[error("Invalid field format for {field_tag}: {message}")]
17 InvalidFieldFormat { field_tag: String, message: String },
18
19 #[error("Wrong message type: expected {expected}, got {actual}")]
20 WrongMessageType { expected: String, actual: String },
21
22 #[error("Invalid block structure: {message}")]
23 InvalidBlockStructure { message: String },
24
25 #[error("Unsupported message type: {message_type}")]
26 UnsupportedMessageType { message_type: String },
27
28 #[error("Field validation failed: {errors:?}")]
29 ValidationFailed { errors: Vec<ValidationError> },
30
31 #[error("IO error: {message}")]
32 IoError { message: String },
33
34 #[error("Serialization error: {message}")]
35 SerializationError { message: String },
36}
37
38#[derive(Error, Debug, Clone, Serialize, Deserialize)]
40pub enum ValidationError {
41 #[error("Field {field_tag} format validation failed: {message}")]
42 FormatValidation { field_tag: String, message: String },
43
44 #[error("Field {field_tag} length validation failed: expected {expected}, got {actual}")]
45 LengthValidation {
46 field_tag: String,
47 expected: String,
48 actual: usize,
49 },
50
51 #[error("Field {field_tag} pattern validation failed: {message}")]
52 PatternValidation { field_tag: String, message: String },
53
54 #[error("Field {field_tag} value validation failed: {message}")]
55 ValueValidation { field_tag: String, message: String },
56
57 #[error("Business rule validation failed: {rule_name} - {message}")]
58 BusinessRuleValidation { rule_name: String, message: String },
59}
60
61impl From<std::io::Error> for ParseError {
62 fn from(err: std::io::Error) -> Self {
63 ParseError::IoError {
64 message: err.to_string(),
65 }
66 }
67}
68
69impl From<serde_json::Error> for ParseError {
70 fn from(err: serde_json::Error) -> Self {
71 ParseError::SerializationError {
72 message: err.to_string(),
73 }
74 }
75}