forked from Roflin/gamenight
37 lines
1.0 KiB
Rust
37 lines
1.0 KiB
Rust
|
|
use super::{exit::Exit, add_gamenight::AddGamenight, list_gamenights::ListGamenights, login::Login, main_menu::MainMenu, *};
|
|
|
|
#[derive(Clone)]
|
|
pub struct Main {
|
|
login: Box<dyn for<'a> 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")
|
|
}
|
|
}
|