diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2019-12-12 01:25:28 +0100 | 
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2019-12-12 01:25:28 +0100 | 
| commit | a6afa81d1d9f2dd7d10fe7c0555ae8a8a6d84867 (patch) | |
| tree | f82d523b2c3381d58af1283be6a01321fb4b0fa2 /src/api | |
| parent | 5350b4ece04082bf8a0a127c230669c4de9b7cc4 (diff) | |
| download | kondou-a6afa81d1d9f2dd7d10fe7c0555ae8a8a6d84867.tar.gz kondou-a6afa81d1d9f2dd7d10fe7c0555ae8a8a6d84867.tar.bz2 kondou-a6afa81d1d9f2dd7d10fe7c0555ae8a8a6d84867.zip  | |
use helper traits for better code
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/mod.rs | 21 | 
1 files changed, 20 insertions, 1 deletions
diff --git a/src/api/mod.rs b/src/api/mod.rs index 9c771fd..c33e6ba 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -16,7 +16,7 @@ pub use self::{  use image::DynamicImage;  use itertools::Itertools; -use reqwest::{Client, Url}; +use reqwest::{Client, StatusCode, Url};  use serde::{de::DeserializeOwned, Serialize};  use std::path::Path; @@ -28,6 +28,7 @@ const BASE_URL: &str = "https://api.guildwars2.com/v2/";  quick_error! {      #[derive(Debug)]      pub enum ApiError { +        ItemNotFound {}          SerializationError(err: serde_json::Error) {              cause(err)              from() @@ -47,6 +48,23 @@ quick_error! {      }  } +trait ApiResponse +where +    Self: Sized, +{ +    fn ensure_found(self) -> Result<Self, ApiError>; +} + +impl ApiResponse for reqwest::Response { +    fn ensure_found(self) -> Result<Self, ApiError> { +        if self.status() == StatusCode::PARTIAL_CONTENT || self.status() == StatusCode::NOT_FOUND { +            Err(ApiError::ItemNotFound) +        } else { +            Ok(self) +        } +    } +} +  /// Trait for API objects that have an ID.  ///  /// This is used by [`Api`](struct.Api.html) to properly retrieve and cache objects. @@ -143,6 +161,7 @@ impl Api {              .get(url)              .query(&[("ids", api_arg)])              .send()? +            .ensure_found()?              .json()?;          for result in &resp {              let cache_path = format!("{}{}", cache_prefix, result.get_id().to_string());  | 
