platz-chart-ext 0.7.0

Platz Helm chart extensions
Documentation
mod v0;
mod v1beta1;
mod v1beta2;

pub use self::v0::{ChartExtCardinality, ChartExtFeaturesV0, ChartExtStatusFeature};
pub use self::v1beta1::ChartExtFeaturesV1Beta1;
pub use self::v1beta2::{
    ChartExtDeploymentDisplay, ChartExtDeploymentDisplayIcon, ChartExtDeploymentDisplayName,
    ChartExtDeploymentDisplayNameInputField, ChartExtFeaturesSpec, ChartExtFeaturesV1Beta2,
    ChartExtIngress, ChartExtIngressHostnameFormat,
};
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Deserialize, Serialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[serde(untagged)]
pub enum ChartExtFeatures {
    V1Beta2(ChartExtFeaturesV1Beta2),
    V1Beta1(ChartExtFeaturesV1Beta1),
    V0(ChartExtFeaturesV0),
}

impl Default for ChartExtFeatures {
    fn default() -> Self {
        Self::V1Beta2(Default::default())
    }
}

impl ChartExtFeatures {
    pub fn ingress(&self) -> v1beta2::ChartExtIngress {
        match self {
            Self::V1Beta2(features) => features.spec.ingress.clone(),
            Self::V1Beta1(features) => features.spec.standard_ingress.into(),
            Self::V0(features) => features.standard_ingress.into(),
        }
    }

    pub fn status(&self) -> Option<&v0::ChartExtStatusFeature> {
        match self {
            Self::V1Beta2(features) => features.spec.status.as_ref(),
            Self::V1Beta1(features) => features.spec.status.as_ref(),
            Self::V0(features) => features.status.as_ref(),
        }
    }

    pub fn cardinality(&self) -> &v0::ChartExtCardinality {
        match self {
            Self::V1Beta2(features) => &features.spec.cardinality,
            Self::V1Beta1(features) => &features.spec.cardinality,
            Self::V0(features) => &features.cardinality,
        }
    }

    pub fn reinstall_dependencies(&self) -> bool {
        match self {
            Self::V1Beta2(features) => features.spec.reinstall_dependencies,
            Self::V1Beta1(features) => features.spec.reinstall_dependencies,
            Self::V0(features) => features.reinstall_dependencies,
        }
    }

    pub fn node_selector_paths(&self) -> &Vec<Vec<String>> {
        match self {
            Self::V1Beta2(features) => &features.spec.node_selector_paths,
            Self::V1Beta1(features) => &features.spec.node_selector_paths,
            Self::V0(features) => &features.node_selector_paths,
        }
    }

    pub fn tolerations_paths(&self) -> &Vec<Vec<String>> {
        match self {
            Self::V1Beta2(features) => &features.spec.tolerations_paths,
            Self::V1Beta1(features) => &features.spec.tolerations_paths,
            Self::V0(features) => &features.tolerations_paths,
        }
    }

    pub fn display(&self) -> v1beta2::ChartExtDeploymentDisplay {
        match self {
            Self::V1Beta2(features) => features.spec.display.clone(),
            Self::V1Beta1(_) => Default::default(),
            Self::V0(_) => Default::default(),
        }
    }
}