zero4rs 2.0.0

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

use serde::Deserialize;
use std::collections::HashMap;

use crate::commons;

#[derive(Deserialize)]
pub struct QueryParams {
    counts: String,
}

pub async fn gretting(req: HttpRequest) -> impl Responder {
    let name = req.match_info().get("name").unwrap_or("World");
    format!("Hello {}!", &name)
}

pub async fn format_durations(query: web::Query<QueryParams>) -> Result<HttpResponse> {
    let counts = &query.counts;

    let counts_u64 = commons::string_to_number::<u64>(counts)?;

    Ok(HttpResponse::Ok().body(commons::format_duration_nanos(counts_u64)))
}

pub async fn base64_string(query: web::Query<HashMap<String, String>>) -> Result<HttpResponse> {
    let val = query
        .get("val")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: val"))?;

    Ok(HttpResponse::Ok().body(commons::base64encode(&val.to_string())))
}

pub async fn compute_password_hash(
    query: web::Query<HashMap<String, String>>,
) -> Result<HttpResponse> {
    let passwd = query.get("passwd").cloned().unwrap_or_default();

    let l = commons::compute_password_hash(&passwd)
        .map_err(|e| Error::throw("Cound not hash password", Some(e)))?;

    Ok(HttpResponse::Ok().body(l))
}

pub async fn verify_password_hash(
    query: web::Query<HashMap<String, String>>,
    expected_password_hash: web::Bytes,
) -> Result<HttpResponse> {
    let passwd = query
        .get("passwd")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: passwd"))?;

    let expected_password_hash = commons::bytes_to_string(expected_password_hash.to_vec())?;

    let l = commons::verify_password(passwd.to_string(), expected_password_hash)
        .map_err(|e| Error::throw("Cound not verify password", Some(e)))?;

    Ok(HttpResponse::Ok().body(format!("{}", l)))
}