From cdcd645dc455a0778b91b3f7d051dbfb37c8755d Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Sat, 23 Feb 2019 18:48:34 +0100 Subject: 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. --- src/api.rs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'src/api.rs') diff --git a/src/api.rs b/src/api.rs index c31ea8f..826eaf2 100644 --- a/src/api.rs +++ b/src/api.rs @@ -16,8 +16,16 @@ along with this program. If not, see . */ -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 { + 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 { + pub fn stations(&self) -> ApiResult> { 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) } } -- cgit v1.2.3