use crate::*;
use k8s_openapi::apimachinery::pkg::apis::meta::v1 as metav1;
use std::collections::BTreeMap;
#[derive(
Clone, Debug, kube::CustomResource, serde::Deserialize, serde::Serialize, schemars::JsonSchema,
)]
#[kube(
group = "gateway.networking.k8s.io",
version = "v1beta1",
kind = "Gateway",
status = "GatewayStatus",
namespaced
)]
#[serde(rename_all = "camelCase")]
pub struct GatewaySpec {
pub gateway_class_name: ObjectName,
pub listeners: Vec<Listener>,
pub addresses: Option<Vec<GatewayAddress>>,
}
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct Listener {
pub name: String,
pub hostname: Option<Hostname>,
pub port: PortNumber,
pub protocol: ProtocolType,
pub tls: Option<GatewayTlsConfig>,
pub allowed_routes: Option<AllowedRoutes>,
}
pub type ProtocolType = String;
#[derive(
Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema,
)]
#[serde(rename_all = "camelCase")]
pub struct GatewayTlsConfig {
pub mode: Option<TlsModeType>,
pub certificate_refs: Option<Vec<SecretObjectReference>>,
pub options: Option<BTreeMap<String, String>>,
}
pub type TlsModeType = String;
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct AllowedRoutes {
pub namespaces: Option<RouteNamespaces>,
pub kinds: Option<Vec<RouteGroupKind>>,
}
pub type FromNamespaces = String;
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
pub struct RouteNamespaces {
pub from: Option<FromNamespaces>,
pub selector: Option<metav1::LabelSelector>,
}
#[derive(
Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema,
)]
pub struct RouteGroupKind {
pub group: Option<String>,
pub kind: String,
}
#[derive(
Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema,
)]
pub struct GatewayAddress {
pub r#type: Option<AddressType>,
pub value: String,
}
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
pub struct GatewayStatus {
pub addresses: Option<Vec<GatewayAddress>>,
pub conditions: Option<Vec<metav1::Condition>>,
pub listeners: Option<Vec<ListenerStatus>>,
}
pub type GatewayConditionType = String;
pub type GatewayConditionReason = String;
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct ListenerStatus {
pub name: SectionName,
pub supported_kinds: Vec<RouteGroupKind>,
pub attached_routes: u16,
pub conditions: Vec<metav1::Condition>,
}
pub type ListenerConditionType = String;
pub type ListenerConditionReason = String;