diff options
author | Harald Eilertsen <haraldei@anduin.net> | 2019-02-23 18:48:34 +0100 |
---|---|---|
committer | Harald Eilertsen <haraldei@anduin.net> | 2019-02-23 18:54:48 +0100 |
commit | cdcd645dc455a0778b91b3f7d051dbfb37c8755d (patch) | |
tree | 3b132d983cae541fb228235d6ee18b1280a05393 /src/api.rs | |
parent | 1b3cb7522118d711d43ca78d0c5d7e71a5afbf46 (diff) | |
download | oslobike-cdcd645dc455a0778b91b3f7d051dbfb37c8755d.tar.gz oslobike-cdcd645dc455a0778b91b3f7d051dbfb37c8755d.tar.bz2 oslobike-cdcd645dc455a0778b91b3f7d051dbfb37c8755d.zip |
Propagate errors from api calls to caller.
This defines an ApiResult type, and a corresponding Error type which
wraps any errors that can be returned from underlying libs. Prevents
panics due to unwraps in the core api.
The main app still unwraps, and will panic on any error, though. Fix
that later.
Diffstat (limited to 'src/api.rs')
-rw-r--r-- | src/api.rs | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -16,8 +16,16 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -use reqwest; +use reqwest::{ + self, + header::{ + HeaderMap, + HeaderValue, + }, + Client, +}; use crate::station::{Station, StationContainer}; +use crate::error::ApiResult; const API_BASE: &'static str = "https://oslobysykkel.no/api/v1"; @@ -30,23 +38,23 @@ pub struct Api { } 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()); + pub fn new(api_key: String) -> ApiResult<Api> { + let mut hdrs = HeaderMap::new(); + hdrs.insert("client-identifier", HeaderValue::from_str(&api_key)?); - let client = reqwest::Client::builder() + let client = Client::builder() .default_headers(hdrs) - .build().unwrap(); + .build()?; - Api { client } + Ok(Api { client }) } - pub fn stations(&self) -> Vec<Station> { + pub fn stations(&self) -> ApiResult<Vec<Station>> { let response_json = self.client.get(&url_for("stations")) - .send().unwrap() - .text().unwrap(); + .send()? + .text()?; - let v: StationContainer = serde_json::from_str(&response_json).unwrap(); - v.stations + let v: StationContainer = serde_json::from_str(&response_json)?; + Ok(v.stations) } } |