use crate::prelude::*;
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, JsonSchema)]
#[kube(
group = "postgresql.cnpg.io",
version = "v1",
kind = "Publication",
plural = "publications"
)]
#[kube(namespaced)]
#[kube(status = "PublicationStatus")]
pub struct PublicationSpec {
pub cluster: PublicationCluster,
pub dbname: String,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parameters: Option<BTreeMap<String, String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "publicationReclaimPolicy"
)]
pub publication_reclaim_policy: Option<PublicationPublicationReclaimPolicy>,
pub target: PublicationTarget,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PublicationCluster {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub enum PublicationPublicationReclaimPolicy {
#[serde(rename = "delete")]
Delete,
#[serde(rename = "retain")]
Retain,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PublicationTarget {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "allTables")]
pub all_tables: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub objects: Option<Vec<PublicationTargetObjects>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PublicationTargetObjects {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub table: Option<PublicationTargetObjectsTable>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "tablesInSchema"
)]
pub tables_in_schema: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PublicationTargetObjectsTable {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub columns: Option<Vec<String>>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub only: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub schema: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PublicationStatus {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub applied: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "observedGeneration"
)]
pub observed_generation: Option<i64>,
}