Add reqwest and ureq feature

Available features:
android -> reqwest
small -> ureq
This commit is contained in:
2024-12-30 21:47:21 +01:00
parent be1542bbe8
commit e352513d32
4 changed files with 1026 additions and 97 deletions

1073
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -20,7 +20,18 @@ clap = { version = "4.5.23", features = ["derive"] }
prettytable = "0.10.0" prettytable = "0.10.0"
serde = { version = "1.0.217", features = ["derive"] } serde = { version = "1.0.217", features = ["derive"] }
serde_derive = "1.0.217" serde_derive = "1.0.217"
ureq = { version = "*", features = ["json", "tls"] } anyhow = "=1.0.95"
[dependencies.ureq]
version = "*"
features = ["default", "json", "tls"]
optional = true
[dependencies.reqwest]
version = "0.12.11"
features = ["blocking", "json", "rustls-tls"]
default-features = false
optional = true
[lib] [lib]
name = "tuemensa_lib" name = "tuemensa_lib"
@@ -29,3 +40,8 @@ path = "src/lib.rs"
[[bin]] [[bin]]
name = "tuemensa" name = "tuemensa"
path = "src/main.rs" path = "src/main.rs"
[features]
default = ["android"]
android = ["reqwest"]
small = []

View File

@@ -1 +1 @@
mod mensa; pub mod mensa;

View File

@@ -2,7 +2,8 @@ extern crate serde_derive;
use chrono::{Datelike, Local}; use chrono::{Datelike, Local};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::time::Duration; use std::time::Duration;
use ureq::{Agent, Error}; #[cfg(feature = "ureq")]
use ureq::Agent;
pub enum MensaName { pub enum MensaName {
Wilhelmstrasse, Wilhelmstrasse,
@@ -41,12 +42,8 @@ pub struct Mensa {
} }
impl Mensa { impl Mensa {
pub fn from(name: MensaName) -> Result<Mensa, Error> { #[cfg(feature = "small")]
let agent: Agent = ureq::AgentBuilder::new() pub fn from(name: MensaName) -> anyhow::Result<Mensa> {
.timeout_read(Duration::from_secs(5))
.timeout_write(Duration::from_secs(5))
.build();
let canteen_id = match name { let canteen_id = match name {
MensaName::Wilhelmstrasse => 611, MensaName::Wilhelmstrasse => 611,
MensaName::Morgenstelle => 621, MensaName::Morgenstelle => 621,
@@ -56,9 +53,28 @@ impl Mensa {
let url = let url =
format!("https://www.my-stuwe.de//wp-json/mealplans/v1/canteens/{canteen_id}?lang=de"); format!("https://www.my-stuwe.de//wp-json/mealplans/v1/canteens/{canteen_id}?lang=de");
let agent: Agent = ureq::AgentBuilder::new()
.timeout_read(Duration::from_secs(5))
.timeout_write(Duration::from_secs(5))
.build();
Ok(agent.get(&url).call()?.into_json::<Mensa>()?) Ok(agent.get(&url).call()?.into_json::<Mensa>()?)
} }
#[cfg(feature = "android")]
pub fn from(name: MensaName) -> anyhow::Result<Mensa> {
let canteen_id = match name {
MensaName::Wilhelmstrasse => 611,
MensaName::Morgenstelle => 621,
MensaName::PrinzKarl => 623,
};
let url =
format!("https://www.my-stuwe.de//wp-json/mealplans/v1/canteens/{canteen_id}?lang=de");
let client = reqwest::blocking::Client::new();
Ok(client.get(url).send()?.json()?)
}
fn _print(&self) { fn _print(&self) {
println!("{:#?}", self); println!("{:#?}", self);
} }