1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum Error {
5 #[error("not found: {0}")]
6 NotFound(String),
7
8 #[error("validation error: {0}")]
9 Validation(String),
10
11 #[error("permission denied: {0}")]
12 PermissionDenied(String),
13
14 #[error("storage error: {0}")]
15 Storage(String),
16
17 #[error("storage error: {message}")]
18 StorageSource {
19 message: String,
20 #[source]
21 source: Box<dyn std::error::Error + Send + Sync>,
22 },
23
24 #[error("index error: {0}")]
25 Index(String),
26
27 #[error("index error: {message}")]
28 IndexSource {
29 message: String,
30 #[source]
31 source: Box<dyn std::error::Error + Send + Sync>,
32 },
33
34 #[error("embedding error: {0}")]
35 Embedding(String),
36
37 #[error("embedding error: {message}")]
38 EmbeddingSource {
39 message: String,
40 #[source]
41 source: Box<dyn std::error::Error + Send + Sync>,
42 },
43
44 #[error("internal error: {0}")]
45 Internal(String),
46}
47
48impl From<duckdb::Error> for Error {
49 fn from(e: duckdb::Error) -> Self {
50 Error::Storage(e.to_string())
51 }
52}
53
54impl From<serde_json::Error> for Error {
55 fn from(e: serde_json::Error) -> Self {
56 Error::Internal(e.to_string())
57 }
58}
59
60impl From<reqwest::Error> for Error {
61 fn from(e: reqwest::Error) -> Self {
62 Error::Embedding(e.to_string())
63 }
64}
65
66pub type Result<T> = std::result::Result<T, Error>;