kanade_shared/
manifest.rs1use serde::{Deserialize, Serialize};
2
3use crate::wire::Shell;
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
8pub struct Manifest {
9 pub id: String,
10 pub version: String,
11 #[serde(default)]
12 pub description: Option<String>,
13 pub target: Target,
14 pub execute: Execute,
15 #[serde(default)]
21 pub rollout: Option<Rollout>,
22 #[serde(default)]
23 pub require_approval: bool,
24}
25
26#[derive(Serialize, Deserialize, Debug, Clone)]
27pub struct Rollout {
28 #[serde(default)]
29 pub strategy: RolloutStrategy,
30 pub waves: Vec<Wave>,
31}
32
33#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Default)]
34#[serde(rename_all = "lowercase")]
35pub enum RolloutStrategy {
36 #[default]
37 Wave,
38}
39
40#[derive(Serialize, Deserialize, Debug, Clone)]
41pub struct Wave {
42 pub group: String,
43 pub delay: String,
46}
47
48#[derive(Serialize, Deserialize, Debug, Clone, Default)]
49pub struct Target {
50 #[serde(default)]
51 pub groups: Vec<String>,
52 #[serde(default)]
53 pub pcs: Vec<String>,
54 #[serde(default)]
55 pub all: bool,
56}
57
58impl Target {
59 pub fn is_specified(&self) -> bool {
61 self.all || !self.groups.is_empty() || !self.pcs.is_empty()
62 }
63}
64
65#[derive(Serialize, Deserialize, Debug, Clone)]
66pub struct Execute {
67 pub shell: ExecuteShell,
68 pub script: String,
69 pub timeout: String,
71 #[serde(default)]
73 pub jitter: Option<String>,
74}
75
76#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
77#[serde(rename_all = "lowercase")]
78pub enum ExecuteShell {
79 Powershell,
80 Cmd,
81}
82
83impl From<ExecuteShell> for Shell {
84 fn from(s: ExecuteShell) -> Self {
85 match s {
86 ExecuteShell::Powershell => Shell::Powershell,
87 ExecuteShell::Cmd => Shell::Cmd,
88 }
89 }
90}
91
92#[derive(Serialize, Deserialize, Debug, Clone)]
97pub struct Schedule {
98 pub id: String,
99 pub cron: String,
102 pub manifest: Manifest,
103 #[serde(default = "default_true")]
104 pub enabled: bool,
105}
106
107fn default_true() -> bool {
108 true
109}