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("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#[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}