use std::fmt::Debug;
use std::path::PathBuf;
#[derive(Clone, Debug)]
pub enum Error {
Fs(FsError),
Parse(TracebackError<ParseError>),
Process(TracebackError<ProcessError>),
Plugin(String),
NotBuilt,
MetadataNotEnabled,
}
#[derive(Clone, Debug)]
pub struct TracebackError<T: Clone + Debug> {
pub path: PathBuf,
pub line: u32,
pub column: u32,
pub kind: T,
}
#[derive(Clone, Debug)]
pub enum FsError {
NotFound(String),
Read,
Write,
Conflict(PathBuf, PathBuf),
}
#[derive(Clone, Debug)]
pub enum ParseError {
UnexpectedEOF,
Expected(String),
InvalidVariableName(String),
InvalidFunctionName(String),
InvalidArgument,
NonexistentFunction(String),
GenericSyntaxError,
PositionalArgAfterNamedArg,
InvalidFrontmatter,
InvalidJson,
AssertionError(String),
}
#[derive(Clone, Debug)]
pub enum ProcessError {
MissingHtmlRoot,
MissingMarkdownRoot,
StackError,
EndWithoutBegin,
ElseWithoutIf,
NotJsonArray,
InvalidDate,
UnexpectedEndOfFile,
FeatureNotEnabled(String),
VariableAlreadyExists(String),
UndefinedVariable(String),
UndefinedSection(String),
NullError(String),
NotFound(String),
InvalidDataType {
variable: String,
expected: String,
found: String,
},
}