Skip to content

Latest commit

 

History

History
65 lines (49 loc) · 1.57 KB

04-generate-random-number.md

File metadata and controls

65 lines (49 loc) · 1.57 KB

Generate Random Number

Dependencies

[dependencies]
axum = "0.5"
rand = "0.8"
serde = { version = "1", features = ["derive"] }
tokio = { version = "1", features = ["full"] }

rand is a random number generation library.

serde is a framework for serializing and deserializing Rust data structures efficiently and generically. This library will be used to parse request query to a struct.

Code

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(([127, 0, 0, 1], 3000));
    println!("listening on {}", addr);
    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();
}

// `Deserialize` need be implemented to use with `Query` extractor.
#[derive(Deserialize)]
struct RangeParameters {
    start: usize,
    end: usize,
}

async fn handler(Query(range): Query<RangeParameters>) -> Html<String> {
    // Generate a random number in range parsed from query.
    let random_number = thread_rng().gen_range(range.start..range.end);

    // Send response in html format.
    Html(format!("<h1>Random Number: {}</h1>", random_number))
}

Run

Run the program then enter http://localhost:3000/?start=50&end=100 on your browser.

Include html from file in compile time.