use crate::navigation::outputs::Outputs; use crate::peripherals::Peripherals; use crate::views::card_view::CardView; use crate::views::{ error_view::ErrorView, flash_info_view::FlashInfoView, journal_view::JournalView, main_menu::MainMenu, scan_menu::ScanMenu, settings_menu::SettingsMenu, }; use alloc::boxed::Box; use core::error; use crate::navigation::navigation::{Navigable, NewState}; #[derive(Debug, Clone)] pub enum View { Error(ErrorView), Main(MainMenu), Scan(ScanMenu), Settings(SettingsMenu), Journal(JournalView), Card(CardView), FlashInfo(FlashInfoView), } impl Navigable for View { fn display( &self, outputs: &mut Outputs, peripherals: &Peripherals, ) -> impl core::future::Future>> + Send { async move { match self { View::Error(error_view) => error_view.display(outputs, peripherals).await, View::Main(main_menu) => main_menu.display(outputs, peripherals).await, View::Scan(scan_menu) => scan_menu.display(outputs, peripherals).await, View::Settings(settings_menu) => settings_menu.display(outputs, peripherals).await, View::Journal(journal_view) => journal_view.display(outputs, peripherals).await, View::Card(card_view) => card_view.display(outputs, peripherals).await, View::FlashInfo(flash_info_view) => { flash_info_view.display(outputs, peripherals).await } } } } fn handle_input( &self, input: crate::navigation::navigation::Action, ) -> impl core::future::Future + Send { async move { match self { View::Error(error_view) => error_view.handle_input(input).await, 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, View::FlashInfo(flash_info_view) => flash_info_view.handle_input(input).await, } } } }