hecate_entity/job/
error.rs1use 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}