From 0331c06875686b7b10649ff4b5b49b89ee5a32ed Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Thu, 17 Aug 2023 03:21:43 -0400 Subject: [PATCH] Minimal structure for the web server. --- Cargo.lock | 174 ++++++++++++++++++++++++++++++++++++++++++---- Cargo.toml | 6 +- src/main.rs | 25 ++++++- static/index.html | 5 ++ 4 files changed, 194 insertions(+), 16 deletions(-) create mode 100644 static/index.html diff --git a/Cargo.lock b/Cargo.lock index cd63411..34dd413 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -30,18 +30,17 @@ dependencies = [ [[package]] name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +version = "0.6.16" +source = "git+https://github.com/tokio-rs/axum.git?rev=52a90390195e884bcc12ff5bd9fd805cac806447#52a90390195e884bcc12ff5bd9fd805cac806447" dependencies = [ "async-trait", "axum-core", - "bitflags", "bytes", "futures-util", "http", - "http-body", - "hyper", + "http-body 0.4.5", + "hyper 0.14.27", + "hyper 1.0.0-rc.4", "itoa", "matchit", "memchr", @@ -56,6 +55,7 @@ dependencies = [ "sync_wrapper", "tokio", "tower", + "tower-hyper-http-body-compat", "tower-layer", "tower-service", ] @@ -63,16 +63,17 @@ dependencies = [ [[package]] name = "axum-core" version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +source = "git+https://github.com/tokio-rs/axum.git?rev=52a90390195e884bcc12ff5bd9fd805cac806447#52a90390195e884bcc12ff5bd9fd805cac806447" dependencies = [ "async-trait", "bytes", "futures-util", "http", - "http-body", + "http-body 0.4.5", "mime", + "pin-project-lite", "rustversion", + "sync_wrapper", "tower-layer", "tower-service", ] @@ -94,9 +95,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "bytes" @@ -149,6 +150,12 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + [[package]] name = "futures-task" version = "0.3.28" @@ -201,6 +208,22 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-body" +version = "1.0.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "951dfc2e32ac02d67c90c0d65bd27009a635dc9b381a2cc7d284ab01e3a0150d" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + [[package]] name = "httparse" version = "1.8.0" @@ -224,7 +247,7 @@ dependencies = [ "futures-core", "futures-util", "http", - "http-body", + "http-body 0.4.5", "httparse", "httpdate", "itoa", @@ -236,6 +259,26 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.0.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d280a71f348bcc670fc55b02b63c53a04ac0bf2daff2980795aeaf53edae10e6" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body 1.0.0-rc.2", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "tokio", + "tracing", + "want", +] + [[package]] name = "itoa" version = "1.0.9" @@ -272,6 +315,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -339,7 +392,9 @@ version = "0.1.0" dependencies = [ "axum", "nom", + "serde", "tokio", + "tower-http", ] [[package]] @@ -421,6 +476,20 @@ name = "serde" version = "1.0.183" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.183" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "serde_json" @@ -499,14 +568,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" dependencies = [ "backtrace", + "bytes", "libc", "mio", "num_cpus", "pin-project-lite", "socket2 0.5.3", + "tokio-macros", "windows-sys", ] +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-util" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "tower" version = "0.4.13" @@ -523,6 +618,46 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body 0.4.5", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-hyper-http-body-compat" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ea3e622710ee44a8255baa6fcb2a34d67450e2ffb48e5e58d5a7bd6ff55a21" +dependencies = [ + "http", + "http-body 0.4.5", + "http-body 1.0.0-rc.2", + "hyper 1.0.0-rc.4", + "pin-project-lite", + "tower", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.2" @@ -562,12 +697,27 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-ident" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "want" version = "0.3.1" diff --git a/Cargo.toml b/Cargo.toml index a72f91f..4fc8503 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] -axum = "0.6.20" +axum = { git = "https://github.com/tokio-rs/axum.git", rev = "52a90390195e884bcc12ff5bd9fd805cac806447" } nom = "7.1.1" -tokio = { version = "1.30.0", default-features = false, features = ["rt", "rt-multi-thread"] } +serde = { version = "1.0.183", features = ["derive"] } +tokio = { version = "1.30.0", default-features = false, features = ["macros", "rt", "rt-multi-thread"] } +tower-http = { version = "0.4.3", features = ["fs"] } diff --git a/src/main.rs b/src/main.rs index e7a11a9..b3cafd2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,24 @@ -fn main() { - println!("Hello, world!"); +use axum::{http::StatusCode, routing::post, Json, Router}; +use serde::Serialize; +use tower_http::services::{ServeDir, ServeFile}; + +#[tokio::main] +async fn main() { + let serve_dir = ServeDir::new("static").not_found_service(ServeFile::new("static/index.html")); + let app = Router::new() + .route("/parse", post(parse_org_mode)) + .fallback_service(serve_dir); + + let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + axum::serve(listener, app).await.unwrap(); +} + +async fn parse_org_mode(body: String) -> (StatusCode, Json) { + let ret = OwnerTree { input_source: body }; + (StatusCode::OK, Json(ret)) +} + +#[derive(Serialize)] +struct OwnerTree { + input_source: String, } diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..13606a2 --- /dev/null +++ b/static/index.html @@ -0,0 +1,5 @@ + + + Test html file. + +