1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use serde::Serialize;
use k8_obj_metadata::Crd;
use k8_obj_metadata::K8Obj;
use k8_obj_metadata::Spec;
#[derive(Debug)]
pub enum ApplyResult<S>
where
S: Spec,
{
None,
Created(K8Obj<S>),
Patched(K8Obj<S>),
}
#[allow(dead_code)]
pub enum PatchMergeType {
Json,
JsonMerge,
StrategicMerge,
}
impl PatchMergeType {
pub fn for_spec(crd: &Crd) -> Self {
match crd.group {
"core" => PatchMergeType::StrategicMerge,
"apps" => PatchMergeType::StrategicMerge,
_ => PatchMergeType::JsonMerge,
}
}
pub fn content_type(&self) -> &'static str {
match self {
PatchMergeType::Json => "application/json-patch+json",
PatchMergeType::JsonMerge => "application/merge-patch+json",
PatchMergeType::StrategicMerge => "application/strategic-merge-patch+json",
}
}
}
#[derive(Serialize, Debug, Clone)]
pub struct DiffSpec<S> {
spec: S,
}
impl<S> DiffSpec<S>
where
S: Serialize,
{
pub fn from(spec: S) -> Self {
DiffSpec { spec }
}
}