oxidite 2.3.2

A modern, high-performance framework for Rust.
Documentation
use crate::config::Config;
use oxidite_middleware::CorsLayer;
use tower_http::cors::Any;

pub fn cors_layer_from_config(config: &Config) -> CorsLayer {
    let mut layer = CorsLayer::new();

    if !config.security.cors_origins.is_empty() {
        if config.security.cors_origins.contains(&"*".to_string()) {
            layer = layer.allow_origin(Any);
        } else {
            let origins: Vec<_> = config.security.cors_origins.iter()
                .filter_map(|s| s.parse().ok())
                .collect();
            layer = layer.allow_origin(origins);
        }
    }

    if !config.security.cors_methods.is_empty() {
        let methods: Vec<_> = config.security.cors_methods.iter()
            .filter_map(|s| s.parse().ok())
            .collect();
        layer = layer.allow_methods(methods);
    }

    if !config.security.cors_headers.is_empty() {
        let headers: Vec<_> = config.security.cors_headers.iter()
            .filter_map(|s| s.parse().ok())
            .collect();
        layer = layer.allow_headers(headers);
    }

    layer
}