use crate::views::{main_menu::MainMenu, view::View}; use alloc::vec; use alloc::vec::Vec; #[derive(Debug, Clone)] pub struct NavigationState { pub screens: Vec, } impl Default for NavigationState { fn default() -> Self { Self { screens: vec![View::Main(MainMenu { selected: 0 })], } } } impl NavigationState { pub fn new() -> Self { Self::default() } pub fn back(&mut self) -> &View { match &self.screens.len() { 0 => { log::info!("No screens to go back to"); return self.screens.last().unwrap(); } 1 => { log::info!("Only one screen on stack, cannot go back"); return self.screens.last().unwrap(); } _ => { log::info!("Going back to previous screen"); self.screens.pop(); return self.screens.last().unwrap(); } } } }