use framework_core::MultiStringValue;
use std::sync::LazyLock;
static FIXED: LazyLock<AxumCors> = LazyLock::new(AxumCors::default);
#[derive(Debug, Clone, Default)]
pub struct AxumCors {
pub origin: Option<String>,
pub methods: Option<String>,
pub headers: Option<String>,
pub expose: Option<String>,
pub credentials: Option<String>,
pub max_age: Option<String>,
}
impl AxumCors {
pub fn fixed() -> &'static Self {
&FIXED
}
pub fn apply(&self, headers: &mut MultiStringValue) {
let items = [
("access-control-allow-origin", &self.origin),
("access-control-allow-methods", &self.methods),
("access-control-allow-headers", &self.headers),
("access-control-expose-headers", &self.expose),
("access-control-allow-credentials", &self.credentials),
("access-control-max-age", &self.max_age),
];
for (name, value) in items {
if let Some(value) = value {
headers.set(name, value);
}
}
}
}