Skip to main content

skm_select/
error.rs

1//! Error types for skm-select.
2
3use thiserror::Error;
4
5/// Errors from selection operations.
6#[derive(Debug, Error)]
7pub enum SelectError {
8    /// Strategy initialization failed.
9    #[error("Strategy initialization failed: {0}")]
10    StrategyInit(String),
11
12    /// Selection failed.
13    #[error("Selection failed: {0}")]
14    Selection(String),
15
16    /// Timeout exceeded.
17    #[error("Selection timeout exceeded: {0}")]
18    Timeout(String),
19
20    /// Embedding error.
21    #[error("Embedding error: {0}")]
22    Embedding(#[from] skm_embed::EmbedError),
23
24    /// Core error.
25    #[error("Core error: {0}")]
26    Core(#[from] skm_core::CoreError),
27
28    /// LLM error.
29    #[error("LLM error: {0}")]
30    Llm(#[from] LlmError),
31
32    /// Regex error.
33    #[error("Regex error: {0}")]
34    Regex(#[from] regex::Error),
35}
36
37/// LLM-specific errors.
38#[derive(Debug, Error)]
39pub enum LlmError {
40    /// API request failed.
41    #[error("LLM API request failed: {0}")]
42    Api(String),
43
44    /// Parse error from LLM response.
45    #[error("Failed to parse LLM response: {0}")]
46    ParseError(String),
47
48    /// Timeout.
49    #[error("LLM request timed out")]
50    Timeout,
51
52    /// Rate limit.
53    #[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}