fn main() { #[cfg(feature = "debug_server")] pack_debug_page().unwrap(); println!("cargo:rerun-if-changed=web/main.js"); println!("cargo:rerun-if-changed=web/index.html"); println!("cargo:rerun-if-changed=web/main.css"); println!("cargo:rerun-if-changed=web/connected.svg"); } #[cfg(feature = "debug_server")] fn pack_debug_page() -> Result<(), Box> { use flate2::{write::GzEncoder, Compression}; use std::io::Write; use css_minify::optimizations::{Level, Minifier}; let js = std::fs::read_to_string("web/main.js").unwrap(); let html = std::fs::read_to_string("web/index.html").unwrap(); let css = std::fs::read_to_string("web/main.css").unwrap(); let svg = std::fs::read_to_string("web/connected.svg").unwrap(); let mut out = Vec::new(); minify_js::minify( &minify_js::Session::new(), minify_js::TopLevelMode::Global, js.as_bytes(), &mut out, ) .unwrap(); let js = std::str::from_utf8(&out)?; let css = Minifier::default().minify(&css, Level::One).unwrap(); let (start, end) = html .split_once("") .expect("did not find svg split point in html"); let html = format!("{start}{svg}{end}"); let (head, body) = html .split_once("") .expect("did not find head split point in html"); let (body_a, body_b) = body .split_once("#INSERT VERSION HERE#") .expect("did not find version split point in html"); let version = env!("CARGO_PKG_VERSION"); let html = minify_html::minify( format!("{head}{body_a}{version}{body_b}") .as_bytes(), &minify_html::Cfg::spec_compliant(), ); let mut encoder = GzEncoder::new( std::fs::File::create(std::env::var("OUT_DIR").unwrap() + "/minified.html.gz")?, Compression::best(), ); encoder.write_all(&html)?; Ok(()) }