zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use crate::commons::validatorr::validation_flatten;
use crate::prelude2::*;

#[derive(Debug, validator::Validate, serde::Serialize, serde::Deserialize)]
pub struct ProjectId {
    #[validate(range(min = 1, max = 100, message = "project_id must be between 1 to 100"))]
    project_id: usize,
}

#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct ProjectId10 {
    project_id: usize,
}

#[derive(Debug, validator::Validate, serde::Serialize, serde::Deserialize)]
pub struct QueryStringParams {
    #[validate(length(min = 3))]
    projects: Vec<i32>,
    #[validate(length(min = 2))]
    name: String,
    #[validate(range(min = 18, max = 20, message = "Age must be between 18 to 20"))]
    age: usize,
}

// query string
pub async fn validate_simple1(
    project: web::Query<ProjectId>,
    request: HttpRequest,
) -> impl Responder {
    if let Some(err) = validation_flatten(&project.0) {
        return request.json(200, R::invalid(err));
    }

    request.json(200, R::ok(project.into_inner().project_id))
}

pub async fn validate_simple10(project: web::Query<ProjectId10>) -> impl Responder {
    HttpResponse::Ok().json(R::ok(project.into_inner().project_id))
}

// // path variable
// pub async fn validate_simple2(project: web::Path<ProjectId>,
//                               request: HttpRequest,) -> impl Responder {
//     if let Some(err) = validation_flatten(&project) {
//         return request.json(200, R::invalid(err));
//     }
//
//     HttpResponse::Ok().json(R::ok(project.into_inner().project_id))
// }

// bytes body
pub async fn validate_simple3(body: web::Bytes, request: HttpRequest) -> impl Responder {
    let val = match crate::commons::bytes_to_string(body.to_vec()) {
        Ok(val) => val,
        Err(e) => return request.json(200, R::failed(500, e.to_string())),
    };

    request.json(200, R::ok(val))
}

// json body
pub async fn validate_simple4(
    project: web::Json<ProjectId10>,
    request: HttpRequest,
) -> impl Responder {
    request.json(200, R::ok(project.0))
}

// form body
pub async fn validate_simple5(
    project: web::Form<ProjectId>,
    request: HttpRequest,
) -> impl Responder {
    request.json(200, R::ok(project.0))
}

// multipart body
pub async fn validate_simple6(
    _payload: actix_multipart::Multipart,
    request: HttpRequest,
) -> impl Responder {
    request.json(200, R::ok(true))
}