1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
use crate::api_parameters::ApiParameters; use crate::category::Category; use crate::format::Format; use crate::limit::Limit; use crate::sort_by::SortBy; #[derive(Clone, Debug)] pub struct ApiParametersBuilder { ranked: bool, limit: Limit, categories: Option<Vec<Category>>, sort_by: SortBy, minimum_seeders: Option<u32>, minimum_leechers: Option<u32>, format: Format, } impl ApiParametersBuilder { /// Ranked torrents are scene releases + rarbg releases + rartv releases. /// /// If ranked is false, the API will show all the torrents. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// /// let apb = ApiParametersBuilder::new().ranked(false); /// ``` pub fn ranked(&mut self, ranked: bool) -> &mut ApiParametersBuilder { self.ranked = ranked; self } /// You can limit the number of torrents to list or search by 25, 50 or 100. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// use rarbg_api::limit::Limit; /// /// let apb = ApiParametersBuilder::new().limit(Limit::OneHundred); /// ``` pub fn limit(&mut self, limit: Limit) -> &mut ApiParametersBuilder { self.limit = limit; self } /// You can filter torrents by categories. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// use rarbg_api::category::Category; /// /// let apb = ApiParametersBuilder::new().categories(vec![Category::TvHdEpisodes, Category::TvUhdEpisodes]); /// ``` pub fn categories(&mut self, categories: Vec<Category>) -> &mut ApiParametersBuilder { self.categories = Some(categories); self } /// You can sort torrents by seeders, leechers or last uploaded. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// use rarbg_api::sort_by::SortBy; /// /// let apb = ApiParametersBuilder::new().sort_by(SortBy::Seeders); /// ``` pub fn sort_by(&mut self, sort_by: SortBy) -> &mut ApiParametersBuilder { self.sort_by = sort_by; self } /// You can specify the minimum number of seeders that a torrent must have. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// /// let apb = ApiParametersBuilder::new().minimum_seeders(42); /// ``` pub fn minimum_seeders(&mut self, minimum_seeders: u32) -> &mut ApiParametersBuilder { self.minimum_seeders = Some(minimum_seeders); self } /// You can specify the minimum number of leechers that a torrent must have. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// /// let apb = ApiParametersBuilder::new().minimum_leechers(42); /// ``` pub fn minimum_leechers(&mut self, minimum_leechers: u32) -> &mut ApiParametersBuilder { self.minimum_leechers = Some(minimum_leechers); self } /// You can choose the format of the response in order to have less or more details on each torrent. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// use rarbg_api::format::Format; /// /// let apb = ApiParametersBuilder::new().format(Format::JsonExtended); /// ``` pub fn format(&mut self, format: Format) -> &mut ApiParametersBuilder { self.format = format; self } /// Create a new ApiParametersBuilder with default options. /// /// Default options are : /// * Only ranked torrents /// * Limit torrents to 25 /// * No categories filtering /// * Sorted by last uploaded /// * No minimum seeders/leechers /// * Json format pub fn new() -> Self { ApiParametersBuilder { ranked: true, limit: Limit::default(), categories: None, sort_by: SortBy::default(), minimum_seeders: None, minimum_leechers: None, format: Format::default(), } } /// Construct an immutable ApiParameters that can be use with RarBgApi. /// /// # Example /// ``` /// use rarbg_api::api_parameters_builder::ApiParametersBuilder; /// use rarbg_api::api_parameters::ApiParameters; /// use rarbg_api::limit::Limit; /// use rarbg_api::sort_by::SortBy; /// use rarbg_api::format::Format; /// use rarbg_api::category::Category; /// /// let ap :ApiParameters = ApiParametersBuilder::new() /// .ranked(false) /// .limit(Limit::OneHundred) /// .categories(vec![Category::TvHdEpisodes, Category::TvUhdEpisodes]) /// .sort_by(SortBy::Seeders) /// .minimum_seeders(42) /// .minimum_leechers(42) /// .format(Format::JsonExtended) /// .build(); /// ``` pub fn build(&self) -> ApiParameters { ApiParameters { ranked: self.ranked, limit: self.limit, categories: self.categories.clone(), sort_by: self.sort_by, minimum_seeders: self.minimum_seeders, minimum_leechers: self.minimum_leechers, format: self.format, } } }