From 91d5ee5a8ed9b3e235019da3f74b60d40dad3792 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Sun, 19 Aug 2018 14:57:06 +0200 Subject: Return error from channel stream API if unauthorized. --- src/lib.rs | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index e02f38a..0026bf0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,11 +3,32 @@ extern crate reqwest; use reqwest::{ header::{Accept, qitem}, mime, + StatusCode, }; use std::io::Read; const ZOTAPI_CHANNEL_STREAM_PATH : &str = "/api/z/1.0/channel/stream"; +#[derive(Debug)] +pub enum Error { + Http(reqwest::Error), + Io(std::io::Error), + Unauthorized, + Unknown, +} + +impl From for Error { + fn from(e: reqwest::Error) -> Error { + Error::Http(e) + } +} + +impl From for Error { + fn from(e: std::io::Error) -> Error { + Error::Io(e) + } +} + pub struct Client { inner: reqwest::Client, base_url: String, @@ -16,17 +37,22 @@ pub struct Client { } impl Client { - pub fn channel_stream(&self) -> String { + pub fn channel_stream(&self) -> Result { let url = self.url(ZOTAPI_CHANNEL_STREAM_PATH); let mut res = self.inner.get(&url) .header(Accept(vec![qitem(mime::APPLICATION_JSON)])) .basic_auth(self.user.clone(), Some(self.pw.clone())) - .send() - .unwrap(); + .send()?; - let mut body = String::new(); - res.read_to_string(&mut body).unwrap(); - body + match res.status() { + StatusCode::Unauthorized => Err(Error::Unauthorized), + StatusCode::Ok => { + let mut body = String::new(); + res.read_to_string(&mut body)?; + Ok(body) + }, + _ => Err(Error::Unknown) + } } fn url(&self, path: &str) -> String { -- cgit v1.2.3