Add vegetarian switch

This commit is contained in:
2022-11-17 22:44:47 +01:00
parent 4d5917b21f
commit 4d40ae3977
3 changed files with 18 additions and 18 deletions

View File

@@ -23,6 +23,10 @@ pub struct Args {
/// Offset of days in the future (valid inputs 0-7) /// Offset of days in the future (valid inputs 0-7)
#[arg(short, long, default_value_t = 0)] #[arg(short, long, default_value_t = 0)]
pub days: u8, pub days: u8,
/// Show the vegetarian menu
#[arg(short, long, default_value_t = false)]
pub vegetarian: bool,
} }
pub fn get_args() -> Args { pub fn get_args() -> Args {

View File

@@ -12,18 +12,6 @@ mod cli;
async fn main() -> Result<(), Box<dyn std::error::Error>> { async fn main() -> Result<(), Box<dyn std::error::Error>> {
let args = cli::get_args(); let args = cli::get_args();
exec_arguments(&args).await?; exec_arguments(&args).await?;
//let shedhalle = mensa::Mensa::from(mensa::MensaName::Shedhalle);
//let morgenstelle = mensa::Mensa::from(mensa::MensaName::Morgenstelle);
//if let mensa::Mensa::Shedhalle(resp) = shedhalle.await? {
// let data = resp.today().iter().map(|&x| x.get_short_info()).collect::<Vec<(&str, String, &str)>>();
// table_short(data);
//}
//if let mensa::Mensa::Morgenstelle(resp) = morgenstelle.await? {
// let data = resp.today().iter().map(|&x| x.get_short_info()).collect::<Vec<(&str, String, &str)>>();
// table_short(data);
//}
Ok(()) Ok(())
} }
@@ -46,7 +34,7 @@ async fn exec_arguments(args: &cli::Args) -> Result<(), Box<dyn std::error::Erro
} }
fn exec_arg_helper(args: &cli::Args, m: &dyn mensa::Mealplan) { fn exec_arg_helper(args: &cli::Args, m: &dyn mensa::Mealplan) {
if let Some(menus) = m.nth(args.days) { if let Some(menus) = m.nth(args.days, args.vegetarian) {
if args.plaintext { if args.plaintext {
for i in menus.iter() { for i in menus.iter() {
i.print_short_info(); i.print_short_info();

View File

@@ -13,7 +13,7 @@ pub trait Mealplan {
fn id(&self) -> &str; fn id(&self) -> &str;
fn name(&self) -> &str; fn name(&self) -> &str;
fn today(&self) -> Vec<&Menu>; fn today(&self) -> Vec<&Menu>;
fn nth(&self, days: u8) -> Option<Vec<&Menu>>; fn nth(&self, days: u8, vegetarian: bool) -> Option<Vec<&Menu>>;
} }
pub enum Mensa { pub enum Mensa {
@@ -88,11 +88,15 @@ impl Mealplan for MensaShedhalle {
self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect() self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect()
} }
fn nth(&self, days: u8) -> Option<Vec<&Menu>> { fn nth(&self, days: u8, vegetarian: bool) -> Option<Vec<&Menu>> {
match get_nth_date(days) { match get_nth_date(days) {
Some(dt) => { Some(dt) => {
let local = format!("{}", dt.format("%Y-%m-%d")); let local = format!("{}", dt.format("%Y-%m-%d"));
Some(self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect()) if vegetarian {
Some(self.canteen.menus.iter().filter(|&x| x.menu_date == local && x.menu_line.contains("veg")).collect())
} else {
Some(self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect())
}
}, },
_ => None _ => None
} }
@@ -122,11 +126,15 @@ impl Mealplan for MensaMorgenstelle {
self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect() self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect()
} }
fn nth(&self, days: u8) -> Option<Vec<&Menu>> { fn nth(&self, days: u8, vegetarian: bool) -> Option<Vec<&Menu>> {
match get_nth_date(days) { match get_nth_date(days) {
Some(dt) => { Some(dt) => {
let local = format!("{}", dt.format("%Y-%m-%d")); let local = format!("{}", dt.format("%Y-%m-%d"));
Some(self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect()) if vegetarian {
Some(self.canteen.menus.iter().filter(|&x| x.menu_date == local && x.menu_line.contains("veg")).collect())
} else {
Some(self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect())
}
}, },
_ => None _ => None
} }