dialtone_yew 0.1.0

Dialtone Yew Webapp
use crate::components::common::main_layout::*;
use crate::components::pages::about::*;
use crate::components::pages::account::*;
use crate::components::pages::error::*;
use crate::components::pages::home::*;
use crate::components::pages::login::*;
use crate::components::pages::logout::*;
use crate::components::pages::register::*;
use crate::components::pages::themes::*;
use yew::prelude::*;
use yew_router::prelude::*;

#[derive(Clone, Routable, PartialEq, Debug)]
pub enum MainRoute {
    #[at("/")]
    Home,

    #[at("/login")]
    Login,

    #[at("/logout")]
    Logout,

    #[at("/register/:s")]
    RegisterSwitch,

    #[at("/p/:pun")]
    PersonProfile { pun: String },

    #[at("/themes")]
    Themes,

    #[at("/about")]
    About,

    #[at("/account/:s/:s")]
    AccountSwitch,

    #[not_found]
    #[at("/404")]
    NotFound,

    #[at("/bad_request")]
    BadRequest,

    #[at("/access_denied")]
    AccessDenied,

    #[at("/something_went_wrong")]
    SomethingWentWrong,

    #[at("/not_yet_implemented")]
    NotYetImplemented,
}

pub fn main_route_switch(routes: &MainRoute) -> Html {
    match routes {
        MainRoute::Home => html! { <Home/> },
        MainRoute::Login => html! { <Login/> },
        MainRoute::Logout => html! { <Logout/> },
        MainRoute::RegisterSwitch => {
            html! { <Switch<RegisterRoute> render={Switch::render(register_switch)} />}
        }
        MainRoute::Themes => html! { <Themes/> },
        MainRoute::About => html! { <About/> },
        MainRoute::NotFound => html! { <NotFoundPage/> },
        MainRoute::BadRequest => html! { <BadRequestPage/> },
        MainRoute::SomethingWentWrong => html! { <SomethingWentWrongPage/> },
        MainRoute::AccessDenied => html! { <AccessDeniedPage/> },
        MainRoute::NotYetImplemented => html! { <NotYetImplemented/> },
        MainRoute::PersonProfile { pun } => {
            html! { <MainLayout><h1>{format!("Person {}", pun)}</h1></MainLayout> }
        }
        MainRoute::AccountSwitch => {
            html! { <Switch<AccountRoute> render={Switch::render(account_switch)} />}
        }
    }
}