use std::path::PathBuf;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum MarkdownConfigError {
#[error("Failed to parse markdown: {message}")]
ParseError { message: String },
#[error("Invalid YAML frontmatter: {message}")]
YamlError { message: String },
#[error("Schema validation failed: {message}")]
ValidationError { message: String },
#[error("Failed to load configuration from {path}: {message}")]
LoadError { path: PathBuf, message: String },
#[error("Registration failed: {message}")]
RegistrationError { message: String },
#[error("File watch error: {message}")]
WatchError { message: String },
#[error("Missing required field: {field}")]
MissingField { field: String },
#[error("Invalid value for field '{field}': {message}")]
InvalidFieldValue { field: String, message: String },
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
}
impl MarkdownConfigError {
pub fn parse_error(message: impl Into<String>) -> Self {
Self::ParseError {
message: message.into(),
}
}
pub fn yaml_error(message: impl Into<String>) -> Self {
Self::YamlError {
message: message.into(),
}
}
pub fn validation_error(message: impl Into<String>) -> Self {
Self::ValidationError {
message: message.into(),
}
}
pub fn load_error(path: impl Into<PathBuf>, message: impl Into<String>) -> Self {
Self::LoadError {
path: path.into(),
message: message.into(),
}
}
pub fn registration_error(message: impl Into<String>) -> Self {
Self::RegistrationError {
message: message.into(),
}
}
pub fn missing_field(field: impl Into<String>) -> Self {
Self::MissingField {
field: field.into(),
}
}
pub fn invalid_field_value(field: impl Into<String>, message: impl Into<String>) -> Self {
Self::InvalidFieldValue {
field: field.into(),
message: message.into(),
}
}
pub fn watch_error(message: impl Into<String>) -> Self {
Self::WatchError {
message: message.into(),
}
}
}
pub type MarkdownConfigResult<T> = Result<T, MarkdownConfigError>;