use athene::prelude::*;
#[derive(Debug, Serialize, Deserialize, Validate, Default)]
pub struct UserController {
#[validate(email)]
pub email: String, #[validate(range(min = 18, max = 20))]
pub age: u16,
}
#[controller(prefix = "api", version = 1, name = "user")]
impl UserController {
#[get("/query")] pub async fn query(&self, user: Query<Self>) -> impl Responder {
(200, Json(user.0))
}
#[post("/create")] async fn create(&self, user: Json<Self>) -> impl Responder {
Ok::<_, Error>((200, user))
}
#[put("/update")]
#[validator(exclude("user"))] async fn update(&self, user: Form<Self>) -> impl Responder {
Ok::<_, Error>((200, user))
}
#[post("/custom_validate")]
async fn custom_validate(&self,mut req: Request) -> impl Responder {
let user = req.parse::<Self>().await?;
user.validate()?;
Ok::<_, Error>((200,Json(user)))
}
}
#[tokio::main]
pub async fn main() -> Result<()> {
tracing_subscriber::fmt().compact().init();
let app = athene::new().router(|r| {
r.controller(UserController::default())
});
app.listen("127.0.0.1:7878").await
}