main.rs (1443B)
1 use eframe::wasm_bindgen::JsCast as _; 2 3 const CANVAS_ID: &str = "poetry-magnets-online-canvas"; 4 5 fn main() { 6 eframe::WebLogger::init(log::LevelFilter::Debug).ok(); 7 8 let web_options = eframe::WebOptions::default(); 9 10 wasm_bindgen_futures::spawn_local(async { 11 let document = web_sys::window() 12 .expect("No window") 13 .document() 14 .expect("No document"); 15 16 let canvas = document 17 .get_element_by_id(CANVAS_ID) 18 .unwrap_or_else(|| panic!("Failed to find {CANVAS_ID}")) 19 .dyn_into::<web_sys::HtmlCanvasElement>() 20 .unwrap_or_else(|_| panic!("{CANVAS_ID} was not a HtmlCanvasElement")); 21 22 let start_result = eframe::WebRunner::new() 23 .start( 24 canvas, 25 web_options, 26 Box::new(|cc| Ok(Box::new(frontend::PoetryMagnetsOnlineApp::new(cc)))), 27 ) 28 .await; 29 30 if let Some(loading_text) = document.get_element_by_id("loading_text") { 31 match start_result { 32 Ok(_) => { 33 loading_text.remove(); 34 } 35 Err(e) => { 36 loading_text.set_inner_html( 37 "<p> The app has crashed. See the developer console for details. </p>", 38 ); 39 panic!("Failed to start eframe: {e:?}"); 40 } 41 } 42 } 43 }); 44 }