1use kbolt_types::KboltError;
2use thiserror::Error;
3
4#[derive(Debug, Error)]
5pub enum CoreError {
6 #[error(transparent)]
7 Domain(#[from] KboltError),
8
9 #[error("database error: {0}")]
10 Sqlite(#[from] rusqlite::Error),
11
12 #[error("toml decode error: {0}")]
13 TomlDe(#[from] toml::de::Error),
14
15 #[error("toml encode error: {0}")]
16 TomlSer(#[from] toml::ser::Error),
17
18 #[error("json error: {0}")]
19 Json(#[from] serde_json::Error),
20
21 #[error("tantivy error: {0}")]
22 Tantivy(#[from] tantivy::TantivyError),
23
24 #[error("io error: {0}")]
25 Io(#[from] std::io::Error),
26
27 #[error("internal error: {0}")]
28 Internal(String),
29}
30
31impl CoreError {
32 pub fn poisoned(resource: &str) -> Self {
33 Self::Internal(format!("{resource} mutex poisoned"))
34 }
35}
36
37impl From<CoreError> for KboltError {
38 fn from(value: CoreError) -> Self {
39 match value {
40 CoreError::Domain(err) => err,
41 CoreError::Sqlite(err) => KboltError::Database(err.to_string()),
42 CoreError::TomlDe(err) => KboltError::Config(format!("failed to parse config: {err}")),
43 CoreError::TomlSer(err) => {
44 KboltError::Config(format!("failed to serialize config: {err}"))
45 }
46 CoreError::Json(err) => KboltError::Internal(format!("json error: {err}")),
47 CoreError::Tantivy(err) => KboltError::Tantivy(err.to_string()),
48 CoreError::Io(err) => KboltError::Io(err),
49 CoreError::Internal(msg) => KboltError::Internal(msg),
50 }
51 }
52}
53
54pub type Result<T> = std::result::Result<T, CoreError>;