1use std::path::PathBuf;
7
8#[derive(Debug, thiserror::Error)]
10pub enum SeekrError {
11 #[error("Scanner error: {0}")]
12 Scanner(#[from] ScannerError),
13
14 #[error("Parser error: {0}")]
15 Parser(#[from] ParserError),
16
17 #[error("Embedder error: {0}")]
18 Embedder(#[from] EmbedderError),
19
20 #[error("Index error: {0}")]
21 Index(#[from] IndexError),
22
23 #[error("Search error: {0}")]
24 Search(#[from] SearchError),
25
26 #[error("Server error: {0}")]
27 Server(#[from] ServerError),
28
29 #[error("Config error: {0}")]
30 Config(#[from] ConfigError),
31
32 #[error("IO error: {0}")]
33 Io(#[from] std::io::Error),
34}
35
36#[derive(Debug, thiserror::Error)]
38pub enum ScannerError {
39 #[error("Failed to walk directory '{path}': {source}")]
40 WalkError {
41 path: PathBuf,
42 source: std::io::Error,
43 },
44
45 #[error("File filter error: {0}")]
46 FilterError(String),
47
48 #[error("File watcher error: {0}")]
49 WatchError(String),
50}
51
52#[derive(Debug, thiserror::Error)]
54pub enum ParserError {
55 #[error("Unsupported language: {0}")]
56 UnsupportedLanguage(String),
57
58 #[error("Failed to parse file '{path}': {reason}")]
59 ParseFailed { path: PathBuf, reason: String },
60
61 #[error("Chunking error: {0}")]
62 ChunkError(String),
63
64 #[error("IO error: {0}")]
65 Io(#[from] std::io::Error),
66}
67
68#[derive(Debug, thiserror::Error)]
70pub enum EmbedderError {
71 #[error("Model not found at '{0}'")]
72 ModelNotFound(PathBuf),
73
74 #[error("Model download failed: {0}")]
75 DownloadFailed(String),
76
77 #[error("Model checksum mismatch: expected {expected}, got {actual}")]
78 ChecksumMismatch { expected: String, actual: String },
79
80 #[error("ONNX runtime error: {0}")]
81 OnnxError(String),
82
83 #[error("Embedding dimension mismatch: expected {expected}, got {actual}")]
84 DimensionMismatch { expected: usize, actual: usize },
85
86 #[error("IO error: {0}")]
87 Io(#[from] std::io::Error),
88}
89
90#[derive(Debug, thiserror::Error)]
92pub enum IndexError {
93 #[error("Index not found at '{0}'")]
94 NotFound(PathBuf),
95
96 #[error("Index version mismatch: file version {file_version}, expected {expected_version}")]
97 VersionMismatch {
98 file_version: u32,
99 expected_version: u32,
100 },
101
102 #[error("Corrupted index: {0}")]
103 Corrupted(String),
104
105 #[error("Serialization error: {0}")]
106 Serialization(String),
107
108 #[error("IO error: {0}")]
109 Io(#[from] std::io::Error),
110}
111
112#[derive(Debug, thiserror::Error)]
114pub enum SearchError {
115 #[error("Invalid regex pattern: {0}")]
116 InvalidRegex(String),
117
118 #[error("Invalid AST pattern: {0}")]
119 InvalidAstPattern(String),
120
121 #[error("Index error: {0}")]
122 Index(#[from] IndexError),
123
124 #[error("Embedder error: {0}")]
125 Embedder(#[from] EmbedderError),
126}
127
128#[derive(Debug, thiserror::Error)]
130pub enum ServerError {
131 #[error("Failed to bind address '{address}': {source}")]
132 BindFailed {
133 address: String,
134 source: std::io::Error,
135 },
136
137 #[error("MCP protocol error: {0}")]
138 McpError(String),
139
140 #[error("Internal error: {0}")]
141 Internal(String),
142}
143
144#[derive(Debug, thiserror::Error)]
146pub enum ConfigError {
147 #[error("Config file parse error: {0}")]
148 ParseError(String),
149
150 #[error("Invalid config value for '{key}': {reason}")]
151 InvalidValue { key: String, reason: String },
152
153 #[error("IO error: {0}")]
154 Io(#[from] std::io::Error),
155}
156
157pub type Result<T> = std::result::Result<T, SeekrError>;