use chrono::DateTime; use gamenight_api_client_rs::models::Gamenight; use super::*; #[derive(Clone)] pub struct ViewGamenight { gamenight: Gamenight } impl ViewGamenight { pub fn new(gamenight: Gamenight) -> Self { Self { gamenight } } pub fn gamenight_localtime(&self) -> Result { let datetime = DateTime::parse_from_rfc3339(&self.gamenight.datetime)?; let offset = *chrono::offset::Local::now().offset(); Ok(format!("{}", datetime.naive_local().checked_add_offset(offset).unwrap().format("%d-%m-%Y %H:%M"))) } } #[async_trait] impl<'a> Flow<'a> for ViewGamenight { async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a> { println!("Name: {}", self.gamenight.name); println!("When: {}", self.gamenight_localtime()?); Ok((FlowOutcome::Successful, state)) } } impl Display for ViewGamenight { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{} {}", self.gamenight.name, self.gamenight.datetime) } }