rnx 0.7.0

The Rust web development scaffold, support salvo and axum
use axum::{extract::State, Json};
use std::sync::Arc;

use validator::Validate;

use infra::{
    core::AppState,
    status::{api_err::ApiErr, ApiResult},
};

use crate::service::{
    self,
    greeter::{ReqHello, RespHello},
};

pub async fn hello(
    State(ctx): State<Arc<AppState>>,
    Json(req): Json<ReqHello>,
) -> ApiResult<RespHello> {
    if let Err(e) = req.validate() {
        return Err(ApiErr::Params(e.to_string()));
    }
    service::greeter::hello(&ctx, req).await
}