use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
use kube::CustomResource;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
#[kube(
group = "traefik.containo.us",
version = "v1alpha1",
kind = "IngressRouteTCP",
plural = "ingressroutetcps"
)]
#[kube(namespaced)]
pub struct IngressRouteTCPSpec {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "entryPoints")]
pub entry_points: Option<Vec<String>>,
pub routes: Vec<IngressRouteTCPRoutes>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tls: Option<IngressRouteTCPTls>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTCPRoutes {
#[serde(rename = "match")]
pub r#match: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub middlewares: Option<Vec<IngressRouteTCPRoutesMiddlewares>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub priority: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub services: Option<Vec<IngressRouteTCPRoutesServices>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema, PartialEq)]
pub struct IngressRouteTCPRoutesMiddlewares {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTCPRoutesServices {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
pub port: IntOrString,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "proxyProtocol")]
pub proxy_protocol: Option<IngressRouteTCPRoutesServicesProxyProtocol>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationDelay")]
pub termination_delay: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub weight: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTCPRoutesServicesProxyProtocol {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTCPTls {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "certResolver")]
pub cert_resolver: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub domains: Option<Vec<IngressRouteTCPTlsDomains>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<IngressRouteTCPTlsOptions>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub passthrough: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")]
pub secret_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub store: Option<IngressRouteTCPTlsStore>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTCPTlsDomains {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub main: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sans: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTCPTlsOptions {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTCPTlsStore {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}