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