#![cfg(feature = "web")]
use actix_web::{HttpMessage, HttpRequest};
use crate::middleware::RequestId;
use crate::response::ApiResponse;
pub fn request_id(req: &HttpRequest) -> String {
req.extensions()
.get::<RequestId>()
.map(|r| r.0.clone())
.unwrap_or_else(|| uuid::Uuid::new_v4().to_string())
}
pub trait ApiResponseActixExt {
fn ok_from_req<T: serde::Serialize>(req: &HttpRequest, data: T) -> ApiResponse<T>;
fn empty_ok_from_req(req: &HttpRequest) -> ApiResponse<()>;
}
impl ApiResponseActixExt for ApiResponse<()> {
fn ok_from_req<T: serde::Serialize>(req: &HttpRequest, data: T) -> ApiResponse<T> {
ApiResponse::ok(data, request_id(req))
}
fn empty_ok_from_req(req: &HttpRequest) -> ApiResponse<()> {
ApiResponse::empty_ok(request_id(req))
}
}