use indexmap::IndexMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(deny_unknown_fields)]
pub struct ExportConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub compose: Option<ComposeExport>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kubernetes: Option<KubernetesExport>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub helm: Option<HelmExport>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(deny_unknown_fields)]
pub struct ComposeExport {
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
pub resources: IndexMap<String, ComposeResourceExport>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(deny_unknown_fields)]
pub struct ComposeResourceExport {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(deny_unknown_fields)]
pub struct KubernetesExport {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image_pull_policy: Option<ImagePullPolicy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replicas: Option<u32>,
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
pub resources: IndexMap<String, KubernetesResourceExport>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(deny_unknown_fields)]
pub struct KubernetesResourceExport {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replicas: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image_pull_policy: Option<ImagePullPolicy>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(deny_unknown_fields)]
pub struct HelmExport {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub chart_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub chart_version: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replicas: Option<u32>,
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
pub resources: IndexMap<String, HelmResourceExport>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(deny_unknown_fields)]
pub struct HelmResourceExport {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replicas: Option<u32>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
pub enum ImagePullPolicy {
Always,
#[default]
IfNotPresent,
Never,
}