use crate::navigation::outputs::Outputs; use crate::views::card_view::CardView; use crate::views::{ journal_view::JournalView, main_menu::MainMenu, scan_menu::ScanMenu, settings_menu::SettingsMenu, }; use crate::navigation::navigation::{Navigable, NewState}; #[derive(Debug, Clone)] pub enum View { Main(MainMenu), Scan(ScanMenu), Settings(SettingsMenu), Journal(JournalView), Card(CardView), } impl Navigable for View { fn display(&self, outputs: &mut Outputs) -> impl core::future::Future + Send { async move { match self { View::Main(main_menu) => main_menu.display(outputs).await, View::Scan(scan_menu) => scan_menu.display(outputs).await, View::Settings(settings_menu) => settings_menu.display(outputs).await, View::Journal(journal_view) => journal_view.display(outputs).await, View::Card(card_view) => card_view.display(outputs).await, } } } fn handle_input( &self, input: crate::navigation::navigation::Action, ) -> impl core::future::Future + Send { async move { match self { View::Main(main_menu) => main_menu.handle_input(input).await, View::Scan(scan_menu) => scan_menu.handle_input(input).await, View::Settings(settings_menu) => settings_menu.handle_input(input).await, View::Journal(journal_view) => journal_view.handle_input(input).await, View::Card(card_view) => card_view.handle_input(input).await, } } } }