From 7c0cbeb65e15720073a5706ca2116f76ce57f9da Mon Sep 17 00:00:00 2001 From: gvcgael Date: Fri, 25 Nov 2022 13:32:24 +0100 Subject: [PATCH] add html integrated in rust file --- Cargo.lock | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + index.html | 5 +- src/main.rs | 31 ++++++++++-- 4 files changed, 165 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7036ca8..3ff73de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,6 +72,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + [[package]] name = "bytes" version = "1.3.0" @@ -84,6 +93,35 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "fnv" version = "1.0.7" @@ -132,6 +170,16 @@ dependencies = [ "pin-utils", ] +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.8" @@ -471,12 +519,55 @@ version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +[[package]] +name = "rust-embed" +version = "6.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "283ffe2f866869428c92e0d61c2f35dfb4355293cdfdc48f49e895c15f1333d1" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "6.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ab23d42d71fb9be1b643fe6765d292c5e14d46912d13f3ae2815ca048ea04d" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "7.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1669d81dfabd1b5f8e2856b8bbe146c6192b0ba22162edc738ac0a5de18f054" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "ryu" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scopeguard" version = "1.1.0" @@ -533,11 +624,23 @@ dependencies = [ "axum", "once_cell", "rand", + "rust-embed", "serde", "tokio", "tracing-subscriber", ] +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.4" @@ -733,6 +836,12 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + [[package]] name = "unicode-ident" version = "1.0.5" @@ -745,6 +854,23 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -777,6 +903,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 91fc4f6..e90e6ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,4 @@ tracing-subscriber = { version = "0.3.16", features = ["env-filter"] } serde = { version = "1.0", features = ["derive"] } once_cell = "1.8.0" rand = "0.8.4" +rust-embed = "6.4.2" \ No newline at end of file diff --git a/index.html b/index.html index 6b40abc..9ac4d73 100644 --- a/index.html +++ b/index.html @@ -10,10 +10,7 @@
diff --git a/src/main.rs b/src/main.rs index 37e6fde..ac7ab25 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,17 +1,30 @@ -use axum::{routing::post, Json, Router}; +use axum::{ + routing::{get, post}, + Json, + response::{Html, IntoResponse}, + Router, + http::{header, HeaderValue, Request, Response, StatusCode}, + body::{Body, BoxBody} +}; use once_cell::sync::Lazy; use rand::{thread_rng, Rng}; use serde::Deserialize; use std::net::SocketAddr; use tokio::sync::Mutex; +use rust_embed::RustEmbed; + +#[derive(RustEmbed)] +#[folder = "./"] +struct Asset; #[tokio::main] async fn main() { tracing_subscriber::fmt::init(); // build our application with some routes - let app = Router::new().route("/secret-santa-api", post(input)); - + let app = Router::new() + .route("/secret-santa-api", post(input)) + .route("/", get(root)); // run it with hyper let addr = SocketAddr::from(([127, 0, 0, 1], 3067)); axum::Server::bind(&addr) @@ -66,3 +79,15 @@ async fn input(Json(input): Json) -> String { } } } + +pub async fn root() -> Response { + let data_index_html = Asset::get("index.html").unwrap(); + + let index_html = String::from_utf8_lossy(&data_index_html.data); + let mut persons_dropdown = String::new(); + for person in everyone() { + let dropdown = format!("\n", person, person); + persons_dropdown.push_str(&dropdown); + } + return Html(index_html.replace("___REPLACE_BY_PERSONS___", &persons_dropdown)).into_response(); +}