diff --git a/Cargo.lock b/Cargo.lock index d615a09..0468fdf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -122,6 +122,15 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "bumpalo" version = "3.17.0" @@ -187,6 +196,25 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "deranged" version = "0.4.0" @@ -229,6 +257,16 @@ dependencies = [ "syn", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "either" version = "1.15.0" @@ -358,12 +396,11 @@ dependencies = [ "chrono", "gpio", "regex", -<<<<<<< HEAD + "rocket", "rppal", + "rust-embed", "serde", "serde_json", -======= - "rocket", "tokio", ] @@ -380,6 +417,16 @@ dependencies = [ "windows", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -415,6 +462,12 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +[[package]] +name = "gpio" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe6783270536547ac473c9d2ae5a7e0e715ea43f29004ced47fbd1c1372d2c7" + [[package]] name = "h2" version = "0.3.26" @@ -519,15 +572,8 @@ dependencies = [ "tower-service", "tracing", "want", ->>>>>>> eb39b09632efb1568079352e3d639edc79df65fd ] -[[package]] -name = "gpio" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe6783270536547ac473c9d2ae5a7e0e715ea43f29004ced47fbd1c1372d2c7" - [[package]] name = "iana-time-zone" version = "0.1.63" @@ -553,8 +599,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= name = "indexmap" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -583,7 +627,6 @@ dependencies = [ ] [[package]] ->>>>>>> eb39b09632efb1568079352e3d639edc79df65fd name = "itoa" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -607,9 +650,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "linux-raw-sys" @@ -845,9 +888,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -984,14 +1027,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] -<<<<<<< HEAD -name = "rppal" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ce3b019009cff02cb6b0e96e7cc2e5c5b90187dc1a490f8ef1521d0596b026" -dependencies = [ - "libc", -======= name = "rocket" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1072,6 +1107,49 @@ dependencies = [ "uncased", ] +[[package]] +name = "rppal" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ce3b019009cff02cb6b0e96e7cc2e5c5b90187dc1a490f8ef1521d0596b026" +dependencies = [ + "libc", +] + +[[package]] +name = "rust-embed" +version = "8.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5fbc0ee50fcb99af7cebb442e5df7b5b45e9460ffa3f8f549cd26b862bec49d" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf418c9a2e3f6663ca38b8a7134cc2c2167c9d69688860e8961e3faa731702e" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d55b95147fe01265d06b3955db798bdaed52e60e2211c41137701b3aba8e21" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -1089,7 +1167,6 @@ dependencies = [ "libc", "linux-raw-sys", "windows-sys 0.59.0", ->>>>>>> eb39b09632efb1568079352e3d639edc79df65fd ] [[package]] @@ -1105,8 +1182,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] -<<<<<<< HEAD -======= +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] name = "scoped-tls" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1119,7 +1203,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] ->>>>>>> eb39b09632efb1568079352e3d639edc79df65fd name = "serde" version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1152,8 +1235,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= name = "serde_spanned" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1162,6 +1243,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -1172,7 +1264,6 @@ dependencies = [ ] [[package]] ->>>>>>> eb39b09632efb1568079352e3d639edc79df65fd name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1461,6 +1552,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + [[package]] name = "ubyte" version = "0.10.4" @@ -1504,6 +1601,16 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -1602,6 +1709,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 9d2f374..331f362 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,4 @@ serde = { version = "1.0.219", features = ["derive"] } serde_json = "1.0.140" rocket = "0.5.1" tokio = { version = "1.44.2", features = ["full"] } +rust-embed = "8.7.0" diff --git a/src/main.rs b/src/main.rs index 07fc2a8..72bf346 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,15 +1,3 @@ -<<<<<<< HEAD -use pm3::run_pm3; - -mod parser; -mod pm3; -mod id_store; -mod buzzer; - -fn main() { - run_pm3().unwrap(); -} -======= use pm3::{pm3_mock, run_pm3}; use tokio::sync::mpsc; use webserver::start_webserver; @@ -47,4 +35,3 @@ async fn main() { } } } ->>>>>>> eb39b09632efb1568079352e3d639edc79df65fd diff --git a/src/pm3.rs b/src/pm3.rs index aada338..5b34941 100644 --- a/src/pm3.rs +++ b/src/pm3.rs @@ -1,43 +1,3 @@ -<<<<<<< HEAD -use std::error::Error; -use std::process::{Command, Stdio}; -use std::io::{self, BufRead}; - -pub fn run_pm3() -> Result<(), Box> { - let mut cmd = Command::new("stdbuf") - .arg("-oL") - .arg("pm3") - .arg("-c") - .arg("lf hitag reader -@") - .stdout(Stdio::piped()) - .spawn()?; - - let stdout = cmd.stdout.take().ok_or("Failed to get stdout")?; - let reader = io::BufReader::new(stdout); - - for line_result in reader.lines() { - match line_result { - Ok(line) => { - let parse_result = super::parser::parse_line(&line); - if let Some(uid) = parse_result { - println!("UID: {}",uid); - } - } - Err(e) => { - eprintln!("{}",e); - } - } - } - - let status = cmd.wait().expect("Failed to wait on child"); - - if status.success() { - Ok(()) - }else { - Err("pm3 had non zero exit code".into()) - } -} -======= use std::error::Error; use std::io::{self, BufRead}; use std::process::{Command, Stdio}; @@ -100,4 +60,3 @@ pub async fn pm3_mock(tx: mpsc::Sender) -> Result<(), Box> { Ok(()) } ->>>>>>> eb39b09632efb1568079352e3d639edc79df65fd diff --git a/src/webserver.rs b/src/webserver.rs index 8a05bd8..78206a0 100644 --- a/src/webserver.rs +++ b/src/webserver.rs @@ -1,11 +1,35 @@ -use rocket::{get, routes}; +use rocket::{get, http::ContentType, response::content::RawHtml, routes}; +use rust_embed::Embed; +use std::borrow::Cow; +use std::ffi::OsStr; + +#[derive(Embed)] +#[folder = "web/dist"] +struct Asset; pub async fn start_webserver() -> Result<(), rocket::Error> { - rocket::build().mount("/", routes![index]).launch().await?; + rocket::build() + .mount("/", routes![static_files,index]) + .launch() + .await?; Ok(()) } #[get("/")] -fn index() -> &'static str { - "Hello, world!" +fn index() -> Option>> { + let asset = Asset::get("index.html")?; + Some(RawHtml(asset.data)) +} + +#[get("/")] +fn static_files(file: std::path::PathBuf) -> Option<(ContentType, Vec)> { + let filename = file.display().to_string(); + let asset = Asset::get(&filename)?; + let content_type = file + .extension() + .and_then(OsStr::to_str) + .and_then(ContentType::from_extension) + .unwrap_or(ContentType::Bytes); + + Some((content_type, asset.data.into_owned())) }