feat(axum-xitca): add json route

This commit is contained in:
xfy
2024-09-24 15:51:56 +08:00
parent df601aa7d3
commit d7c4708223
2 changed files with 35 additions and 0 deletions

View File

@ -0,0 +1,20 @@
use std::borrow::Cow;
use axum::Json;
use serde::{Deserialize, Serialize};
use super::{RouteResponse, RouteResult};
#[derive(Serialize, Deserialize, Default)]
pub struct JsonData {
pub name: Cow<'static, str>,
}
pub async fn json() -> RouteResult<JsonData> {
let data = JsonData { name: "xfy".into() };
let res = RouteResponse {
data,
..Default::default()
};
Ok(Json(res))
}

View File

@ -19,6 +19,8 @@ use crate::{
middlewares::{add_version, logging_route},
};
mod json;
#[derive(Debug, Serialize)]
pub struct RouteResponse<T>
where
@ -29,11 +31,24 @@ where
message: Option<Cow<'static, str>>,
data: T,
}
impl<T> Default for RouteResponse<T>
where
T: Serialize + Default,
{
fn default() -> Self {
Self {
code: ErrorCode::Normal,
message: None,
data: T::default(),
}
}
}
pub type RouteResult<T> = AppResult<Json<RouteResponse<T>>>;
pub fn routes() -> Router {
let router = Router::new()
.route("/", get(hello).post(hello))
.route("/json", get(json::json).post(json::json))
.layer(
ServiceBuilder::new()
.layer(middleware::from_fn(add_version))