030e59e
zhenyi
refactor(lib): migrate storage and security tier to central lib/config (auth, cache, db, email, jwt, payment, queue, rate_limit, storage)
030e59e
use thiserror::Error;
pub type SearchResult<T> = Result<T, SearchError>;
#[derive(Debug, Error)]
pub enum SearchError {
#[error("meilisearch error: {0}")]
Meilisearch(#[from] meilisearch_sdk::errors::Error),
#[error("serialization error: {0}")]
Serde(#[from] serde_json::Error),
#[error("search is disabled")]
Disabled,
#[error("config invalid: {0}")]
Config(String),
#[error("index not found: {0}")]
IndexNotFound(String),
#[error("meilisearch task failed: {0}")]
TaskFailed(String),
#[error("invalid search query: {0}")]
InvalidQuery(String),
#[error("sync error: {0}")]
Sync(String),
#[error("queue error: {0}")]
Queue(#[from] queue::QueueError),
}
impl SearchError {
pub fn error_kind(&self) -> &'static str {
match self {
SearchError::Meilisearch(_) => "meilisearch",
SearchError::Serde(_) => "serde",
SearchError::Disabled => "disabled",
SearchError::Config(_) => "config",
SearchError::IndexNotFound(_) => "index_not_found",
SearchError::TaskFailed(_) => "task_failed",
SearchError::InvalidQuery(_) => "invalid_query",
SearchError::Sync(_) => "sync",
SearchError::Queue(_) => "queue",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn error_kind_labels() {
assert_eq!(SearchError::Disabled.error_kind(), "disabled");
assert_eq!(
SearchError::InvalidQuery("x".into()).error_kind(),
"invalid_query"
);
assert_eq!(
SearchError::TaskFailed("x".into()).error_kind(),
"task_failed"
);
}
}