use super::{exit::Exit, add_gamenight::AddGamenight, list_gamenights::ListGamenights, login::Login, main_menu::MainMenu, *}; #[derive(Clone)] pub struct Main { login: Box Flow<'a>>, main_menu: MainMenu } impl Main { pub fn new() -> Self { let mut main_menu = MainMenu::new(); main_menu.menu.push(Box::new(ListGamenights::new())); main_menu.menu.push(Box::new(AddGamenight::new())); main_menu.menu.push(Box::new(Exit::new())); Self { login: Box::new(Login::new()), main_menu: main_menu } } } #[async_trait] impl<'a> Flow<'a> for Main { async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a> { let (_outcome, state) = self.login.run(state).await?; let (_outcome, state) = self.main_menu.run(state).await?; Ok((FlowOutcome::Successful, state)) } } impl Display for Main { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "main") } }