use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(PartialEq, Eq, Clone)]
pub struct ReplicaSetId(String);
impl From<&str> for ReplicaSetId {
fn from(s: &str) -> Self {
ReplicaSetId(s.to_string())
}
}
impl std::fmt::Display for ReplicaSetId {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl std::fmt::Debug for ReplicaSetId {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "ReplicaSetId({})", self.0)
}
}
impl serde::Serialize for ReplicaSetId {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::ser::Serializer,
{
self.0.serialize(serializer)
}
}
impl<'a> serde::Deserialize<'a> for ReplicaSetId {
fn deserialize<D>(deserializer: D) -> Result<ReplicaSetId, D::Error>
where
D: serde::de::Deserializer<'a>,
{
let s = String::deserialize(deserializer)?;
Ok(ReplicaSetId(s))
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Metadata {
pub name: String,
pub labels: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Manifest<T> {
pub metadata: Metadata,
pub spec: T,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct PodTemplate {
pub containers: Vec<ContainerSpec>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum Replicas {
Fixed(u32),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ReplicaSetSpec {
pub replicas: Replicas,
pub pod_template: PodTemplate,
}
pub type ReplicaSetManifest = Manifest<ReplicaSetSpec>;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ContainerSpec {
pub name: String,
pub image: String,
pub args: Vec<String>,
pub env: HashMap<String, String>,
}