use thiserror::Error;
#[derive(Debug, Error, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum DomainError {
#[error(
"Invalid period format: '{format}' - expected formats like '2023Q4', '2023', 'FY2023', '2023-12-31', or '12/31/2023'"
)]
InvalidPeriodFormat {
format: String,
},
#[error("Invalid period year: {year} - expected a year in 0..=9999")]
InvalidPeriodYear {
year: i32,
},
#[error("Invalid period quarter: {quarter} - expected a quarter in 1..=4")]
InvalidPeriodQuarter {
quarter: u8,
},
#[error("Invalid horizon format: '{format}' - expected forms like '7d', '1mo', or '1y'")]
InvalidHorizonFormat {
format: String,
},
#[error("Invalid horizon count: {count} - expected a non-zero positive integer")]
InvalidHorizonCount {
count: u32,
},
#[error("Invalid exchange value: '{value}'")]
InvalidExchangeValue {
value: String,
},
#[error("Invalid asset kind value: '{value}'")]
InvalidAssetKindValue {
value: String,
},
#[error("Invalid market state value: '{value}'")]
InvalidMarketStateValue {
value: String,
},
#[error("Invalid ISIN: '{value}'")]
InvalidIsin {
value: String,
},
#[error("Invalid FIGI: '{value}'")]
InvalidFigi {
value: String,
},
#[error("Invalid symbol: '{value}'")]
InvalidSymbol {
value: String,
},
}