#[cfg(feature = "ssr")] #[actix_web::main] async fn main() -> std::io::Result<()> { use actix_files::Files; use actix_web::*; use leptos::prelude::*; use leptos::config::get_configuration; use leptos_meta::MetaTags; use leptos_actix::{generate_route_list, LeptosRoutes}; use webapp::app::*; let conf = get_configuration(None).unwrap(); let addr = conf.leptos_options.site_addr; HttpServer::new(move || { // Generate the list of routes in your Leptos App let routes = generate_route_list(App); let leptos_options = &conf.leptos_options; let site_root = leptos_options.site_root.clone().to_string(); println!("listening on http://{}", &addr); App::new() // serve JS/WASM/CSS from `pkg` .service(Files::new("/pkg", format!("{site_root}/pkg"))) // serve other assets from the `assets` directory .service(Files::new("/assets", &site_root)) // serve the favicon from /favicon.ico .service(favicon) .leptos_routes(routes, { let leptos_options = leptos_options.clone(); move || { view! { } } }) .app_data(web::Data::new(leptos_options.to_owned())) //.wrap(middleware::Compress::default()) }) .bind(&addr)? .run() .await } #[cfg(feature = "ssr")] #[actix_web::get("favicon.ico")] async fn favicon( leptos_options: actix_web::web::Data, ) -> actix_web::Result { let leptos_options = leptos_options.into_inner(); let site_root = &leptos_options.site_root; Ok(actix_files::NamedFile::open(format!( "{site_root}/favicon.ico" ))?) } #[cfg(not(any(feature = "ssr", feature = "csr")))] pub fn main() { // no client-side main function // unless we want this to work with e.g., Trunk for pure client-side testing // see lib.rs for hydration function instead // see optional feature `csr` instead } #[cfg(all(not(feature = "ssr"), feature = "csr"))] pub fn main() { // a client-side main function is required for using `trunk serve` // prefer using `cargo leptos serve` instead // to run: `trunk serve --open --features csr` use webapp::app::*; console_error_panic_hook::set_once(); leptos::mount_to_body(App); }