swift_mt_message/
errors.rs

1use serde::{Deserialize, Serialize};
2use thiserror::Error;
3
4/// Result type alias for the library
5pub type Result<T> = std::result::Result<T, ParseError>;
6
7/// Main error type for parsing operations
8#[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/// Validation error for field-level validation
39#[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}