Skip to main content

mem_types/
job.rs

1//! Job and scheduler DTOs for async add (MemOS scheduler/status compatibility).
2
3use serde::{Deserialize, Serialize};
4
5/// Status of an async add job.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(rename_all = "lowercase")]
8pub enum JobStatus {
9    Pending,
10    Running,
11    Done,
12    Failed,
13}
14
15/// A submitted or running add job.
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct Job {
18    pub job_id: String,
19    pub status: JobStatus,
20    pub created_at: String,
21    pub updated_at: String,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub result_summary: Option<serde_json::Value>,
24}
25
26/// Response when add is submitted in async mode (returns task_id for status polling).
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct AddJobSubmitted {
29    #[serde(default = "default_code")]
30    pub code: i32,
31    pub message: String,
32    pub data: AddJobSubmittedData,
33}
34
35fn default_code() -> i32 {
36    200
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct AddJobSubmittedData {
41    pub task_id: String,
42}
43
44/// Response for GET /product/scheduler/status (MemOS-compatible).
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct SchedulerStatusResponse {
47    #[serde(default = "default_code")]
48    pub code: i32,
49    pub message: String,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub data: Option<Job>,
52}