🤖
0005 axum
use axum::{
routing::{get, post, Router},
extract::{Json}
};
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
let app = Router::new()
.route("/", get(root))
.route("/users", post(create_user));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
async fn root() -> &'static str {
"Hello, World!"
}
async fn create_user(Json(payment):Json<CreateUser>) -> Json<User> {
tracing::info!("create_user: {:?}", payment);
let user = User {
id: 1,
username: payment.username,
email: payment.email,
};
Json(user)
}
#[derive(serde::Deserialize, Debug)]
struct CreateUser {
username: String,
email: String,
}
#[derive(serde::Serialize, serde::Deserialize,Debug)]
struct User {
id: u32,
username: String,
email: String,
}
jsonにするときにstructがSerializeできるようにderiveをつけておく
[package]
name = "axum"
version = "0.1.0"
edition = "2024"
[dependencies]
tokio = { version = "1", features = ["full"] }
axum = "0.8"
serde = { version = "1", features = ["derive"] }
tracing-subscriber = { version = "0.3"}
tracing = "0.1"
anyhow = "1.0"
Discussion