tests_fuzz/utils/crd/
common.rs1use std::collections::BTreeMap;
16
17use derive_builder::Builder;
18use schemars::JsonSchema;
19use serde::{Deserialize, Serialize};
20
21#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
22#[serde(rename_all = "kebab-case")]
23pub enum Mode {
24 One,
25 All,
26 Fixed,
27 FixedPercent,
28 RandomMaxPercent,
29}
30
31#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Default, Builder, JsonSchema)]
32#[serde(default, rename_all = "camelCase")]
33#[builder(setter(into, strip_option), default)]
34pub struct Selector {
35 #[serde(skip_serializing_if = "Vec::is_empty")]
36 namespaces: Vec<String>,
37 #[serde(skip_serializing_if = "BTreeMap::is_empty")]
38 label_selectors: BTreeMap<String, String>,
39 #[serde(skip_serializing_if = "Vec::is_empty")]
40 expression_selectors: Vec<ExpressionSelector>,
41 #[serde(skip_serializing_if = "BTreeMap::is_empty")]
42 annotation_selectors: BTreeMap<String, String>,
43 #[serde(skip_serializing_if = "BTreeMap::is_empty")]
44 field_selectors: BTreeMap<String, String>,
45 #[serde(skip_serializing_if = "BTreeMap::is_empty")]
46 pod_phase_selectors: BTreeMap<String, String>,
47}
48
49#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
50pub struct ExpressionSelector {
51 key: String,
52 operator: String,
53 values: Vec<String>,
54}
55
56#[cfg(test)]
57mod tests {
58 use std::collections::BTreeMap;
59
60 use super::SelectorBuilder;
61
62 #[test]
63 fn test_serde() {
64 let mut fs = BTreeMap::new();
65 fs.insert("app.kubernetes.io/component".into(), "tikv".into());
66 let selector = SelectorBuilder::default()
67 .field_selectors(fs)
68 .build()
69 .unwrap();
70 let ser = serde_yaml::to_string(&selector).unwrap();
71 assert_eq!(
72 r#"fieldSelectors:
73 app.kubernetes.io/component: tikv
74"#,
75 ser
76 );
77 }
78}