/* oslobike - find free bikes in Oslo. Copyright (C) 2019 Harald Eilertsen This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ use reqwest; use crate::station::{Station, StationContainer}; const API_BASE: &'static str = "https://oslobysykkel.no/api/v1"; fn url_for(endpoint: &str) -> String { [API_BASE, endpoint].join("/") } pub struct Api { client: reqwest::Client, } impl Api { pub fn new(api_key: String) -> Api { let mut hdrs = reqwest::header::HeaderMap::new(); hdrs.insert("client-identifier", reqwest::header::HeaderValue::from_str(&api_key).unwrap()); let client = reqwest::Client::builder() .default_headers(hdrs) .build().unwrap(); Api { client } } pub fn stations(&self) -> Vec { let response_json = self.client.get(&url_for("stations")) .send().unwrap() .text().unwrap(); let v: StationContainer = serde_json::from_str(&response_json).unwrap(); v.stations } }