aboutsummaryrefslogtreecommitdiffstats
path: root/src/api.rs
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2019-02-23 18:48:34 +0100
committerHarald Eilertsen <haraldei@anduin.net>2019-02-23 18:54:48 +0100
commitcdcd645dc455a0778b91b3f7d051dbfb37c8755d (patch)
tree3b132d983cae541fb228235d6ee18b1280a05393 /src/api.rs
parent1b3cb7522118d711d43ca78d0c5d7e71a5afbf46 (diff)
downloadoslobike-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.rs32
1 files changed, 20 insertions, 12 deletions
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 <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)
}
}