use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct TemplateProposal {
pub name: String,
pub service: String,
pub command: PathBuf,
pub args: Vec<String>,
pub subjects: Vec<String>,
pub env: Vec<String>,
pub stop_timeout_ms: u64,
pub digest: String,
}
#[derive(Clone, PartialEq, Eq, Serialize)]
pub struct TemplateRecord {
#[serde(flatten)]
pub proposal: TemplateProposal,
pub approved_by: Vec<String>,
pub approved_at_ms: u64,
pub retired: bool,
pub transitions: Vec<super::super::site::Approval>,
}
impl<'de> Deserialize<'de> for TemplateRecord {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[derive(Deserialize)]
#[serde(deny_unknown_fields)]
struct Fields {
name: String,
service: String,
command: PathBuf,
args: Vec<String>,
subjects: Vec<String>,
env: Vec<String>,
stop_timeout_ms: u64,
digest: String,
approved_by: Vec<String>,
approved_at_ms: u64,
retired: bool,
transitions: Vec<super::super::site::Approval>,
}
let value = Fields::deserialize(deserializer)?;
Ok(Self {
proposal: TemplateProposal {
name: value.name,
service: value.service,
command: value.command,
args: value.args,
subjects: value.subjects,
env: value.env,
stop_timeout_ms: value.stop_timeout_ms,
digest: value.digest,
},
approved_by: value.approved_by,
approved_at_ms: value.approved_at_ms,
retired: value.retired,
transitions: value.transitions,
})
}
}