hecate_entity/job/
error.rs

1use hecate::{CodeGenError, SchemaValidationError};
2use hecate_executor::{BoxError, ExecutorError};
3use rmcp::Error as RmcpError;
4use thiserror::Error;
5
6#[derive(Debug, Error)]
7pub enum JobError {
8    #[error("job {0} not found")]
9    JobNotFound(i64),
10    #[error("invalid job config: {0}")]
11    InvalidJobConfig(String),
12    #[error("database error")]
13    DatabaseError(#[from] sea_orm::DbErr),
14    #[error("executor error: {0}")]
15    ExecutorError(#[from] ExecutorError),
16    #[error("failed to parse status from response, received: {0}")]
17    ParsingStatusFailed(String),
18    #[error("failed to generate source code")]
19    CodeGenError(#[from] CodeGenError),
20    #[error("input schema is invalid")]
21    SchemaValidationError(#[from] SchemaValidationError),
22    #[error("internal error")]
23    InternalError(#[from] BoxError),
24    #[error("JSON serialization failed")]
25    JSONSerializationError(#[from] serde_json::Error),
26    #[error("job execution failed")]
27    ExecutionFailed(#[from] RunJobError),
28    #[error("TODO")]
29    NotImplemented,
30}
31
32use JobError::*;
33
34use crate::job::workflow::RunJobError;
35
36impl From<JobError> for rmcp::Error {
37    fn from(err: JobError) -> Self {
38        match err {
39            JobNotFound(_) => RmcpError::resource_not_found(err.to_string(), None),
40            InvalidJobConfig(_) | SchemaValidationError(_) => {
41                RmcpError::invalid_params(err.to_string(), None)
42            }
43            _ => RmcpError::internal_error(err.to_string(), None),
44        }
45    }
46}