Skip to main content

ofx_rs/
error.rs

1use core::fmt;
2
3use crate::aggregates::error::AggregateError;
4use crate::header::HeaderError;
5use crate::xml::XmlError;
6
7/// Top-level error type for OFX parsing operations.
8#[non_exhaustive]
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub enum OfxError {
11    /// An error occurred while parsing the OFX header.
12    Header(HeaderError),
13    /// An error occurred while parsing XML structure.
14    Xml(XmlError),
15    /// An error occurred while parsing an OFX aggregate.
16    Aggregate(AggregateError),
17}
18
19impl fmt::Display for OfxError {
20    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21        match self {
22            Self::Header(e) => write!(f, "header error: {e}"),
23            Self::Xml(e) => write!(f, "XML error: {e}"),
24            Self::Aggregate(e) => write!(f, "aggregate error: {e}"),
25        }
26    }
27}
28
29impl std::error::Error for OfxError {
30    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
31        match self {
32            Self::Header(e) => Some(e),
33            Self::Xml(e) => Some(e),
34            Self::Aggregate(e) => Some(e),
35        }
36    }
37}
38
39impl From<HeaderError> for OfxError {
40    fn from(e: HeaderError) -> Self {
41        Self::Header(e)
42    }
43}
44
45impl From<XmlError> for OfxError {
46    fn from(e: XmlError) -> Self {
47        Self::Xml(e)
48    }
49}
50
51impl From<AggregateError> for OfxError {
52    fn from(e: AggregateError) -> Self {
53        Self::Aggregate(e)
54    }
55}