Skip to content
Clone
b7cd2b1
32 lines 896 B Rust
use std::future::Future;
use std::pin::Pin;
use actix_web::dev::Payload;
use actix_web::{FromRequest, HttpRequest};
use serde::Deserialize;
use utoipa::IntoParams;
use uuid::Uuid;
use crate::errors::ApiError;
#[derive(Debug, Clone, Deserialize, IntoParams)]
pub struct PolicyPath {
pub space_name: String,
pub repo_name: String,
pub policy_id: Uuid,
}
impl FromRequest for PolicyPath {
type Error = ApiError;
type Future = Pin<Box<dyn Future<Output = Result<Self, Self::Error>>>>;
fn from_request(request: &HttpRequest, _payload: &mut Payload) -> Self::Future {
let request = request.clone();
Box::pin(async move {
actix_web::web::Path::<PolicyPath>::from_request(&request, &mut Payload::None)
.await
.map(|value| value.into_inner())
.map_err(|_| ApiError::bad_request())
})
}
}