aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/api.rs17
-rw-r--r--src/lib.rs2
-rw-r--r--src/main.rs8
-rw-r--r--src/station.rs18
4 files changed, 42 insertions, 3 deletions
diff --git a/src/api.rs b/src/api.rs
index d44c2c4..6c85d76 100644
--- a/src/api.rs
+++ b/src/api.rs
@@ -24,7 +24,12 @@ use reqwest::{
},
Client,
};
-use crate::station::{Station, StationContainer};
+use crate::station::{
+ Station,
+ StationAvailability,
+ StationAvailabilityContainer,
+ StationContainer
+};
use crate::error::ApiResult;
const API_BASE: &'static str = "https://oslobysykkel.no/api/v1";
@@ -65,4 +70,14 @@ impl Api {
let v: StationContainer = serde_json::from_str(&response_json)?;
Ok(v.stations)
}
+
+ /// Fetch availability status for all stations
+ pub fn station_availability(&self) -> ApiResult<Vec<StationAvailability>> {
+ let response_json = self.client.get(&url_for("stations/availability"))
+ .send()?
+ .text()?;
+
+ let v: StationAvailabilityContainer = serde_json::from_str(&response_json)?;
+ Ok(v.stations)
+ }
}
diff --git a/src/lib.rs b/src/lib.rs
index c08c2cb..8bd9aed 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -22,4 +22,4 @@ mod station;
// Re export the important parts of the API
pub use api::Api;
-pub use station::Station;
+pub use station::{Station, StationAvailability};
diff --git a/src/main.rs b/src/main.rs
index 53752c0..014e8b2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -22,10 +22,16 @@ use oslobike;
fn main() {
let api_key = dotenv::var("OSLOBIKE_APIKEY").expect("No API key defined!");
let api = oslobike::Api::new(api_key).unwrap();
+ let stations = api.stations().unwrap();
+ let station_availability = api.station_availability().unwrap();
+
for station in api.stations().unwrap() {
- println!("{:>4} {}: {}",
+ let a = station_availability.iter().find(|s| s.id == station.id).unwrap();
+ println!("{:>4} {:<32}: {:>2} bikes, {:>2} locks of {:>2} total",
station.id,
station.title,
+ a.availability.bikes,
+ a.availability.locks,
station.number_of_locks);
}
}
diff --git a/src/station.rs b/src/station.rs
index 1d52fb4..49f2cd1 100644
--- a/src/station.rs
+++ b/src/station.rs
@@ -30,3 +30,21 @@ pub struct Station {
pub(crate) struct StationContainer {
pub stations: Vec<Station>
}
+
+
+#[derive(Debug, Deserialize)]
+pub struct Availability {
+ pub bikes: i16,
+ pub locks: i16,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct StationAvailability {
+ pub id: usize,
+ pub availability: Availability,
+}
+
+#[derive(Debug, Deserialize)]
+pub(crate) struct StationAvailabilityContainer {
+ pub stations: Vec<StationAvailability>,
+}