//! Application entry point. mod api; mod components; mod model; mod pages; mod ws; use sycamore::prelude::*; use sycamore_router::{HistoryIntegration, Route, Router}; use pages::game::GamePage; use pages::history::HistoryPage; use pages::leaderboard::LeaderboardPage; use pages::lobby::LobbyPage; #[derive(Route, Clone)] enum AppRoutes { #[to("/")] Lobby, #[to("/game/")] Game { id: String }, #[to("/history")] History, #[to("/leaderboard")] Leaderboard, #[not_found] NotFound, } fn main() { console_error_panic_hook::set_once(); sycamore::render(|| { view! { Router( integration=HistoryIntegration::new(), view=|route: ReadSignal| { view! { div(class="app") { (match route.get_clone() { AppRoutes::Lobby => view! { LobbyPage() }, AppRoutes::Game { id } => view! { GamePage(id=id) }, AppRoutes::History => view! { HistoryPage() }, AppRoutes::Leaderboard => view! { LeaderboardPage() }, AppRoutes::NotFound => view! { div(class="panel") { h1 { "Page not found" } a(href="/") { "Back to lobby" } } }, }) } } } ) } }); }