egui_router 0.7.0

A SPA router for egui
Documentation
use crate::handler::HandlerError;
use crate::Route;
use egui::Ui;
use egui_suspense::EguiSuspense;

pub(crate) struct AsyncRoute<State> {
    pub suspense: EguiSuspense<Box<dyn Route<State> + Send + Sync>, HandlerError>,
}

impl<State: 'static> AsyncRoute<State> {
    pub fn ui(&mut self, ui: &mut egui::Ui, state: &mut State) {
        self.suspense.ui(ui, |ui, data, _state| {
            data.ui(ui, state);
        });
    }
}

impl<State: 'static> Route<State> for AsyncRoute<State> {
    fn ui(&mut self, ui: &mut Ui, state: &mut State) {
        self.ui(ui, state);
    }

    fn on_showing(&mut self) {
        if let Some(route) = self.suspense.data_mut() {
            route.on_showing();
        }
    }

    fn on_shown(&mut self) {
        if let Some(route) = self.suspense.data_mut() {
            route.on_shown();
        }
    }

    fn on_hiding(&mut self) {
        if let Some(route) = self.suspense.data_mut() {
            route.on_hiding();
        }
    }

    fn on_hide(&mut self) {
        if let Some(route) = self.suspense.data_mut() {
            route.on_hide();
        }
    }

    fn enable_swipe(&self) -> Option<bool> {
        self.suspense.data().and_then(|route| route.enable_swipe())
    }
}