digital_blasphemy_client 0.1.7

A client for the Digital Blasphemy API
Documentation
use crate::{model::Operator, model::common_response::Endpoints, model::wallpaper::Wallpaper};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
pub struct GetWallpaperResponse {
    pub db_core: GetWallpaperDBCore,
    pub wallpaper: Option<Wallpaper>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct GetWallpaperDBCore {
    pub timestamp: i64,
    pub endpoints: Endpoints,
    pub request: GetWallpaperDBCoreRequest,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct GetWallpaperDBCoreRequest {
    pub params: GetWallpaperResponseParams,
    pub query: GetWallpaperResponseQuery,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct GetWallpaperResponseParams {
    pub wallpaper_id: i64,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct GetWallpaperResponseQuery {
    pub filter_res_height: i64,
    pub filter_res_operator: Operator,
    pub filter_res_operator_height: Option<Operator>,
    pub filter_res_operator_width: Option<Operator>,
    pub filter_res_width: i64,
    pub show_comments: bool,
    pub show_pickle_jar: bool,
    pub show_resolutions: bool,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GetWallpaperRequest {
    pub wallpaper_id: u16,
    pub filter_res_height: i64,
    pub filter_res_operator: Operator,
    pub filter_res_operator_height: Operator,
    pub filter_res_operator_width: Operator,
    pub filter_res_width: i64,
    pub show_comments: bool,
    pub show_pickle_jar: bool,
    pub show_resolutions: bool,
}

impl GetWallpaperRequest {
    pub fn builder() -> GetWallpaperRequestBuilder {
        GetWallpaperRequestBuilder::new()
    }
}

#[derive(Clone)]
pub struct GetWallpaperRequestBuilder {
    get_wallpaper_request: GetWallpaperRequest,
}

impl GetWallpaperRequestBuilder {
    pub(crate) fn new() -> Self {
        GetWallpaperRequestBuilder {
            get_wallpaper_request: GetWallpaperRequest {
                wallpaper_id: 0,
                filter_res_height: 0,
                filter_res_operator: Operator::GreaterThanOrEqual,
                filter_res_operator_height: Operator::GreaterThanOrEqual,
                filter_res_operator_width: Operator::GreaterThanOrEqual,
                filter_res_width: 0,
                show_comments: false,
                show_pickle_jar: false,
                show_resolutions: true,
            },
        }
    }

    pub fn build(self) -> GetWallpaperRequest {
        if self.get_wallpaper_request.wallpaper_id == 0 {
            panic!("Wallpaper ID must be provided.");
        }
        self.get_wallpaper_request
    }

    pub fn wallpaper_id(mut self, wallpaper_id: u16) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.wallpaper_id = wallpaper_id;
        self
    }

    pub fn filter_res_height(mut self, filter_res_height: i64) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.filter_res_height = filter_res_height;
        self
    }

    pub fn filter_res_operator(
        mut self,
        filter_res_operator: Operator,
    ) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.filter_res_operator = filter_res_operator;
        self
    }

    pub fn filter_res_operator_height(
        mut self,
        filter_res_operator_height: Operator,
    ) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.filter_res_operator_height = filter_res_operator_height;
        self
    }

    pub fn filter_res_operator_width(
        mut self,
        filter_res_operator_width: Operator,
    ) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.filter_res_operator_width = filter_res_operator_width;
        self
    }

    pub fn filter_res_width(mut self, filter_res_width: i64) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.filter_res_width = filter_res_width;
        self
    }

    pub fn show_comments(mut self, show_comments: bool) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.show_comments = show_comments;
        self
    }

    pub fn show_pickle_jar(mut self, show_pickle_jar: bool) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.show_pickle_jar = show_pickle_jar;
        self
    }

    pub fn show_resolutions(mut self, show_resolutions: bool) -> GetWallpaperRequestBuilder {
        self.get_wallpaper_request.show_resolutions = show_resolutions;
        self
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    mod get_wallpaper_request_builder_test {
        use super::*;

        #[test]
        #[should_panic(expected = "Wallpaper ID must be provided.")]
        fn test_get_wallpaper_request_builder_rejects_build_when_wallpaper_id_not_provided() {
            GetWallpaperRequest::builder().build();
        }

        #[test]
        fn test_get_wallpaper_request_builder_sets_defaults() {
            let get_wallpaper_request = GetWallpaperRequest::builder().wallpaper_id(1).build();

            assert_eq!(get_wallpaper_request.wallpaper_id, 1);
            assert_eq!(get_wallpaper_request.filter_res_height, 0);
            assert_eq!(
                get_wallpaper_request.filter_res_operator,
                Operator::GreaterThanOrEqual
            );
            assert_eq!(
                get_wallpaper_request.filter_res_operator_height,
                Operator::GreaterThanOrEqual
            );
            assert_eq!(
                get_wallpaper_request.filter_res_operator_width,
                Operator::GreaterThanOrEqual
            );
            assert_eq!(get_wallpaper_request.filter_res_width, 0);
            assert!(!get_wallpaper_request.show_comments);
            assert!(!get_wallpaper_request.show_pickle_jar);
            assert!(get_wallpaper_request.show_resolutions);
        }

        #[test]
        fn test_get_wallpaper_request_builder_overrides_all_defaults() {
            let get_wallpaper_request = GetWallpaperRequest::builder()
                .wallpaper_id(1)
                .filter_res_height(100)
                .filter_res_operator(Operator::LessThan)
                .filter_res_operator_height(Operator::LessThan)
                .filter_res_operator_width(Operator::LessThan)
                .filter_res_width(200)
                .show_comments(true)
                .show_pickle_jar(true)
                .show_resolutions(false)
                .build();

            assert_eq!(get_wallpaper_request.wallpaper_id, 1);
            assert_eq!(get_wallpaper_request.filter_res_height, 100);
            assert_eq!(
                get_wallpaper_request.filter_res_operator,
                Operator::LessThan
            );
            assert_eq!(
                get_wallpaper_request.filter_res_operator_height,
                Operator::LessThan
            );
            assert_eq!(
                get_wallpaper_request.filter_res_operator_width,
                Operator::LessThan
            );
            assert_eq!(get_wallpaper_request.filter_res_width, 200);
            assert!(get_wallpaper_request.show_comments);
            assert!(get_wallpaper_request.show_pickle_jar);
            assert!(!get_wallpaper_request.show_resolutions);
        }
    }
}