use thiserror::Error;
#[derive(Debug, Error)]
pub enum SelectError {
#[error("Strategy initialization failed: {0}")]
StrategyInit(String),
#[error("Selection failed: {0}")]
Selection(String),
#[error("Selection timeout exceeded: {0}")]
Timeout(String),
#[error("Embedding error: {0}")]
Embedding(#[from] skm_embed::EmbedError),
#[error("Core error: {0}")]
Core(#[from] skm_core::CoreError),
#[error("LLM error: {0}")]
Llm(#[from] LlmError),
#[error("Regex error: {0}")]
Regex(#[from] regex::Error),
}
#[derive(Debug, Error)]
pub enum LlmError {
#[error("LLM API request failed: {0}")]
Api(String),
#[error("Failed to parse LLM response: {0}")]
ParseError(String),
#[error("LLM request timed out")]
Timeout,
#[error("LLM rate limit exceeded")]
RateLimit,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = SelectError::Timeout("5s exceeded".into());
assert!(err.to_string().contains("5s"));
}
#[test]
fn test_llm_error() {
let err = LlmError::ParseError("invalid JSON".into());
assert!(err.to_string().contains("invalid JSON"));
}
}