icinga2_api/types/common/
command.rs1use std::collections::BTreeMap;
6
7use serde::{Deserialize, Serialize};
8
9use crate::serde::{
10 deserialize_optional_seconds_as_duration, serialize_optional_duration_as_seconds,
11};
12
13use super::{
14 custom_var_object::{CustomVarHolder, IcingaCustomVarObject},
15 function::IcingaFunction,
16};
17
18#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
20pub struct IcingaCommand {
21 #[serde(flatten)]
23 pub custom_var: IcingaCustomVarObject,
24 pub arguments: Option<BTreeMap<String, IcingaCommandArgumentDescription>>,
26 pub command: Option<IcingaCommandLine>,
28 pub env: Option<BTreeMap<String, String>>,
30 pub execute: IcingaFunction,
32 #[serde(default)]
34 #[serde(
35 serialize_with = "serialize_optional_duration_as_seconds",
36 deserialize_with = "deserialize_optional_seconds_as_duration"
37 )]
38 pub timeout: Option<time::Duration>,
39}
40
41impl CustomVarHolder for IcingaCommand {
42 fn custom_var_value(&self, name: &str) -> Option<&serde_json::Value> {
43 self.custom_var.custom_var_value(name)
44 }
45}
46
47#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
49#[serde(untagged)]
50pub enum IcingaCommandParameter {
51 String(String),
53 Boolean(bool),
55 Integer(i64),
57}
58
59#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
61#[serde(untagged)]
62pub enum IcingaCommandLine {
63 Shell(String),
66 Function(IcingaFunction),
68 Exec(Vec<IcingaCommandParameter>),
70}
71
72#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
74#[serde(untagged)]
75pub enum IcingaArgumentCondition {
76 String(String),
78 Function(IcingaFunction),
80}
81
82#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
84#[serde(untagged)]
85pub enum IcingaCommandArgumentDescription {
86 String(String),
88 Function(IcingaFunction),
90 FullDescription {
92 description: Option<String>,
94 value: Option<String>,
96 key: Option<String>,
98 skip_key: Option<bool>,
100 repeat_key: Option<bool>,
102 set_if: Option<IcingaArgumentCondition>,
104 required: Option<bool>,
106 order: Option<u64>,
108 separator: Option<String>,
110 },
111}