use thiserror::Error;
pub type Result<T> = std::result::Result<T, ParseError>;
#[derive(Error, Debug, Clone, PartialEq)]
pub enum ParseError {
#[error("Grammar error: {0}")]
GrammarError(String),
#[error("Invalid modifier: {0}")]
InvalidModifier(String),
#[error("Invalid value for modifier '{modifier}': {value}")]
InvalidModifierValue { modifier: String, value: String },
#[error("Unsupported platform: {0}")]
UnsupportedPlatform(String),
#[error("Invalid voice '{voice}' for platform '{platform}'")]
InvalidVoice { voice: String, platform: String },
#[error("Invalid language code: {0}")]
InvalidLanguage(String),
#[error("Invalid intensity: {0}")]
InvalidIntensity(String),
#[error("IO error: {0}")]
IoError(String),
#[error("JSON error: {0}")]
JsonError(String),
}
impl From<std::io::Error> for ParseError {
fn from(err: std::io::Error) -> Self {
ParseError::IoError(err.to_string())
}
}
impl From<serde_json::Error> for ParseError {
fn from(err: serde_json::Error) -> Self {
ParseError::JsonError(err.to_string())
}
}