Rust github: https://github.com/tokio-rs/axum
use axum:: {
routing::{get, post},
http::StatusCode,
response::IntoResponse,
Json, Router,
};
use serde::{Deserialize, Serialize};
use std::net::SocketAddr;
#[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::server(listener, app).await.unwrap();
}
async fn root() -> &'static str {
"Hello, World"
}
async fn create_user(
Json(payload): Json<CreateUser>,
) -> (StatusCode, Json<User>){
let user = User {
id: 1337,
username: payload.username,
};
(StatusCode::CREATED, Json(user))
}
#[derive(Deserialize)]
struct CreateUser {
username: String,
}
#[derive(Serialize)]
struct User {
id: u64,
username: String,
}
axum project
https://github.com/tokio-rs/axum/blob/main/ECOSYSTEM.md
Cargo.toml
[dependencies]
axum="0.5"
tokio = { version="1", features-["full"] }
main.rs
use axum::{routing::get, Router};
#[tokio::main]
async fn main(){
let app = Router::new().route("/", get(|| async {"hello world!"}));
axum::Server::bind(&&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}
workspace Cargo.toml
[workspace] members = [ "hello-world" ]
$ cargo new hello-world
[dependencies]
axum = "0.5"
tokio = { version = "1", features = ["full"] }
use axum::{routing::get, Router};
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(handler));
let addr = SocketAddr::from(([192,168,56,10], 3000));
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn handler() -> &'static str {
"hello world!"
}
/workspace/generate-random-number
[dependencies]
axum = "0.5"
rand = "0.8"
serde = { version = "1", features = ["derive"]}
tokio = { version = "1", features = ["full"]}
use axum::{extract::Query, response::Html, routing::get, Router};
use rand::{thread_rng, Rng};
use serde::Deserialize;
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(handler));
let addr = SocketAddr::from(([192,168,56,10], 3000));
println!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
#[derive(Deserialize)]
struct RangeParameters {
start: usize,
end: usize,
}
async fn handler(Query(range): Query<RangeParameters>)-> Html<String> {
let random_number = thread_rng().gen_range(range.start..range.end);
Html(format!("<h1>Random Number: {}</h1>", random_number))
}
http://192.168.56.10:3000/?start=50&end=100
use axum::{response::Html, routing::get, Router};
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(handler));
let addr = SocketAddr::from(([192,168,56,10], 3000));
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn handler() -> HTML<&'static str> {
Html(include_str!("../index.html"))
}