Add print options
This commit is contained in:
19
src/main.rs
19
src/main.rs
@@ -1,18 +1,21 @@
|
||||
use mensa::Mealplan;
|
||||
|
||||
mod mensa;
|
||||
|
||||
//use crate::mensa::*;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let resp = reqwest::get("https://www.my-stuwe.de//wp-json/mealplans/v1/canteens/611?lang=de")
|
||||
.await?
|
||||
.json::<mensa::MensaShedhalle>()
|
||||
.await?;
|
||||
println!("{:#?}", resp);
|
||||
let shedhalle = mensa::Mensa::from(mensa::MensaName::Shedhalle).await?;
|
||||
if let mensa::Mensa::Shedhalle(resp) = shedhalle {
|
||||
//println!("{:#?}", resp);
|
||||
//println!("{}", resp.today());
|
||||
for a in resp.today().iter() {
|
||||
a.print_short_info();
|
||||
}
|
||||
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
pub enum Mensa {
|
||||
Shedhalle(mensa::MensaShedhalle),
|
||||
}
|
||||
|
109
src/mensa.rs
109
src/mensa.rs
@@ -1,14 +1,83 @@
|
||||
extern crate serde_derive;
|
||||
use chrono::{DateTime, Local};
|
||||
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
|
||||
pub enum MensaName {
|
||||
Shedhalle,
|
||||
Morgenstelle
|
||||
}
|
||||
|
||||
pub trait Mealplan {
|
||||
fn id(&self) -> &str;
|
||||
fn today(&self) -> Vec<&Menu>;
|
||||
}
|
||||
|
||||
pub enum Mensa {
|
||||
Shedhalle(MensaShedhalle),
|
||||
Morgenstelle(MensaMorgenstelle)
|
||||
}
|
||||
|
||||
impl Mensa {
|
||||
pub async fn from(name: MensaName) -> Result<Mensa, Box<dyn std::error::Error>> {
|
||||
match name {
|
||||
MensaName::Shedhalle => {
|
||||
let resp = reqwest::get("https://www.my-stuwe.de//wp-json/mealplans/v1/canteens/611?lang=de")
|
||||
.await?
|
||||
.json::<MensaShedhalle>()
|
||||
.await?;
|
||||
|
||||
Ok(Mensa::Shedhalle(resp))
|
||||
},
|
||||
MensaName::Morgenstelle => {
|
||||
let resp = reqwest::get("https://www.my-stuwe.de//wp-json/mealplans/v1/canteens/621?lang=de")
|
||||
.await?
|
||||
.json::<MensaMorgenstelle>()
|
||||
.await?;
|
||||
|
||||
Ok(Mensa::Morgenstelle(resp))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct MensaShedhalle {
|
||||
#[serde(rename = "611")]
|
||||
the_611: The611,
|
||||
canteen: Canteen,
|
||||
}
|
||||
|
||||
impl MensaShedhalle {
|
||||
fn print(&self) {
|
||||
println!("{:#?}", self);
|
||||
}
|
||||
}
|
||||
|
||||
impl Mealplan for MensaShedhalle {
|
||||
fn id(&self) -> &str {
|
||||
&self.canteen.canteen_id
|
||||
}
|
||||
|
||||
fn today(&self) -> Vec<&Menu> {
|
||||
let local = format!("{}", Local::now().format("%Y-%m-%d"));
|
||||
self.canteen.menus.iter().filter(|&x| x.menu_date == local).collect()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct The611 {
|
||||
pub struct MensaMorgenstelle {
|
||||
#[serde(rename = "621")]
|
||||
canteen: Canteen,
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Canteen {
|
||||
#[serde(rename = "canteenId")]
|
||||
canteen_id: String,
|
||||
canteen: String,
|
||||
@@ -22,7 +91,7 @@ pub struct Menu {
|
||||
menu_line: String,
|
||||
photo: Photo,
|
||||
#[serde(rename = "studentPrice")]
|
||||
student_price: StudentPrice,
|
||||
student_price: String,
|
||||
#[serde(rename = "guestPrice")]
|
||||
guest_price: String,
|
||||
#[serde(rename = "pupilPrice")]
|
||||
@@ -30,14 +99,24 @@ pub struct Menu {
|
||||
#[serde(rename = "menuDate")]
|
||||
menu_date: String,
|
||||
menu: Vec<String>,
|
||||
meats: Vec<FiltersInclude>,
|
||||
icons: Vec<FiltersInclude>,
|
||||
meats: Vec<String>,
|
||||
icons: Vec<String>,
|
||||
#[serde(rename = "filtersInclude")]
|
||||
filters_include: Vec<FiltersInclude>,
|
||||
allergens: Vec<String>,
|
||||
additives: Vec<String>,
|
||||
}
|
||||
|
||||
impl Menu {
|
||||
pub fn print(&self) {
|
||||
println!("{:#?}", self);
|
||||
}
|
||||
|
||||
pub fn print_short_info(&self) {
|
||||
println!("{}: {}, {}€", self.menu_line, self.menu.join(", "), self.student_price);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Photo {
|
||||
thumbnail: String,
|
||||
@@ -61,23 +140,3 @@ pub enum FiltersInclude {
|
||||
Vegan,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub enum StudentPrice {
|
||||
#[serde(rename = "-")]
|
||||
Empty,
|
||||
#[serde(rename = "0,95")]
|
||||
The095,
|
||||
#[serde(rename = "1,00")]
|
||||
The100,
|
||||
#[serde(rename = "2,65")]
|
||||
The265,
|
||||
#[serde(rename = "3,10")]
|
||||
The310,
|
||||
#[serde(rename = "3,20")]
|
||||
The320,
|
||||
#[serde(rename = "3,40")]
|
||||
The340,
|
||||
#[serde(rename = "3,50")]
|
||||
The350,
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user