conclave 0.1.0

A container orchestration tool
Documentation
/// Manifests:
///
/// These contain the intent for the system.
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>,
}