62 lines
2.4 KiB
Rust
62 lines
2.4 KiB
Rust
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<Output = Result<(), Box<dyn error::Error>>> + 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<Output = NewState> + 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,
|
|
}
|
|
}
|
|
}
|
|
}
|