use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
#[derive(Deserialize, Serialize, Debug, Clone)]
pub enum HttpCorsAllowHeaders {
Any,
Headers(Vec<String>),
}
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
#[derive(Deserialize, Serialize, Debug, Clone)]
pub enum HttpCorsExposeHeaders {
Any,
Headers(Vec<String>),
}
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
#[derive(Deserialize, Serialize, Debug, Clone)]
pub enum HttpCorsAllowMethods {
Any,
Methods(Vec<String>),
}
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
#[derive(Deserialize, Serialize, Debug, Clone)]
pub enum HttpCorsAllowOrigin {
Any,
Origins(Vec<String>),
}
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
#[derive(Deserialize, Serialize, Debug, Clone, Default)]
pub struct HttpCors {
pub allow_credentials: Option<bool>,
pub allow_headers: Option<HttpCorsAllowHeaders>,
pub max_age: Option<u32>,
pub allow_methods: Option<HttpCorsAllowMethods>,
pub allow_origin: Option<HttpCorsAllowOrigin>,
pub expose_headers: Option<HttpCorsExposeHeaders>,
pub allow_private_network: Option<bool>,
}
impl HttpCors {
#[must_use]
pub fn overwrite(&self, base: &Self) -> Self {
Self {
allow_credentials: if self.allow_credentials.is_none() {
base.allow_credentials
} else {
self.allow_credentials
},
allow_headers: if self.allow_headers.is_none() {
base.allow_headers.clone()
} else {
self.allow_headers.clone()
},
max_age: if self.max_age.is_none() {
base.max_age
} else {
self.max_age
},
allow_methods: if self.allow_methods.is_none() {
base.allow_methods.clone()
} else {
self.allow_methods.clone()
},
allow_origin: if self.allow_origin.is_none() {
base.allow_origin.clone()
} else {
self.allow_origin.clone()
},
expose_headers: if self.expose_headers.is_none() {
base.expose_headers.clone()
} else {
self.expose_headers.clone()
},
allow_private_network: if self.allow_private_network.is_none() {
base.allow_private_network
} else {
self.allow_private_network
},
}
}
}