1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum SelectError {
8 #[error("Strategy initialization failed: {0}")]
10 StrategyInit(String),
11
12 #[error("Selection failed: {0}")]
14 Selection(String),
15
16 #[error("Selection timeout exceeded: {0}")]
18 Timeout(String),
19
20 #[error("Embedding error: {0}")]
22 Embedding(#[from] skm_embed::EmbedError),
23
24 #[error("Core error: {0}")]
26 Core(#[from] skm_core::CoreError),
27
28 #[error("LLM error: {0}")]
30 Llm(#[from] LlmError),
31
32 #[error("Regex error: {0}")]
34 Regex(#[from] regex::Error),
35}
36
37#[derive(Debug, Error)]
39pub enum LlmError {
40 #[error("LLM API request failed: {0}")]
42 Api(String),
43
44 #[error("Failed to parse LLM response: {0}")]
46 ParseError(String),
47
48 #[error("LLM request timed out")]
50 Timeout,
51
52 #[error("LLM rate limit exceeded")]
54 RateLimit,
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn test_error_display() {
63 let err = SelectError::Timeout("5s exceeded".into());
64 assert!(err.to_string().contains("5s"));
65 }
66
67 #[test]
68 fn test_llm_error() {
69 let err = LlmError::ParseError("invalid JSON".into());
70 assert!(err.to_string().contains("invalid JSON"));
71 }
72}