Skip to main content

xurl_core/
error.rs

1use std::path::PathBuf;
2
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum XurlError {
7    #[error("invalid uri: {0}")]
8    InvalidUri(String),
9
10    #[error("unsupported scheme: {0}")]
11    UnsupportedScheme(String),
12
13    #[error("invalid session id: {0}")]
14    InvalidSessionId(String),
15
16    #[error("invalid mode: {0}")]
17    InvalidMode(String),
18
19    #[error("provider does not support subagent queries: {0}")]
20    UnsupportedSubagentProvider(String),
21
22    #[error("provider does not support write mode: {0}")]
23    UnsupportedProviderWrite(String),
24
25    #[error("command not found: {command}")]
26    CommandNotFound { command: String },
27
28    #[error("command failed: {command} (exit code: {code:?}): {stderr}")]
29    CommandFailed {
30        command: String,
31        code: Option<i32>,
32        stderr: String,
33    },
34
35    #[error("write protocol error: {0}")]
36    WriteProtocol(String),
37
38    #[error("serialization error: {0}")]
39    Serialization(String),
40
41    #[error("cannot determine home directory")]
42    HomeDirectoryNotFound,
43
44    #[error("thread not found for provider={provider} session_id={session_id}")]
45    ThreadNotFound {
46        provider: String,
47        session_id: String,
48        searched_roots: Vec<PathBuf>,
49    },
50
51    #[error("entry not found for provider={provider} session_id={session_id} entry_id={entry_id}")]
52    EntryNotFound {
53        provider: String,
54        session_id: String,
55        entry_id: String,
56    },
57
58    #[error("thread file is empty: {path}")]
59    EmptyThreadFile { path: PathBuf },
60
61    #[error("thread file is not valid UTF-8: {path}")]
62    NonUtf8ThreadFile { path: PathBuf },
63
64    #[error("i/o error on {path}: {source}")]
65    Io {
66        path: PathBuf,
67        #[source]
68        source: std::io::Error,
69    },
70
71    #[error("sqlite error on {path}: {source}")]
72    Sqlite {
73        path: PathBuf,
74        #[source]
75        source: rusqlite::Error,
76    },
77
78    #[error("invalid json line in {path} at line {line}: {source}")]
79    InvalidJsonLine {
80        path: PathBuf,
81        line: usize,
82        #[source]
83        source: serde_json::Error,
84    },
85}
86
87pub type Result<T> = std::result::Result<T, XurlError>;