use thiserror::Error;
#[derive(Error, Debug)]
pub enum OhlcvError {
#[error("IO error: {reason}")]
IoError {
reason: String,
},
#[error("ZIP error: {reason}")]
ZipError {
reason: String,
},
#[error("CSV error: {reason}")]
CsvError {
reason: String,
},
#[error("Date parse error: {reason}")]
DateParseError {
reason: String,
},
#[error("Decimal parse error: {reason}")]
DecimalParseError {
reason: String,
},
#[error("Invalid parameter: {reason}")]
InvalidParameter {
reason: String,
},
#[error("Error: {reason}")]
OtherError {
reason: String,
},
}
impl From<std::io::Error> for OhlcvError {
fn from(error: std::io::Error) -> Self {
Self::IoError {
reason: error.to_string(),
}
}
}
impl From<zip::result::ZipError> for OhlcvError {
fn from(error: zip::result::ZipError) -> Self {
Self::ZipError {
reason: format!("ZIP error: {error:?}"),
}
}
}
impl From<chrono::ParseError> for OhlcvError {
fn from(error: chrono::ParseError) -> Self {
Self::DateParseError {
reason: format!("Date parse error: {error}"),
}
}
}
impl From<rust_decimal::Error> for OhlcvError {
fn from(error: rust_decimal::Error) -> Self {
Self::DecimalParseError {
reason: format!("Decimal parse error: {error}"),
}
}
}