use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::adjustable::Adjustable;
use crate::ids::PrintId;
use crate::printer::PrinterState;
use crate::reported::Range;
use crate::timestamp::Timestamp;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct ManifestNarrowing {
pub adjustable: Adjustable,
pub requested: Range,
pub applied: Range,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct PrintRecord {
pub id: PrintId,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub obico_print_id: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub file_name: Option<String>,
pub state: PrinterState,
pub opened_at: Timestamp,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ended_at: Option<Timestamp>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub end_reason: Option<String>,
pub narrowings: Vec<ManifestNarrowing>,
}