#[allow(unused_imports)]
mod prelude {
pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
pub use kube::CustomResource;
pub use schemars::JsonSchema;
pub use serde::{Deserialize, Serialize};
pub use std::collections::BTreeMap;
}
use self::prelude::*;
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
#[kube(
group = "traefik.io",
version = "v1alpha1",
kind = "Middleware",
plural = "middlewares"
)]
#[kube(namespaced)]
#[kube(derive = "Default")]
pub struct MiddlewareSpec {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "addPrefix")]
pub add_prefix: Option<MiddlewareAddPrefix>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")]
pub basic_auth: Option<MiddlewareBasicAuth>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub buffering: Option<MiddlewareBuffering>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub chain: Option<MiddlewareChain>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "circuitBreaker"
)]
pub circuit_breaker: Option<MiddlewareCircuitBreaker>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub compress: Option<MiddlewareCompress>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "contentType"
)]
pub content_type: Option<MiddlewareContentType>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "digestAuth"
)]
pub digest_auth: Option<MiddlewareDigestAuth>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub errors: Option<MiddlewareErrors>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "forwardAuth"
)]
pub forward_auth: Option<MiddlewareForwardAuth>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "grpcWeb")]
pub grpc_web: Option<MiddlewareGrpcWeb>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub headers: Option<MiddlewareHeaders>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "inFlightReq"
)]
pub in_flight_req: Option<MiddlewareInFlightReq>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "ipAllowList"
)]
pub ip_allow_list: Option<MiddlewareIpAllowList>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "ipWhiteList"
)]
pub ip_white_list: Option<MiddlewareIpWhiteList>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "passTLSClientCert"
)]
pub pass_tls_client_cert: Option<MiddlewarePassTlsClientCert>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub plugin: Option<BTreeMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "rateLimit")]
pub rate_limit: Option<MiddlewareRateLimit>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "redirectRegex"
)]
pub redirect_regex: Option<MiddlewareRedirectRegex>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "redirectScheme"
)]
pub redirect_scheme: Option<MiddlewareRedirectScheme>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "replacePath"
)]
pub replace_path: Option<MiddlewareReplacePath>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "replacePathRegex"
)]
pub replace_path_regex: Option<MiddlewareReplacePathRegex>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retry: Option<MiddlewareRetry>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "stripPrefix"
)]
pub strip_prefix: Option<MiddlewareStripPrefix>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "stripPrefixRegex"
)]
pub strip_prefix_regex: Option<MiddlewareStripPrefixRegex>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareAddPrefix {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareBasicAuth {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "headerField"
)]
pub header_field: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub realm: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "removeHeader"
)]
pub remove_header: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub secret: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareBuffering {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "maxRequestBodyBytes"
)]
pub max_request_body_bytes: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "maxResponseBodyBytes"
)]
pub max_response_body_bytes: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "memRequestBodyBytes"
)]
pub mem_request_body_bytes: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "memResponseBodyBytes"
)]
pub mem_response_body_bytes: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "retryExpression"
)]
pub retry_expression: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareChain {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub middlewares: Option<Vec<MiddlewareChainMiddlewares>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareChainMiddlewares {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareCircuitBreaker {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "checkPeriod"
)]
pub check_period: Option<IntOrString>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expression: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "fallbackDuration"
)]
pub fallback_duration: Option<IntOrString>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "recoveryDuration"
)]
pub recovery_duration: Option<IntOrString>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareCompress {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "excludedContentTypes"
)]
pub excluded_content_types: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "includedContentTypes"
)]
pub included_content_types: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "minResponseBodyBytes"
)]
pub min_response_body_bytes: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareContentType {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "autoDetect"
)]
pub auto_detect: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareDigestAuth {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "headerField"
)]
pub header_field: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub realm: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "removeHeader"
)]
pub remove_header: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub secret: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareErrors {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub query: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service: Option<MiddlewareErrorsService>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareErrorsService {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<MiddlewareErrorsServiceKind>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "nativeLB")]
pub native_lb: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "passHostHeader"
)]
pub pass_host_header: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub port: Option<IntOrString>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "responseForwarding"
)]
pub response_forwarding: Option<MiddlewareErrorsServiceResponseForwarding>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scheme: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "serversTransport"
)]
pub servers_transport: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sticky: Option<MiddlewareErrorsServiceSticky>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub strategy: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub weight: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub enum MiddlewareErrorsServiceKind {
Service,
TraefikService,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareErrorsServiceResponseForwarding {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "flushInterval"
)]
pub flush_interval: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareErrorsServiceSticky {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cookie: Option<MiddlewareErrorsServiceStickyCookie>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareErrorsServiceStickyCookie {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "httpOnly")]
pub http_only: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxAge")]
pub max_age: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sameSite")]
pub same_site: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub secure: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareForwardAuth {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "addAuthCookiesToResponse"
)]
pub add_auth_cookies_to_response: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub address: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "authRequestHeaders"
)]
pub auth_request_headers: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "authResponseHeaders"
)]
pub auth_response_headers: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "authResponseHeadersRegex"
)]
pub auth_response_headers_regex: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tls: Option<MiddlewareForwardAuthTls>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "trustForwardHeader"
)]
pub trust_forward_header: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareForwardAuthTls {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "caOptional"
)]
pub ca_optional: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "caSecret")]
pub ca_secret: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "certSecret"
)]
pub cert_secret: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "insecureSkipVerify"
)]
pub insecure_skip_verify: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareGrpcWeb {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "allowOrigins"
)]
pub allow_origins: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareHeaders {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "accessControlAllowCredentials"
)]
pub access_control_allow_credentials: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "accessControlAllowHeaders"
)]
pub access_control_allow_headers: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "accessControlAllowMethods"
)]
pub access_control_allow_methods: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "accessControlAllowOriginList"
)]
pub access_control_allow_origin_list: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "accessControlAllowOriginListRegex"
)]
pub access_control_allow_origin_list_regex: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "accessControlExposeHeaders"
)]
pub access_control_expose_headers: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "accessControlMaxAge"
)]
pub access_control_max_age: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "addVaryHeader"
)]
pub add_vary_header: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "allowedHosts"
)]
pub allowed_hosts: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "browserXssFilter"
)]
pub browser_xss_filter: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "contentSecurityPolicy"
)]
pub content_security_policy: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "contentTypeNosniff"
)]
pub content_type_nosniff: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "customBrowserXSSValue"
)]
pub custom_browser_xss_value: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "customFrameOptionsValue"
)]
pub custom_frame_options_value: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "customRequestHeaders"
)]
pub custom_request_headers: Option<BTreeMap<String, String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "customResponseHeaders"
)]
pub custom_response_headers: Option<BTreeMap<String, String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "featurePolicy"
)]
pub feature_policy: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "forceSTSHeader"
)]
pub force_sts_header: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "frameDeny")]
pub frame_deny: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "hostsProxyHeaders"
)]
pub hosts_proxy_headers: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "isDevelopment"
)]
pub is_development: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "permissionsPolicy"
)]
pub permissions_policy: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "publicKey")]
pub public_key: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "referrerPolicy"
)]
pub referrer_policy: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sslForceHost"
)]
pub ssl_force_host: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sslHost")]
pub ssl_host: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sslProxyHeaders"
)]
pub ssl_proxy_headers: Option<BTreeMap<String, String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sslRedirect"
)]
pub ssl_redirect: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sslTemporaryRedirect"
)]
pub ssl_temporary_redirect: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "stsIncludeSubdomains"
)]
pub sts_include_subdomains: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "stsPreload"
)]
pub sts_preload: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "stsSeconds"
)]
pub sts_seconds: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareInFlightReq {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sourceCriterion"
)]
pub source_criterion: Option<MiddlewareInFlightReqSourceCriterion>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareInFlightReqSourceCriterion {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "ipStrategy"
)]
pub ip_strategy: Option<MiddlewareInFlightReqSourceCriterionIpStrategy>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "requestHeaderName"
)]
pub request_header_name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "requestHost"
)]
pub request_host: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareInFlightReqSourceCriterionIpStrategy {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub depth: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "excludedIPs"
)]
pub excluded_i_ps: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareIpAllowList {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "ipStrategy"
)]
pub ip_strategy: Option<MiddlewareIpAllowListIpStrategy>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "rejectStatusCode"
)]
pub reject_status_code: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sourceRange"
)]
pub source_range: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareIpAllowListIpStrategy {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub depth: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "excludedIPs"
)]
pub excluded_i_ps: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareIpWhiteList {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "ipStrategy"
)]
pub ip_strategy: Option<MiddlewareIpWhiteListIpStrategy>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sourceRange"
)]
pub source_range: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareIpWhiteListIpStrategy {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub depth: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "excludedIPs"
)]
pub excluded_i_ps: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewarePassTlsClientCert {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub info: Option<MiddlewarePassTlsClientCertInfo>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pem: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewarePassTlsClientCertInfo {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub issuer: Option<MiddlewarePassTlsClientCertInfoIssuer>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "notAfter")]
pub not_after: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "notBefore")]
pub not_before: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sans: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "serialNumber"
)]
pub serial_number: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub subject: Option<MiddlewarePassTlsClientCertInfoSubject>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewarePassTlsClientCertInfoIssuer {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "commonName"
)]
pub common_name: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub country: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "domainComponent"
)]
pub domain_component: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub locality: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub organization: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub province: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "serialNumber"
)]
pub serial_number: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewarePassTlsClientCertInfoSubject {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "commonName"
)]
pub common_name: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub country: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "domainComponent"
)]
pub domain_component: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub locality: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub organization: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "organizationalUnit"
)]
pub organizational_unit: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub province: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "serialNumber"
)]
pub serial_number: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareRateLimit {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub average: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub burst: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub period: Option<IntOrString>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "sourceCriterion"
)]
pub source_criterion: Option<MiddlewareRateLimitSourceCriterion>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareRateLimitSourceCriterion {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "ipStrategy"
)]
pub ip_strategy: Option<MiddlewareRateLimitSourceCriterionIpStrategy>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "requestHeaderName"
)]
pub request_header_name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "requestHost"
)]
pub request_host: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareRateLimitSourceCriterionIpStrategy {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub depth: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "excludedIPs"
)]
pub excluded_i_ps: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareRedirectRegex {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub permanent: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replacement: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareRedirectScheme {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub permanent: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub port: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareReplacePath {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareReplacePathRegex {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replacement: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareRetry {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub attempts: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "initialInterval"
)]
pub initial_interval: Option<IntOrString>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareStripPrefix {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "forceSlash"
)]
pub force_slash: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefixes: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct MiddlewareStripPrefixRegex {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<Vec<String>>,
}