use std::string::FromUtf8Error;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum FixmlError {
#[error("Encoding failed: {0}")]
Encode(#[from] EncodeError),
#[error("Decoding failed: {0}")]
Decode(#[from] DecodeError),
#[error("XML error: {0}")]
Xml(#[from] quick_xml::Error),
#[error("UTF-8 error: {0}")]
Utf8(#[from] std::str::Utf8Error),
#[error("String conversion error: {0}")]
StringConversion(#[from] FromUtf8Error),
#[error("Attribute error: {0}")]
Attribute(#[from] quick_xml::events::attributes::AttrError),
}
#[derive(Error, Debug)]
pub enum EncodeError {
#[error("Missing required field: {field_name}")]
MissingRequiredField { field_name: String },
#[error("Invalid field value: {field_name} = {value}")]
InvalidFieldValue { field_name: String, value: String },
#[error("Unsupported message type: {message_type}")]
UnsupportedMessageType { message_type: String },
#[error("XML write error: {0}")]
XmlWrite(String),
}
#[derive(Error, Debug)]
pub enum DecodeError {
#[error("Invalid XML structure: {reason}")]
InvalidXmlStructure { reason: String },
#[error("Unknown message type: {message_type}")]
UnknownMessageType { message_type: String },
#[error(
"Invalid field value for field '{field_name}': got '{value}', expected {expected_type}"
)]
InvalidFieldValue {
field_name: String,
value: String,
expected_type: String,
},
#[error("Field validation failed: {field_name}")]
FieldValidationFailed { field_name: String },
#[error("XML parse error: {0}")]
XmlParse(String),
}