use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct ScannerStatus {
pub version: String,
pub state: ScannerState,
#[serde(default, skip_serializing_if = "Jobs::is_empty")]
pub jobs: Jobs,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum ScannerState {
Idle,
Processing,
Testing,
Stopped,
Down,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Jobs {
pub job_info: Vec<JobInfo>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct JobInfo {
pub job_uri: String,
pub job_uuid: String,
pub age: u32,
pub images_completed: u32,
pub images_to_transfer: u32,
pub job_state: JobState,
pub job_state_reasons: JobStateReasons,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum JobState {
Canceled,
Aborted,
Completed,
Pending,
Processing,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct JobStateReasons {
pub job_state_reason: String,
}
impl Jobs {
fn is_empty(&self) -> bool {
self.job_info.is_empty()
}
}