From ecb5855e75a9e9b52192183240aff09540c05aad Mon Sep 17 00:00:00 2001 From: MedzikUser Date: Mon, 5 Sep 2022 21:02:27 +0200 Subject: [PATCH] feat: add get_album function (#76) Co-authored-by: Andre Julius --- src/imgur/album_type.rs | 62 +++++++++++++++++++++++++++++++++ src/imgur/mod.rs | 17 +++++++++ src/imgur/requests/get_album.rs | 24 +++++++++++++ src/imgur/requests/mod.rs | 2 ++ src/lib.rs | 2 -- 5 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 src/imgur/album_type.rs create mode 100644 src/imgur/requests/get_album.rs diff --git a/src/imgur/album_type.rs b/src/imgur/album_type.rs new file mode 100644 index 0000000..7d2023f --- /dev/null +++ b/src/imgur/album_type.rs @@ -0,0 +1,62 @@ +use serde::{Deserialize, Serialize}; + +use crate::ImageInfoData; + +/// Album Info Response +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] +pub struct AlbumInfo { + /// Image Data + pub data: AlbumInfoData, + /// Request processed success or not. + pub success: bool, + /// HTTP status code from API request. + pub status: i32, +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] +pub struct AlbumInfoData { + /// Album ID + pub id: String, + /// Title of the album + pub title: String, + /// Description of the album + pub description: Option, + pub datetime: i64, + pub cover: String, + pub cover_edited: Option, + pub cover_width: i64, + pub cover_height: i64, + pub account_url: Option, + pub account_id: Option, + pub privacy: String, + pub layout: String, + pub views: i64, + /// Album link + pub link: String, + pub favorite: bool, + pub nsfw: bool, + pub section: Option, + pub images_count: i64, + pub in_gallery: bool, + pub is_ad: bool, + pub include_album_ads: bool, + pub is_album: bool, + pub images: Vec, + pub ad_config: AdConfig, +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] +pub struct AdConfig { + #[serde(rename = "safeFlags")] + pub safe_flags: Vec, + #[serde(rename = "highRiskFlags")] + pub high_risk_flags: Vec, + #[serde(rename = "unsafeFlags")] + pub unsafe_flags: Vec, + #[serde(rename = "wallUnsafeFlags")] + pub wall_unsafe_flags: Vec, + #[serde(rename = "showsAds")] + pub shows_ads: bool, + #[serde(rename = "showAdLevel")] + pub show_ad_level: i64, +} diff --git a/src/imgur/mod.rs b/src/imgur/mod.rs index e1aeb9e..29d3daf 100644 --- a/src/imgur/mod.rs +++ b/src/imgur/mod.rs @@ -1,8 +1,10 @@ +mod album_type; mod client; mod image_type; mod requests; mod send_api_request; +pub use album_type::*; pub(crate) use client::api_url; pub use client::ImgurClient; pub use image_type::*; @@ -97,4 +99,19 @@ impl ImgurClient { pub async fn image_info(&self, id: &str) -> Result { requests::get_image(self, id).await } + + /// Get album info from a Imgur + /// ``` + /// use imgurs::ImgurClient; + /// + /// #[tokio::main] + /// async fn main() { + /// let client = ImgurClient::new("3e3ce0d7ac14d56"); + /// + /// client.album_info("lFaGr1x").await.expect("delete album"); + /// } + /// ``` + pub async fn album_info(&self, id: &str) -> Result { + requests::get_album(self, id).await + } } diff --git a/src/imgur/requests/get_album.rs b/src/imgur/requests/get_album.rs new file mode 100644 index 0000000..070a42b --- /dev/null +++ b/src/imgur/requests/get_album.rs @@ -0,0 +1,24 @@ +use reqwest::Method; + +use crate::{api_url, send_api_request, AlbumInfo, Error, ImgurClient, Result}; + +pub async fn get_album(client: &ImgurClient, album: &str) -> Result { + // get imgur api url + let uri = api_url!(format!("album/{album}")); + + // send request to imgur api + let res = send_api_request(client, Method::GET, uri, None).await?; + + // get response http code + let status = res.status(); + + // check if an error has occurred + if status.is_client_error() || status.is_server_error() { + let body = res.text().await?; + + return Err(Error::ApiError(status.as_u16(), body)); + } + + // return `ImageInfo` + Ok(res.json().await?) +} diff --git a/src/imgur/requests/mod.rs b/src/imgur/requests/mod.rs index 2430981..c254d74 100644 --- a/src/imgur/requests/mod.rs +++ b/src/imgur/requests/mod.rs @@ -1,9 +1,11 @@ mod delete_image; +mod get_album; mod get_image; mod rate_limit; mod upload_image; pub use delete_image::*; +pub use get_album::*; pub use get_image::*; pub use rate_limit::*; pub use upload_image::*; diff --git a/src/lib.rs b/src/lib.rs index 3cc6eb9..216abc0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -89,8 +89,6 @@ //! } //! ``` -#![warn(missing_docs)] - mod error; pub use error::*;