llmvm_core_lib/
error.rs

1use std::str::Utf8Error;
2
3use handlebars::RenderError;
4use llmvm_protocol::{
5    error::{ProtocolErrorType, SerializableProtocolError},
6    ProtocolError,
7};
8use thiserror::Error;
9
10/// Error enum containing all possible core errors.
11#[derive(Debug, Error)]
12pub enum CoreError {
13    #[error("io error: {0}")]
14    IO(#[from] std::io::Error),
15    #[error("failed to start stdio backend: {0}")]
16    StdioBackendStart(std::io::Error),
17    #[error("template not found")]
18    TemplateNotFound,
19    #[error("utf8 error: {0}")]
20    Utf8Error(#[from] Utf8Error),
21    #[error("unable to load app data, could not find user home folder")]
22    UserHomeNotFound,
23    #[error("json serialization error: {0}")]
24    JsonSerialization(#[from] serde_json::Error),
25    #[error("toml serialization error: {0}")]
26    TomlSerialization(#[from] toml::de::Error),
27    #[error("thread not found")]
28    ThreadNotFound,
29    #[error("preset not found")]
30    PresetNotFound,
31    #[error("failed to parse model name")]
32    ModelDescriptionParse,
33    #[error("backend error (via stdio): {0}")]
34    BackendStdio(#[from] SerializableProtocolError),
35    #[error("backend error: {0}")]
36    Protocol(#[from] ProtocolError),
37    #[error("tempate render error: {0}")]
38    TemplateRender(#[from] RenderError),
39    #[error("missing generation parameters")]
40    MissingParameters,
41    #[error("missing required generation parameter: {0}")]
42    MissingParameter(&'static str),
43    #[error("failed to create http backend service")]
44    HttpServiceCreate,
45    #[error("unexpected service response type")]
46    UnexpectedServiceResponse,
47}
48
49impl Into<ProtocolError> for CoreError {
50    fn into(self) -> ProtocolError {
51        let error_type = match &self {
52            CoreError::IO(_) => ProtocolErrorType::Internal,
53            CoreError::StdioBackendStart(_) => ProtocolErrorType::Internal,
54            CoreError::TemplateNotFound => ProtocolErrorType::BadRequest,
55            CoreError::Utf8Error(_) => ProtocolErrorType::BadRequest,
56            CoreError::UserHomeNotFound => ProtocolErrorType::Internal,
57            CoreError::JsonSerialization(_) => ProtocolErrorType::BadRequest,
58            CoreError::TomlSerialization(_) => ProtocolErrorType::BadRequest,
59            CoreError::ThreadNotFound => ProtocolErrorType::NotFound,
60            CoreError::PresetNotFound => ProtocolErrorType::BadRequest,
61            CoreError::ModelDescriptionParse => ProtocolErrorType::BadRequest,
62            CoreError::BackendStdio(error) => error.error_type.clone(),
63            CoreError::Protocol(error) => error.error_type.clone(),
64            CoreError::TemplateRender(_) => ProtocolErrorType::BadRequest,
65            CoreError::MissingParameters => ProtocolErrorType::BadRequest,
66            CoreError::MissingParameter(_) => ProtocolErrorType::BadRequest,
67            CoreError::HttpServiceCreate => ProtocolErrorType::Internal,
68            CoreError::UnexpectedServiceResponse => ProtocolErrorType::Internal,
69        };
70        ProtocolError {
71            error_type,
72            error: Box::new(self),
73        }
74    }
75}