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("Field validation failed: {errors:?}")]
26    ValidationFailed { errors: Vec<ValidationError> },
27
28    #[error("IO error: {message}")]
29    IoError { message: String },
30
31    #[error("Serialization error: {message}")]
32    SerializationError { message: String },
33}
34
35/// Validation error for field-level validation
36#[derive(Error, Debug, Clone, Serialize, Deserialize)]
37pub enum ValidationError {
38    #[error("Field {field_tag} format validation failed: {message}")]
39    FormatValidation { field_tag: String, message: String },
40
41    #[error("Field {field_tag} length validation failed: expected {expected}, got {actual}")]
42    LengthValidation {
43        field_tag: String,
44        expected: String,
45        actual: usize,
46    },
47
48    #[error("Field {field_tag} pattern validation failed: {message}")]
49    PatternValidation { field_tag: String, message: String },
50
51    #[error("Field {field_tag} value validation failed: {message}")]
52    ValueValidation { field_tag: String, message: String },
53
54    #[error("Business rule validation failed: {rule_name} - {message}")]
55    BusinessRuleValidation { rule_name: String, message: String },
56}
57
58impl From<std::io::Error> for ParseError {
59    fn from(err: std::io::Error) -> Self {
60        ParseError::IoError {
61            message: err.to_string(),
62        }
63    }
64}
65
66impl From<serde_json::Error> for ParseError {
67    fn from(err: serde_json::Error) -> Self {
68        ParseError::SerializationError {
69            message: err.to_string(),
70        }
71    }
72}