From c1267d16e6fca6784f6208584834315b7b3dc9df Mon Sep 17 00:00:00 2001 From: clizia <xanthippe@cock.lu> Date: Thu, 27 Feb 2025 12:35:47 +0100 Subject: [PATCH 1/7] new branch for http --- Cargo.lock | 893 ++++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 8 +- 2 files changed, 887 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6cc1eff..a44d91b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,15 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "anstream" version = "0.6.18" @@ -80,15 +89,66 @@ checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.95", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backtrace" version = "0.3.74" @@ -104,6 +164,18 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.6.0" @@ -174,7 +246,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.95", ] [[package]] @@ -189,6 +261,42 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +[[package]] +name = "console-api" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e" +dependencies = [ + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4cf42660ac07fcebed809cfe561dd8730bcd35b075215e6479c516bcd0d11cb" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures", + "hdrhistogram", + "humantime", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "cpufeatures" version = "0.2.16" @@ -198,13 +306,37 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crossterm" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags", + "bitflags 2.6.0", "crossterm_winapi", "mio", "parking_lot", @@ -249,13 +381,19 @@ version = "0.1.0" dependencies = [ "anyhow", "clap", + "console-subscriber", "crossterm", + "http-body-util", + "hyper 1.6.0", + "hyper-util", "petname", "rand 0.9.0-beta.1", "serde", "serde_json", "sha256", "tokio", + "tracing", + "tracing-subscriber", ] [[package]] @@ -264,6 +402,12 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "errno" version = "0.3.10" @@ -274,6 +418,83 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -316,6 +537,69 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.7.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.2.0", + "indexmap 2.7.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64", + "byteorder", + "flate2", + "nom", + "num-traits", +] + [[package]] name = "heck" version = "0.5.0" @@ -328,12 +612,191 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.2.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.8", + "http 1.2.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.32", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "hyper 1.6.0", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -359,6 +822,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" version = "0.2.169" @@ -387,12 +856,39 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.2" @@ -414,6 +910,35 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "object" version = "0.36.7" @@ -429,6 +954,12 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "parking_lot" version = "0.12.3" @@ -452,6 +983,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + [[package]] name = "petname" version = "2.0.2" @@ -460,18 +997,44 @@ checksum = "9cd31dcfdbbd7431a807ef4df6edd6473228e94d5c805e8cf671227a21bad068" dependencies = [ "anyhow", "clap", - "itertools", + "itertools 0.14.0", "proc-macro2", "quote", "rand 0.8.5", ] +[[package]] +name = "pin-project" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + [[package]] name = "pin-project-lite" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "ppv-lite86" version = "0.2.20" @@ -490,6 +1053,38 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + [[package]] name = "quote" version = "1.0.38" @@ -566,9 +1161,53 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -581,13 +1220,19 @@ version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ - "bitflags", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.59.0", ] +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "ryu" version = "1.0.18" @@ -617,7 +1262,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.95", ] [[package]] @@ -656,6 +1301,15 @@ dependencies = [ "tokio", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "signal-hook" version = "0.3.17" @@ -686,6 +1340,15 @@ dependencies = [ "libc", ] +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -708,6 +1371,17 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.95" @@ -719,6 +1393,22 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "tokio" version = "1.42.0" @@ -734,9 +1424,20 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.4.0" @@ -745,9 +1446,160 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.95", ] +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tonic" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +dependencies = [ + "async-trait", + "axum", + "base64", + "bytes", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "typenum" version = "1.17.0" @@ -766,12 +1618,27 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -808,7 +1675,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 2.0.95", "wasm-bindgen-shared", ] @@ -830,7 +1697,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.95", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -951,7 +1818,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] [[package]] @@ -981,7 +1848,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.95", ] [[package]] @@ -992,5 +1859,5 @@ checksum = "d3931cb58c62c13adec22e38686b559c86a30565e16ad6e8510a337cedc611e1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.95", ] diff --git a/Cargo.toml b/Cargo.toml index 1d3785b..7c7edbf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,12 +16,18 @@ name = "client" path = "src/bin/client.rs" [dependencies] +hyper = { version = "1", features = ["full"] } +http-body-util = "0.1" +hyper-util = { version = "0.1", features = ["full"] } rand = "0.9.0-beta.1" clap = "4.5.23" -tokio = { version = "1.42.0", features = ["full"] } +tokio = { version = "1.42.0", features = ["full","tracing"] } +console-subscriber = "0.1.5" anyhow = "1.0.95" serde_json = "1.0.135" serde = { version = "1.0.217", features = ["derive"] } sha256 = "1.5.0" petname = "2.0.2" crossterm = "0.28.1" +tracing = "0.1.41" +tracing-subscriber = "0.3.19" From 94d7ec5e25d01fd41fc73ae4ad1cbede336f406c Mon Sep 17 00:00:00 2001 From: clizia <xanthippe@cock.lu> Date: Thu, 27 Feb 2025 22:06:45 +0100 Subject: [PATCH 2/7] ipertesto test funziona --- Cargo.lock | 777 +++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 1 + src/bin/client.rs | 49 +-- src/server.rs | 53 ++-- 4 files changed, 800 insertions(+), 80 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a44d91b..cb28267 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -126,8 +126,8 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper", - "tower", + "sync_wrapper 0.1.2", + "tower 0.4.13", "tower-layer", "tower-service", ] @@ -170,6 +170,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -209,6 +215,15 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +[[package]] +name = "cc" +version = "1.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" +dependencies = [ + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -297,6 +312,22 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "cpufeatures" version = "0.2.16" @@ -375,6 +406,17 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + [[package]] name = "durak-frthistime" version = "0.1.0" @@ -388,6 +430,7 @@ dependencies = [ "hyper-util", "petname", "rand 0.9.0-beta.1", + "reqwest", "serde", "serde_json", "sha256", @@ -402,6 +445,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -418,6 +470,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + [[package]] name = "flate2" version = "1.0.35" @@ -434,6 +492,30 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + [[package]] name = "futures" version = "0.3.31" @@ -593,7 +675,7 @@ version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ - "base64", + "base64 0.21.7", "byteorder", "flate2", "nom", @@ -731,6 +813,23 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http 1.2.0", + "hyper 1.6.0", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + [[package]] name = "hyper-timeout" version = "0.4.1" @@ -743,6 +842,22 @@ dependencies = [ "tokio-io-timeout", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" version = "0.1.10" @@ -762,6 +877,145 @@ dependencies = [ "tracing", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -782,6 +1036,12 @@ dependencies = [ "hashbrown 0.15.2", ] +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -840,6 +1100,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" + [[package]] name = "lock_api" version = "0.4.12" @@ -910,6 +1176,23 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "nom" version = "7.1.3" @@ -954,6 +1237,50 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "openssl" +version = "0.10.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "overload" version = "0.1.1" @@ -1035,6 +1362,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + [[package]] name = "ppv-lite86" version = "0.2.20" @@ -1208,6 +1541,64 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.8", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower 0.5.2", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -1227,6 +1618,45 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rustls" +version = "0.23.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.19" @@ -1239,12 +1669,44 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.217" @@ -1277,6 +1739,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha2" version = "0.10.8" @@ -1310,6 +1784,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -1365,12 +1845,24 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -1399,6 +1891,61 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +dependencies = [ + "cfg-if", + "fastrand", + "getrandom 0.2.15", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + [[package]] name = "thread_local" version = "1.1.8" @@ -1409,6 +1956,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tokio" version = "1.42.0" @@ -1449,6 +2006,26 @@ dependencies = [ "syn 2.0.95", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.17" @@ -1481,7 +2058,7 @@ checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" dependencies = [ "async-trait", "axum", - "base64", + "base64 0.21.7", "bytes", "futures-core", "futures-util", @@ -1495,7 +2072,7 @@ dependencies = [ "prost", "tokio", "tokio-stream", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", "tracing", @@ -1521,6 +2098,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -1612,6 +2204,35 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -1624,6 +2245,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -1679,6 +2306,19 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.99" @@ -1708,6 +2348,16 @@ version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +[[package]] +name = "web-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1730,6 +2380,36 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -1821,6 +2501,42 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -1861,3 +2577,52 @@ dependencies = [ "quote", "syn 2.0.95", ] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] diff --git a/Cargo.toml b/Cargo.toml index 7c7edbf..117a69a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ name = "client" path = "src/bin/client.rs" [dependencies] +reqwest = "0.12.0" hyper = { version = "1", features = ["full"] } http-body-util = "0.1" hyper-util = { version = "0.1", features = ["full"] } diff --git a/src/bin/client.rs b/src/bin/client.rs index 3537871..758175c 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -9,12 +9,17 @@ use crossterm::{ }, event::Event, }; +use http_body_util::Empty; +use hyper::{client::conn::{self, http1::{self, handshake}}, Request}; +use hyper::body::Bytes; +use hyper_util::rt::TokioIo; +use tokio::net::TcpStream; #[allow(unreachable_code)] #[tokio::main] pub async fn main() -> anyhow::Result<()> { - let mut client = Client::connect("127.0.0.1", 8080).await?; - let local_address = client.stream.local_addr()?; + // let mut client = Client::connect("127.0.0.1", 8080).await?; + // let local_address = client.stream.local_addr()?; // enable_raw_mode()?; // execute!( @@ -22,44 +27,8 @@ pub async fn main() -> anyhow::Result<()> { // Clear(ClearType::All), // )?; - // tokio::task::spawn(async move { - client.send_message(Message::new(&local_address.to_string(), MessageKind::Test, "test json").unwrap()).await.expect("failed to write to socket"); + let body = reqwest::get("http://127.0.0.1:8080").await?.text().await?; + println!("body = {body:?}"); - // let (mut rd, mut wr) = client.stream.split(); - - // let mut message_reader = MessageReader::new(); - - // 'handler: loop { - // let mut buffer = vec![]; - // if tokio::io::copy(&mut rd, &mut buffer).await.is_err() { - // println!("failed to copy"); - // } - - - // let message = message_reader.read(&buffer).expect("failed to read from socket"); - // println!("{:?}", message); - - // break 'handler; - // } - // }); - // client.send_message(Message::new(&local_address.to_string(), MessageKind::Test, "test json").unwrap()).await?; - - // let (mut rd, mut wr) = client.stream.split(); - - // let mut message_reader = MessageReader::new(); - - // 'handler: loop { - // let mut buffer = vec![]; - // if tokio::io::copy(&mut rd, &mut buffer).await.is_err() { - // println!("failed to copy"); - // } - - // let message = message_reader.read(&buffer)?; - // println!("{:?}", message); - - // break 'handler; - // } - - // disable_raw_mode()?; Ok(()) } diff --git a/src/server.rs b/src/server.rs index b80a8ab..1075248 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,6 +1,13 @@ use tokio::{io::{AsyncReadExt, AsyncWriteExt, BufReader}, net::{tcp::WriteHalf, TcpListener}}; use std::net::SocketAddr; use crate::{message::{Message, MessageKind}, message_read::MessageReader, server}; +use std::convert::Infallible; +use http_body_util::Full; +use hyper::body::Bytes; +use hyper::server::conn::http1; +use hyper::service::service_fn; +use hyper::{Request, Response}; +use hyper_util::rt::TokioIo; pub struct Server { pub host: String, @@ -15,6 +22,10 @@ impl Server { } } + pub async fn handle_request(_: Request<hyper::body::Incoming>) -> Result<Response<Full<Bytes>>, Infallible> { + Ok(Response::new(Full::new(Bytes::from("Hello, toto")))) + } + #[allow(unreachable_code)] pub async fn run(&mut self) -> anyhow::Result<()> { let listener = TcpListener::bind(format!( @@ -26,44 +37,18 @@ impl Server { println!("Server is running on {}:{}", self.host, self.port); loop { - let (mut socket, addr) = listener.accept().await?; + let (mut stream, addr) = listener.accept().await?; println!("Connection received from {}", addr); + let io = TokioIo::new(stream); + tokio::task::spawn(async move { - let mut message_reader = MessageReader::new(); - - - let (mut rd, mut wr) = socket.split(); - let mut bufread = BufReader::new(&mut rd); - - 'handler: loop { - let mut buffer = vec![]; - let _bytes_read = match bufread.read_to_end(&mut buffer).await { - Ok(0) => { - println!("connection closed by client"); - break 'handler; - }, - Ok(_n) => { - let message = message_reader.read(&buffer).expect("failed to parse message"); - println!("{:?}", message); }, - Err(e) => { - eprintln!("error reading from stream: {}", e); - break 'handler; - }, - }; - // if tokio::io::copy(&mut rd, &mut buffer).await.is_err() { - // eprintln!("failed to copy"); - // } - - // let message = message_reader.read(&buffer)?; - // println!("{:?}", message); - - // let local_address = &rd.local_addr()?; - // let message_client = Message::new(&local_address.to_string(), MessageKind::Test, "toto test")?; - // wr.write_all(&message_client.encode()?.as_bytes()).await?; + if let Err(e) = http1::Builder::new() + .serve_connection(io, service_fn(Self::handle_request)) + .await + { + eprintln!("error serving connection: {:?}", e); } - - Ok::<(), anyhow::Error>(()) }); } From d161d56acaf6af8df4b3e702c77c38bfa1235d8f Mon Sep 17 00:00:00 2001 From: clizia <xanthippe@cock.lu> Date: Mon, 3 Mar 2025 15:31:22 +0100 Subject: [PATCH 3/7] cose successero --- Cargo.lock | 80 +++++++++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 2 ++ src/bin/client.rs | 15 +++++++-- src/db.rs | 23 ++++++++++++++ src/lib.rs | 2 ++ src/main.rs | 69 ---------------------------------------- src/message.rs | 11 +++++-- src/player.rs | 37 +++++++++++----------- src/router.rs | 46 +++++++++++++++++++++++++++ src/server.rs | 38 ++++++---------------- 10 files changed, 199 insertions(+), 124 deletions(-) create mode 100644 src/db.rs delete mode 100644 src/main.rs create mode 100644 src/router.rs diff --git a/Cargo.lock b/Cargo.lock index cb28267..e454473 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,7 +111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", - "axum-core", + "axum-core 0.3.4", "bitflags 1.3.2", "bytes", "futures-util", @@ -119,7 +119,7 @@ dependencies = [ "http-body 0.4.6", "hyper 0.14.32", "itoa", - "matchit", + "matchit 0.7.3", "memchr", "mime", "percent-encoding", @@ -132,6 +132,40 @@ dependencies = [ "tower-service", ] +[[package]] +name = "axum" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8" +dependencies = [ + "axum-core 0.5.0", + "bytes", + "form_urlencoded", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "itoa", + "matchit 0.8.4", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "axum-core" version = "0.3.4" @@ -149,6 +183,26 @@ dependencies = [ "tower-service", ] +[[package]] +name = "axum-core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" +dependencies = [ + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "backtrace" version = "0.3.74" @@ -422,6 +476,7 @@ name = "durak-frthistime" version = "0.1.0" dependencies = [ "anyhow", + "axum 0.8.1", "clap", "console-subscriber", "crossterm", @@ -435,6 +490,7 @@ dependencies = [ "serde_json", "sha256", "tokio", + "tower 0.5.2", "tracing", "tracing-subscriber", ] @@ -1137,6 +1193,12 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + [[package]] name = "memchr" version = "2.7.4" @@ -1739,6 +1801,16 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +dependencies = [ + "itoa", + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2057,7 +2129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" dependencies = [ "async-trait", - "axum", + "axum 0.6.20", "base64 0.21.7", "bytes", "futures-core", @@ -2111,6 +2183,7 @@ dependencies = [ "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -2131,6 +2204,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", diff --git a/Cargo.toml b/Cargo.toml index 117a69a..e3674ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,8 @@ name = "client" path = "src/bin/client.rs" [dependencies] +axum = "0.8.1" +tower = "0.5.2" reqwest = "0.12.0" hyper = { version = "1", features = ["full"] } http-body-util = "0.1" diff --git a/src/bin/client.rs b/src/bin/client.rs index 758175c..54c96c3 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -1,4 +1,4 @@ -use lib::{client::Client, message::{Message, MessageKind}, message_read::MessageReader}; +use lib::{client::Client, message::{Message, MessageKind}, message_read::MessageReader, player::Player}; use crossterm::{ execute, terminal::{ @@ -27,8 +27,17 @@ pub async fn main() -> anyhow::Result<()> { // Clear(ClearType::All), // )?; - let body = reqwest::get("http://127.0.0.1:8080").await?.text().await?; - println!("body = {body:?}"); + let addr = "http://127.0.0.1:8080"; + + let client = reqwest::Client::new(); + + let response = client + .post([&addr, "/create/player"].concat()) + .body(Player::new()?.encode()?) + .send().await? + .text().await?; + + println!("{}", response); Ok(()) } diff --git a/src/db.rs b/src/db.rs new file mode 100644 index 0000000..ca4965b --- /dev/null +++ b/src/db.rs @@ -0,0 +1,23 @@ +use std::sync::{Arc, Mutex}; +use std::collections::HashMap; +use axum::body::Bytes; + +pub type Db = Arc<Mutex<HashMap<String, Bytes>>>; + +#[derive(Clone)] +pub struct AppState { + pub lobbies: Db, + pub players: Db, +} + +impl AppState { + pub fn new() -> Self { + let lobbies = Arc::new(Mutex::new(HashMap::new())); + let players = Arc::new(Mutex::new(HashMap::new())); + + Self { + lobbies, + players, + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 5493869..3efbd9a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,3 +8,5 @@ pub mod message; pub mod message_read; pub mod constant; pub mod routine; +pub mod db; +pub mod router; diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index d4e82b7..0000000 --- a/src/main.rs +++ /dev/null @@ -1,69 +0,0 @@ -use std::collections::HashMap; -use std::io::{self, Error}; -use std::net::SocketAddr; - -use lib::lobby::Lobby; -use lib::player::Player; -use std::sync::{Arc, Mutex}; - -use anyhow::Result; -use tokio::io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader}; -use tokio::net::{TcpListener, TcpStream}; - -async fn handle_connection(mut stream: TcpStream, addr: SocketAddr) -> (Option<Player>, Option<Lobby>) { - let (mut read, mut write) = stream.split(); - - let mut buf = [0; 1024]; - - let mut name = String::new(); - write.write_all(b"provide name\n").await.expect("failed to write to socket"); - - let n = match read.read(&mut buf).await { - Ok(0) => return (None, None), - Ok(n) => n, - Err(e) => { - eprintln!("failed to read from socket; err: {:?}", e); - return (None, None); - }, - }; - - name = String::from_utf8_lossy(&buf[0..n]).to_string(); - -// if let Err(e) = write.write_all(&buf[0..n]).await { -// eprintln!("failed to write to socket; err = {:?}", e); -// return (None, None); -// } - - let player = Player::new(addr, &name); - - write.write_all(b"your name is\n").await.expect("failed to write to socket"); - write.write_all(name.as_bytes()).await.expect("failed to write to socket"); - - (Some(player), None) -} - -#[tokio::main] -async fn main() -> io::Result<()> { - let address = "127.0.0.1:8080".to_string(); - let listener = TcpListener::bind(&address).await?; - - let mut lobbies: Arc<Mutex<HashMap<String, Lobby>>> = Arc::new(Mutex::new(HashMap::new())); - - loop { - let (mut stream, addr) = listener.accept().await?; - - println!("new connection from: {}", addr); - - let lobby_player_handle = tokio::spawn(handle_connection(stream, addr)); - - let (player, lobby) = lobby_player_handle.await?; - - match lobby { - Some(lobby) => lobbies.insert(lobby.get_id(), lobby), - None => continue, - }; - - } - - Ok(()) -} diff --git a/src/message.rs b/src/message.rs index a3f3981..6dadb34 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1,10 +1,11 @@ +use std::fmt::Display; +use axum::body::to_bytes; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Message { pub from: String, pub message_kind: MessageKind, - pub length: u16, pub content: String, } @@ -20,12 +21,10 @@ impl Message { pub fn new(from: &str, message_kind: MessageKind, content: impl Into<String>) -> anyhow::Result<Self> { let from = from.into(); let content = content.into(); - let length = content.len() as u16; Ok(Self { from, message_kind, - length, content, }) } @@ -42,3 +41,9 @@ impl Message { Ok(message) } } + +impl Display for Message { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + todo!() + } +} diff --git a/src/player.rs b/src/player.rs index 095f521..208b88b 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,41 +1,42 @@ -use tokio::{io::AsyncReadExt, net::TcpStream}; -use std::net::SocketAddr; +use petname::Generator; use serde::{Deserialize, Serialize}; use sha256::digest; -use crate::{card::Card, message_read::MessageReader}; +use crate::card::Card; #[derive(Serialize, Deserialize, Eq, PartialEq, Hash, Clone)] pub struct Player { - // addr will change because at this stage i really - // don't know what i am doing - // it will probably be something like id or playerid - // or some other identifier idk - pub addr: SocketAddr, - // same goes for id because rn it's just the sha256 of - // the ip pub id: String, pub name: String, pub hand: Vec<Card>, } impl Player { - pub async fn new(addr: SocketAddr, name: &str) -> anyhow::Result<Option<Self>> { + pub fn new() -> anyhow::Result<Self> { let hand_empty: Vec<Card> = Vec::new(); - let to_digest: String = addr.to_string(); + + let name = petname::Petnames::default().generate_one(2, "-").expect("no nomi"); + let to_digest = &name; let id = digest(to_digest); - Ok(Some(Player { - addr, + Ok(Player { id, - name: name.to_string(), + name, hand: hand_empty, - })) + }) } - pub fn get_addr(self) -> SocketAddr { - self.addr + pub fn encode(&self) -> anyhow::Result<String> { + let player_json: String = serde_json::to_string(self)?; + + Ok(player_json) + } + + pub fn decode(player: String) -> anyhow::Result<Self> { + let player: Player = serde_json::from_str(&player)?; + + Ok(player) } pub fn get_name(self) -> String { diff --git a/src/router.rs b/src/router.rs new file mode 100644 index 0000000..dc58a3a --- /dev/null +++ b/src/router.rs @@ -0,0 +1,46 @@ +use axum::{ + Router, + body::Bytes, + extract::{ + State, + Json, + rejection::JsonRejection, + }, +}; + +use crate::message::Message; +use crate::db::AppState; + +pub struct App { + pub db: AppState, + pub router: Router<AppState>, +} + +impl App { + pub fn new() -> Self { + let db = AppState::new(); + let router: Router<AppState> = Router::new(); + + Self { + db, + router, + } + } + + pub async fn echo(body: Bytes) -> Bytes { + body + } + + pub async fn create_player( + State(db): State<AppState>, + json_body: Result<Json<Message>, JsonRejection>, + ) + { + match json_body { + Ok(Json(message)) => { + println!("{:?}", message); + } + Err(e) => eprintln!("{e}"), + } + } +} diff --git a/src/server.rs b/src/server.rs index 1075248..82f2e8f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,13 +1,7 @@ -use tokio::{io::{AsyncReadExt, AsyncWriteExt, BufReader}, net::{tcp::WriteHalf, TcpListener}}; -use std::net::SocketAddr; -use crate::{message::{Message, MessageKind}, message_read::MessageReader, server}; -use std::convert::Infallible; -use http_body_util::Full; -use hyper::body::Bytes; -use hyper::server::conn::http1; -use hyper::service::service_fn; -use hyper::{Request, Response}; -use hyper_util::rt::TokioIo; +use tokio::net::TcpListener; +use crate::router::App; + +use axum::routing::{get, post}; pub struct Server { pub host: String, @@ -22,35 +16,23 @@ impl Server { } } - pub async fn handle_request(_: Request<hyper::body::Incoming>) -> Result<Response<Full<Bytes>>, Infallible> { - Ok(Response::new(Full::new(Bytes::from("Hello, toto")))) - } - #[allow(unreachable_code)] pub async fn run(&mut self) -> anyhow::Result<()> { let listener = TcpListener::bind(format!( "{}:{}", self.host, self.port )).await?; - println!("Server is running on {}:{}", self.host, self.port); - loop { - let (mut stream, addr) = listener.accept().await?; - println!("Connection received from {}", addr); + let app = App::new(); - let io = TokioIo::new(stream); + let router = app.router + .route("/echo", post(App::echo)) + .route("/create/player", post(App::create_player)) + .with_state(app.db); - tokio::task::spawn(async move { - if let Err(e) = http1::Builder::new() - .serve_connection(io, service_fn(Self::handle_request)) - .await - { - eprintln!("error serving connection: {:?}", e); - } - }); - } + axum::serve(listener, router).await.unwrap(); Ok(()) } From 4ede781f50c5253c0597ecb2b89b45d3985e3102 Mon Sep 17 00:00:00 2001 From: clizia <xanthippe@cock.lu> Date: Mon, 3 Mar 2025 15:34:56 +0100 Subject: [PATCH 4/7] updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ea8c4bf..7a3ac65 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +/src/main-backup.rs From ed3c9694c00bf24ae3c3ba1a9378948a9d7e5d1f Mon Sep 17 00:00:00 2001 From: clizia <xanthippe@cock.lu> Date: Mon, 3 Mar 2025 21:38:11 +0100 Subject: [PATCH 5/7] shared state works --- src/bin/client.rs | 12 +++++------- src/player.rs | 12 +++++++----- src/router.rs | 32 ++++++++++++++++++++++---------- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/bin/client.rs b/src/bin/client.rs index 54c96c3..cbf7135 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -9,13 +9,7 @@ use crossterm::{ }, event::Event, }; -use http_body_util::Empty; -use hyper::{client::conn::{self, http1::{self, handshake}}, Request}; -use hyper::body::Bytes; -use hyper_util::rt::TokioIo; -use tokio::net::TcpStream; -#[allow(unreachable_code)] #[tokio::main] pub async fn main() -> anyhow::Result<()> { // let mut client = Client::connect("127.0.0.1", 8080).await?; @@ -31,9 +25,13 @@ pub async fn main() -> anyhow::Result<()> { let client = reqwest::Client::new(); + let player = Player::new()?; + let message = Message::new(&player.get_name(), MessageKind::Test, player.encode()?)?; + let response = client .post([&addr, "/create/player"].concat()) - .body(Player::new()?.encode()?) + .header("Content-Type", "application/json") + .body(message.encode()?) .send().await? .text().await?; diff --git a/src/player.rs b/src/player.rs index 208b88b..6da6631 100644 --- a/src/player.rs +++ b/src/player.rs @@ -2,6 +2,8 @@ use petname::Generator; use serde::{Deserialize, Serialize}; use sha256::digest; +use axum::Json; + use crate::card::Card; #[derive(Serialize, Deserialize, Eq, PartialEq, Hash, Clone)] @@ -28,7 +30,7 @@ impl Player { } pub fn encode(&self) -> anyhow::Result<String> { - let player_json: String = serde_json::to_string(self)?; + let player_json = serde_json::to_string(self)?; Ok(player_json) } @@ -39,11 +41,11 @@ impl Player { Ok(player) } - pub fn get_name(self) -> String { - self.name + pub fn get_name(&self) -> String { + self.name.clone() } - pub fn get_hand(self) -> Vec<Card> { - self.hand + pub fn get_hand(&self) -> Vec<Card> { + self.hand.clone() } } diff --git a/src/router.rs b/src/router.rs index dc58a3a..0a27568 100644 --- a/src/router.rs +++ b/src/router.rs @@ -1,15 +1,14 @@ +use anyhow::Result; use axum::{ - Router, - body::Bytes, - extract::{ - State, - Json, - rejection::JsonRejection, - }, + body::Bytes, extract::{ + rejection::JsonRejection, Json, State + }, response::ErrorResponse, Router }; +use hyper::StatusCode; -use crate::message::Message; +use crate::{message::Message, player::Player}; use crate::db::AppState; +use crate::message::MessageKind; pub struct App { pub db: AppState, @@ -34,13 +33,26 @@ impl App { pub async fn create_player( State(db): State<AppState>, json_body: Result<Json<Message>, JsonRejection>, - ) + ) -> Result<axum::Json<Message>, StatusCode> { match json_body { Ok(Json(message)) => { println!("{:?}", message); + let player: Player = serde_json::from_str(&message.content).expect("niente json"); + { + let mut players = db.players + .lock().expect("ciao"); + + players.insert( + player.get_name(), + Bytes::copy_from_slice(player.encode().expect("failed encoding player").as_ref()) + ); + } + + println!("{:?}", db.players); + Ok(Json(Message::new("server", MessageKind::CreatePlayer, "user created").expect("failed creating message"))) } - Err(e) => eprintln!("{e}"), + Err(_) => Err(StatusCode::UNPROCESSABLE_ENTITY) } } } From 6fe2cfb5d76d82cc85542575be49dbc5b97790a9 Mon Sep 17 00:00:00 2001 From: clizia <xanthippe@cock.lu> Date: Tue, 4 Mar 2025 14:32:49 +0100 Subject: [PATCH 6/7] client mezzo interattivo --- src/bin/client.rs | 102 ++++++++++++++++++++++++++++++++++------------ src/router.rs | 19 ++++++--- src/server.rs | 1 + 3 files changed, 92 insertions(+), 30 deletions(-) diff --git a/src/bin/client.rs b/src/bin/client.rs index cbf7135..b129785 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -1,41 +1,93 @@ +use std::{io::{Stdout, Write}, ops::BitOrAssign, time::Duration}; + +use axum::response::sse::Event; +use clap::builder::NonEmptyStringValueParser; use lib::{client::Client, message::{Message, MessageKind}, message_read::MessageReader, player::Player}; use crossterm::{ - execute, - terminal::{ - Clear, - ClearType, - enable_raw_mode, - disable_raw_mode - }, - event::Event, + cursor, event::{self, poll, Event as TermEvent, KeyCode, KeyModifiers}, execute, queue, style, terminal::{ + disable_raw_mode, enable_raw_mode, Clear, ClearType, EnableLineWrap + } }; +const HELP: &str = r#"CIAOTERPIA +atm posso fare questo: +(ricorda di premere i bottoni) +- '1' mando giocante +- '2' mando lobbando (futuro) +"#; + +fn create_message_player(player: &Player) -> anyhow::Result<Message, anyhow::Error> { + Message::new( + &player.get_name(), + MessageKind::Test, + player.encode()? + ) +} + +async fn send_player(player: &Player, client: reqwest::Client, addr: &str) -> anyhow::Result<()> { + let player_message = create_message_player(&player)?; + let response = client + .post([&addr, "/create/player"].concat()) + .header("Content-Type", "application/json") + .body(player_message.encode()?) + .send().await; + + if let Err(e) = &response { + println!("{e}\n"); + return Ok(()) + } + + Ok(()) +} +async fn handle_terminal(player: &Player, stdout: &mut Stdout, client: reqwest::Client, addr: &str) -> anyhow::Result<()> { + 'handler: loop { + for line in HELP.split('\n') { + queue!(stdout, style::Print(line), cursor::MoveToNextLine(1))?; + } + stdout.flush()?; + + while let Ok(_event_happened) = poll(Duration::from_millis(2)) { + match event::read().expect("diomerds") { + TermEvent::Key(key) => { + match (key.code, key.modifiers) { + (KeyCode::Char('c'), KeyModifiers::CONTROL) => break 'handler, + (KeyCode::Char('1'), KeyModifiers::NONE) => send_player(&player, client.clone(), addr).await?, + (_, _) => println!("{:?}\n", key), + } + }, + _ => continue, + } + } + } + + Ok(()) +} + #[tokio::main] pub async fn main() -> anyhow::Result<()> { // let mut client = Client::connect("127.0.0.1", 8080).await?; // let local_address = client.stream.local_addr()?; - // enable_raw_mode()?; - // execute!( - // std::io::stdout(), - // Clear(ClearType::All), - // )?; + let mut stdout = std::io::stdout(); - let addr = "http://127.0.0.1:8080"; - - let client = reqwest::Client::new(); + enable_raw_mode()?; + execute!( + stdout, + Clear(ClearType::All), + EnableLineWrap, + cursor::Show, + cursor::EnableBlinking, + )?; let player = Player::new()?; - let message = Message::new(&player.get_name(), MessageKind::Test, player.encode()?)?; - let response = client - .post([&addr, "/create/player"].concat()) - .header("Content-Type", "application/json") - .body(message.encode()?) - .send().await? - .text().await?; - - println!("{}", response); + let addr = "http://127.0.0.1:8080"; + let client = reqwest::Client::new(); + + println!("{}", HELP); + + handle_terminal(&player, &mut stdout, client.clone(), &addr).await?; + disable_raw_mode()?; Ok(()) } diff --git a/src/router.rs b/src/router.rs index 0a27568..c424bdb 100644 --- a/src/router.rs +++ b/src/router.rs @@ -1,10 +1,13 @@ use anyhow::Result; use axum::{ body::Bytes, extract::{ - rejection::JsonRejection, Json, State - }, response::ErrorResponse, Router + rejection::JsonRejection, + Json, + State, + }, + http::StatusCode, + Router }; -use hyper::StatusCode; use crate::{message::Message, player::Player}; use crate::db::AppState; @@ -33,8 +36,7 @@ impl App { pub async fn create_player( State(db): State<AppState>, json_body: Result<Json<Message>, JsonRejection>, - ) -> Result<axum::Json<Message>, StatusCode> - { + ) -> Result<axum::Json<Message>, StatusCode> { match json_body { Ok(Json(message)) => { println!("{:?}", message); @@ -55,4 +57,11 @@ impl App { Err(_) => Err(StatusCode::UNPROCESSABLE_ENTITY) } } + + pub async fn create_lobby( + State(db): State<AppState>, + json_body: Result<Json<Message>, JsonRejection>, + ) -> Result<axum::Json<Message>, StatusCode> { + todo!() + } } diff --git a/src/server.rs b/src/server.rs index 82f2e8f..2f26503 100644 --- a/src/server.rs +++ b/src/server.rs @@ -30,6 +30,7 @@ impl Server { let router = app.router .route("/echo", post(App::echo)) .route("/create/player", post(App::create_player)) + .route("/create/lobby", post(App::create_lobby)) .with_state(app.db); axum::serve(listener, router).await.unwrap(); From 61f388361167ebe826d6f1c090cc1400d516fedd Mon Sep 17 00:00:00 2001 From: clizia <xanthippe@cock.lu> Date: Tue, 4 Mar 2025 15:23:27 +0100 Subject: [PATCH 7/7] puoi cancellarti ora --- src/bin/client.rs | 43 ++++++++++++++++++++++++++++++++----------- src/message.rs | 2 ++ src/router.rs | 28 +++++++++++++++++++++++++--- src/server.rs | 1 + 4 files changed, 60 insertions(+), 14 deletions(-) diff --git a/src/bin/client.rs b/src/bin/client.rs index b129785..02c02ce 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -5,7 +5,7 @@ use clap::builder::NonEmptyStringValueParser; use lib::{client::Client, message::{Message, MessageKind}, message_read::MessageReader, player::Player}; use crossterm::{ cursor, event::{self, poll, Event as TermEvent, KeyCode, KeyModifiers}, execute, queue, style, terminal::{ - disable_raw_mode, enable_raw_mode, Clear, ClearType, EnableLineWrap + disable_raw_mode, enable_raw_mode, Clear, ClearType, EnableLineWrap, EnterAlternateScreen } }; @@ -24,6 +24,22 @@ fn create_message_player(player: &Player) -> anyhow::Result<Message, anyhow::Err ) } +async fn delete_player(player: &Player, client: reqwest::Client, addr: &str) -> anyhow::Result<()> { + let player_id = &player.name; + let response = client + .get([&addr, "/delete/", &player_id].concat()) + .send().await; + + if let Err(e) = &response { + println!("{e}\n"); + return Ok(()) + } + + println!("{}", response?.text().await?); + + Ok(()) +} + async fn send_player(player: &Player, client: reqwest::Client, addr: &str) -> anyhow::Result<()> { let player_message = create_message_player(&player)?; let response = client @@ -37,21 +53,28 @@ async fn send_player(player: &Player, client: reqwest::Client, addr: &str) -> an return Ok(()) } + println!("{}", response?.text().await?); + Ok(()) } async fn handle_terminal(player: &Player, stdout: &mut Stdout, client: reqwest::Client, addr: &str) -> anyhow::Result<()> { 'handler: loop { - for line in HELP.split('\n') { - queue!(stdout, style::Print(line), cursor::MoveToNextLine(1))?; - } - stdout.flush()?; - while let Ok(_event_happened) = poll(Duration::from_millis(2)) { match event::read().expect("diomerds") { TermEvent::Key(key) => { match (key.code, key.modifiers) { (KeyCode::Char('c'), KeyModifiers::CONTROL) => break 'handler, - (KeyCode::Char('1'), KeyModifiers::NONE) => send_player(&player, client.clone(), addr).await?, + (KeyCode::Char('h'), KeyModifiers::NONE) => { + for line in HELP.split('\n') { + println!("{line}") + } + }, + (KeyCode::Char('1'), KeyModifiers::NONE) => { + send_player(&player, client.clone(), addr).await?; + }, + (KeyCode::Char('2'), KeyModifiers::NONE) => { + delete_player(&player, client.clone(), addr).await?; + }, (_, _) => println!("{:?}\n", key), } }, @@ -65,9 +88,6 @@ async fn handle_terminal(player: &Player, stdout: &mut Stdout, client: reqwest:: #[tokio::main] pub async fn main() -> anyhow::Result<()> { - // let mut client = Client::connect("127.0.0.1", 8080).await?; - // let local_address = client.stream.local_addr()?; - let mut stdout = std::io::stdout(); enable_raw_mode()?; @@ -77,6 +97,7 @@ pub async fn main() -> anyhow::Result<()> { EnableLineWrap, cursor::Show, cursor::EnableBlinking, + EnterAlternateScreen, )?; let player = Player::new()?; @@ -84,7 +105,7 @@ pub async fn main() -> anyhow::Result<()> { let addr = "http://127.0.0.1:8080"; let client = reqwest::Client::new(); - println!("{}", HELP); + // println!("{}", HELP); handle_terminal(&player, &mut stdout, client.clone(), &addr).await?; disable_raw_mode()?; diff --git a/src/message.rs b/src/message.rs index 6dadb34..4b08157 100644 --- a/src/message.rs +++ b/src/message.rs @@ -15,6 +15,8 @@ pub enum MessageKind { Move, CreatePlayer, CreateLobby, + DeletePlayer, + DeleteLobby, } impl Message { diff --git a/src/router.rs b/src/router.rs index c424bdb..f553e2f 100644 --- a/src/router.rs +++ b/src/router.rs @@ -1,9 +1,7 @@ use anyhow::Result; use axum::{ body::Bytes, extract::{ - rejection::JsonRejection, - Json, - State, + rejection::JsonRejection, Json, Path, State }, http::StatusCode, Router @@ -45,6 +43,10 @@ impl App { let mut players = db.players .lock().expect("ciao"); + if players.contains_key(&player.name) { + return Err(StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS) + } + players.insert( player.get_name(), Bytes::copy_from_slice(player.encode().expect("failed encoding player").as_ref()) @@ -58,6 +60,26 @@ impl App { } } + pub async fn delete_player( + State(db): State<AppState>, + Path(player_id): Path<String> + ) -> Result<axum::response::Json<Message>, StatusCode> { + { + let mut players = db.players + .lock().expect("ciao"); + + match players.contains_key(&player_id) { + true => { + players.remove(&player_id); + println!("{:?}", players); + Ok(Json(Message::new("server", MessageKind::DeletePlayer, "user deleted").expect("a"))) + }, + false => Err(StatusCode::NOT_FOUND), + } + } + + } + pub async fn create_lobby( State(db): State<AppState>, json_body: Result<Json<Message>, JsonRejection>, diff --git a/src/server.rs b/src/server.rs index 2f26503..de06f39 100644 --- a/src/server.rs +++ b/src/server.rs @@ -31,6 +31,7 @@ impl Server { .route("/echo", post(App::echo)) .route("/create/player", post(App::create_player)) .route("/create/lobby", post(App::create_lobby)) + .route("/delete/{player-id}", get(App::delete_player)) .with_state(app.db); axum::serve(listener, router).await.unwrap();