diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 38 |
1 files changed, 32 insertions, 6 deletions
@@ -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<reqwest::Error> for Error { + fn from(e: reqwest::Error) -> Error { + Error::Http(e) + } +} + +impl From<std::io::Error> 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<String, Error> { 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 { |