1use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(PartialEq, Eq, Clone)]
8pub struct ReplicaSetId(String);
9
10impl From<&str> for ReplicaSetId {
11 fn from(s: &str) -> Self {
12 ReplicaSetId(s.to_string())
13 }
14}
15
16impl std::fmt::Display for ReplicaSetId {
17 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
18 write!(f, "{}", self.0)
19 }
20}
21
22impl std::fmt::Debug for ReplicaSetId {
23 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
24 write!(f, "ReplicaSetId({})", self.0)
25 }
26}
27
28impl serde::Serialize for ReplicaSetId {
29 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30 where
31 S: serde::ser::Serializer,
32 {
33 self.0.serialize(serializer)
34 }
35}
36
37impl<'a> serde::Deserialize<'a> for ReplicaSetId {
38 fn deserialize<D>(deserializer: D) -> Result<ReplicaSetId, D::Error>
39 where
40 D: serde::de::Deserializer<'a>,
41 {
42 let s = String::deserialize(deserializer)?;
43 Ok(ReplicaSetId(s))
44 }
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
48pub struct Metadata {
49 pub name: String,
50 pub labels: HashMap<String, String>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
54pub struct Manifest<T> {
55 pub metadata: Metadata,
56 pub spec: T,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
60pub struct PodTemplate {
61 pub containers: Vec<ContainerSpec>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
65pub enum Replicas {
66 Fixed(u32),
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
70pub struct ReplicaSetSpec {
71 pub replicas: Replicas,
72 pub pod_template: PodTemplate,
73}
74
75pub type ReplicaSetManifest = Manifest<ReplicaSetSpec>;
76
77#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
78pub struct ContainerSpec {
79 pub name: String,
80 pub image: String,
81 pub args: Vec<String>,
82 pub env: HashMap<String, String>,
83}