use kube_derive::CustomResource;
#[cfg(feature = "schemars")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[cfg(feature = "builder")]
use typed_builder::TypedBuilder;
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
#[cfg_attr(feature = "builder", derive(TypedBuilder))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
#[cfg_attr(not(feature = "schemars"), kube(schema = "disabled"))]
#[kube(
group = "traefik.io",
version = "v1alpha1",
kind = "MiddlewareTCP",
plural = "middlewaretcps"
)]
#[kube(namespaced)]
pub struct MiddlewareTCPSpec {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "inFlightConn"
)]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub in_flight_conn: Option<MiddlewareTCPInFlightConn>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "ipAllowList"
)]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub ip_allow_list: Option<MiddlewareTCPIpAllowList>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
#[cfg_attr(feature = "builder", derive(TypedBuilder))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct MiddlewareTCPInFlightConn {
#[serde(default, skip_serializing_if = "Option::is_none")]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub amount: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
#[cfg_attr(feature = "builder", derive(TypedBuilder))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct MiddlewareTCPIpAllowList {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sourceRange"
)]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub source_range: Option<Vec<String>>,
}