liminal_server/services/templates/
records.rs1use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(deny_unknown_fields)]
9pub struct TemplateProposal {
10 pub name: String,
12 pub service: String,
14 pub command: PathBuf,
16 pub args: Vec<String>,
18 pub subjects: Vec<String>,
20 pub env: Vec<String>,
22 pub stop_timeout_ms: u64,
24 pub digest: String,
26}
27
28#[derive(Clone, PartialEq, Eq, Serialize)]
30pub struct TemplateRecord {
31 #[serde(flatten)]
33 pub proposal: TemplateProposal,
34 pub approved_by: Vec<String>,
36 pub approved_at_ms: u64,
38 pub retired: bool,
40 pub transitions: Vec<super::super::site::Approval>,
42}
43
44impl<'de> Deserialize<'de> for TemplateRecord {
45 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
46 #[derive(Deserialize)]
47 #[serde(deny_unknown_fields)]
48 struct Fields {
49 name: String,
50 service: String,
51 command: PathBuf,
52 args: Vec<String>,
53 subjects: Vec<String>,
54 env: Vec<String>,
55 stop_timeout_ms: u64,
56 digest: String,
57 approved_by: Vec<String>,
58 approved_at_ms: u64,
59 retired: bool,
60 transitions: Vec<super::super::site::Approval>,
61 }
62 let value = Fields::deserialize(deserializer)?;
63 Ok(Self {
64 proposal: TemplateProposal {
65 name: value.name,
66 service: value.service,
67 command: value.command,
68 args: value.args,
69 subjects: value.subjects,
70 env: value.env,
71 stop_timeout_ms: value.stop_timeout_ms,
72 digest: value.digest,
73 },
74 approved_by: value.approved_by,
75 approved_at_ms: value.approved_at_ms,
76 retired: value.retired,
77 transitions: value.transitions,
78 })
79 }
80}