kodik_api/lib.rs
1//! # 🚀 Getting started
2//!
3//! ### Search Releases
4//!
5//! ```
6//! use kodik_api::Client;
7//! use kodik_api::search::SearchQuery;
8//!
9//! #[tokio::main]
10//! async fn main() {
11//! let api_key = std::env::var("KODIK_API_KEY").expect("KODIK_API_KEY is not set");
12//!
13//! let client = Client::new(api_key);
14//!
15//! let search_response = SearchQuery::new()
16//! .with_title("Cyberpunk: Edgerunners")
17//! .with_limit(1)
18//! .execute(&client)
19//! .await
20//! .unwrap();
21//!
22//! println!("search response = {search_response:#?}");
23//! }
24//! ```
25//!
26//! ### List Releases
27//!
28//! ```
29//! use futures_util::{pin_mut, StreamExt};
30//!
31//! use kodik_api::Client;
32//! use kodik_api::list::ListQuery;
33//! use kodik_api::types::ReleaseType;
34//!
35//! #[tokio::main]
36//! async fn main() {
37//! let api_key = std::env::var("KODIK_API_KEY").expect("KODIK_API_KEY is not set");
38//!
39//! let client = Client::new(api_key);
40//!
41//! let stream = ListQuery::new()
42//! .with_limit(100)
43//! .with_types(&[ReleaseType::Anime, ReleaseType::AnimeSerial])
44//! .stream(&client);
45//!
46//! pin_mut!(stream);
47//!
48//! while let Some(response) = stream.next().await {
49//! match response {
50//! Ok(response) => {
51//! dbg!(response.total);
52//! dbg!(response.results);
53//! }
54//! Err(err) => {
55//! match err {
56//! // Kodik error
57//! kodik_api::error::Error::KodikError(message) => {
58//! panic!("kodik error = {}", message);
59//! }
60//! // Reqwest error
61//! kodik_api::error::Error::HttpError(_err) => {
62//! // Another try
63//! continue;
64//! }
65//! _ => {
66//! panic!("Unknown error")
67//! }
68//! }
69//! }
70//! }
71//! }
72//! }
73//! ```
74//!
75//! ### List Translations
76//!
77//! ```
78//! use kodik_api::Client;
79//! use kodik_api::translations::TranslationQuery;
80//!
81//! #[tokio::main]
82//! async fn main() {
83//! let api_key = std::env::var("KODIK_API_KEY").expect("KODIK_API_KEY is not set");
84//!
85//! let client = Client::new(api_key);
86//!
87//! let translations_response = TranslationQuery::new()
88//! .execute(&client)
89//! .await
90//! .unwrap();
91//!
92//! println!("translations response = {translations_response:#?}");
93//! }
94//! ```
95//!
96//! ### List Genres
97//!
98//! ```
99//! use kodik_api::Client;
100//! use kodik_api::genres::GenreQuery;
101//!
102//! #[tokio::main]
103//! async fn main() {
104//! let api_key = std::env::var("KODIK_API_KEY").expect("KODIK_API_KEY is not set");
105//!
106//! let client = Client::new(api_key);
107//!
108//! let genres_response = GenreQuery::new()
109//! .execute(&client)
110//! .await
111//! .unwrap();
112//!
113//! println!("genres response = {genres_response:#?}");
114//! }
115//! ```
116//!
117//! ### List Countries
118//!
119//! ```
120//! use kodik_api::Client;
121//! use kodik_api::countries::CountryQuery;
122//!
123//! #[tokio::main]
124//! async fn main() {
125//! let api_key = std::env::var("KODIK_API_KEY").expect("KODIK_API_KEY is not set");
126//!
127//! let client = Client::new(api_key);
128//!
129//! let countries_response = CountryQuery::new()
130//! .execute(&client)
131//! .await
132//! .unwrap();
133//!
134//! println!("countries response = {countries_response:#?}");
135//! }
136//! ```
137//!
138//! ### List Years
139//!
140//! ```
141//! use kodik_api::Client;
142//! use kodik_api::years::YearQuery;
143//!
144//! #[tokio::main]
145//! async fn main() {
146//! let api_key = std::env::var("KODIK_API_KEY").expect("KODIK_API_KEY is not set");
147//!
148//! let client = Client::new(api_key);
149//!
150//! let years_response = YearQuery::new()
151//! .execute(&client)
152//! .await
153//! .unwrap();
154//!
155//! println!("years response = {years_response:#?}");
156//! }
157//! ```
158//!
159//! ### List Qualities
160//!
161//! ```
162//! use kodik_api::Client;
163//! use kodik_api::qualities::QualityQuery;
164//!
165//! #[tokio::main]
166//! async fn main() {
167//! let api_key = std::env::var("KODIK_API_KEY").expect("KODIK_API_KEY is not set");
168//!
169//! let client = Client::new(api_key);
170//!
171//! let qualities_response = QualityQuery::new()
172//! .execute(&client)
173//! .await
174//! .unwrap();
175//!
176//! println!("qualities response = {qualities_response:#?}");
177//! }
178//! ```
179
180/// Module containing the [`client::Client`] struct.
181pub mod client;
182
183/// Module containing the [`errors::Error`] struct.
184pub mod error;
185
186/// Module representing the [search releases] structures.
187pub mod search;
188
189/// Module representing the [list releases] structures.
190pub mod list;
191
192/// Module representing the [list translations] structures.
193pub mod translations;
194
195/// Module representing the [list years] structures.
196pub mod years;
197
198/// Module representing the [list countries] structures.
199pub mod countries;
200
201/// Module representing the [list genres] structures.
202pub mod genres;
203
204/// Module representing the [list qualities] structures.
205pub mod qualities;
206
207/// Module representing the [types] structures.
208pub mod types;
209
210/// The module contains structures for unifying the API seasons response.
211pub mod unify_seasons;
212
213pub use client::*;
214
215mod util;