imagegen_bridge_core/
job.rs1use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6use crate::{BridgeError, ImageRequest, ImageResponse};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
10#[serde(rename_all = "snake_case")]
11pub enum ImageJobStatus {
12 Queued,
14 Running,
16 Succeeded,
18 Failed,
20 Cancelled,
22 Interrupted,
24}
25
26impl ImageJobStatus {
27 #[must_use]
29 pub const fn terminal(self) -> bool {
30 matches!(
31 self,
32 Self::Succeeded | Self::Failed | Self::Cancelled | Self::Interrupted
33 )
34 }
35}
36
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
39#[serde(deny_unknown_fields)]
40pub struct ImageJobProgress {
41 pub stage: String,
43 pub partial_images: u32,
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
49#[serde(deny_unknown_fields)]
50pub struct ImageJobSummary {
51 pub id: String,
53 pub status: ImageJobStatus,
55 pub created: u64,
57 pub updated: u64,
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub started: Option<u64>,
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub completed: Option<u64>,
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub progress: Option<ImageJobProgress>,
68 pub favorite: bool,
70 #[serde(skip_serializing_if = "Option::is_none")]
72 pub deleted: Option<u64>,
73}
74
75#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
77#[serde(deny_unknown_fields)]
78pub struct ImageJob {
79 #[serde(flatten)]
81 pub summary: ImageJobSummary,
82 pub request: ImageRequest,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub result: Option<ImageResponse>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub error: Option<BridgeError>,
90 pub cancel_requested: bool,
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
96#[serde(deny_unknown_fields)]
97pub struct ImageJobPage {
98 pub items: Vec<ImageJobSummary>,
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub next_cursor: Option<String>,
103}
104
105#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
107#[serde(deny_unknown_fields)]
108pub struct ImageJobUpdate {
109 #[serde(skip_serializing_if = "Option::is_none")]
111 pub favorite: Option<bool>,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub deleted: Option<bool>,
115}