use std::path::PathBuf;
use crate::api::error::ApiError;
use crate::rich_text::RichTextError;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("failed to parse TOML: {0}")]
TomlDeserialize(#[from] toml::de::Error),
#[error("failed to encode TOML: {0}")]
TomlSerialize(#[from] toml::ser::Error),
#[error("invalid filter regex: {0}")]
Regex(#[from] regex::Error),
#[error(transparent)]
Api(#[from] ApiError),
#[error(transparent)]
RichText(#[from] RichTextError),
#[error("{0}")]
ProjectDirs(String),
#[error("filter expression cannot be empty")]
EmptyFilter,
#[error(
"unable to parse filter expression '{0}'; \
expected syntax field=value | field!=value | field~regex | field:substring"
)]
UnparseableFilter(String),
#[error("saved filter '{name}' not found in {path}")]
SavedFilterNotFound {
name: String,
path: PathBuf,
},
#[error("saved filter '{0}' does not contain any expressions")]
EmptySavedFilter(String),
#[error("cannot save filter '{0}' without at least one filter expression")]
NoFilterExpressions(String),
#[error("unsupported sort field '{0}'; supported values: name, created_at, modified_at")]
UnsupportedSortField(String),
#[error("template '{name}' not found; place templates in {search_dir}")]
TemplateNotFound {
name: String,
search_dir: PathBuf,
},
#[error("failed to initialise tracing: {0}")]
TracingInit(String),
}
pub type Result<T> = std::result::Result<T, Error>;