use crate::callables::{ArgPart, LayerSpec, TypeSchema};
use crate::routes::middleware::Middleware;
pub struct CorsMiddleware(tower_http::cors::CorsLayer);
impl CorsMiddleware {
pub fn new(layer: tower_http::cors::CorsLayer) -> Self {
Self(layer)
}
}
impl Middleware for CorsMiddleware {
type Layer = tower_http::cors::CorsLayer;
fn layer_spec(&self) -> Option<LayerSpec> {
Some(LayerSpec {
name: "origin".to_string(),
description: Some(
"Cross-Origin Resource Sharing (CORS). \
Validates the Origin request header and sets \
Access-Control-* response headers."
.to_string(),
),
parts: vec![ArgPart::Header(TypeSchema::wrap::<String>())],
})
}
fn into_layer(self) -> Self::Layer {
self.0
}
}