mangadex_api/v5/
search.rs

1//! Search endpoint handler.
2//!
3//! This is a convenience builder for searching various categories.
4
5use crate::v5::author::get::ListAuthorBuilder;
6use crate::v5::chapter::get::ListChapterBuilder;
7use crate::v5::cover::get::ListCoverBuilder;
8use crate::v5::manga::get::ListMangaBuilder;
9use crate::v5::scanlation_group::get::ListGroupBuilder;
10use crate::HttpClientRef;
11
12/// Search endpoint handler builder.
13#[derive(Debug)]
14pub struct SearchBuilder {
15    http_client: HttpClientRef,
16}
17
18impl SearchBuilder {
19    #[doc(hidden)]
20    pub(crate) fn new(http_client: HttpClientRef) -> Self {
21        Self { http_client }
22    }
23
24    /// Search for authors.
25    ///
26    /// <https://api.mangadex.org/swagger.html#/Author/get-author>
27    ///
28    /// # Examples
29    ///
30    /// ```rust
31    /// use mangadex_api::v5::MangaDexClient;
32    ///
33    /// # async fn run() -> anyhow::Result<()> {
34    /// let client = MangaDexClient::default();
35    ///
36    /// let res = client
37    ///     .search()
38    ///     .author()
39    ///     .name("carlo zen")
40    ///     .send()
41    ///     .await?;
42    ///
43    /// println!("results: {:?}", res);
44    /// # Ok(())
45    /// # }
46    /// ```
47    pub fn author(&self) -> ListAuthorBuilder {
48        ListAuthorBuilder::default().http_client(self.http_client.clone())
49    }
50
51    /// Search for chapters.
52    ///
53    /// <https://api.mangadex.org/swagger.html#/Chapter/get-chapter>
54    ///
55    /// # Examples
56    ///
57    /// ```rust
58    /// use mangadex_api::v5::MangaDexClient;
59    ///
60    /// # async fn run() -> anyhow::Result<()> {
61    /// let client = MangaDexClient::default();
62    ///
63    /// let res = client
64    ///     .search()
65    ///     .chapter()
66    ///     .title("summoning")
67    ///     .send()
68    ///     .await?;
69    ///
70    /// println!("results: {:?}", res);
71    /// # Ok(())
72    /// # }
73    /// ```
74    pub fn chapter(&self) -> ListChapterBuilder {
75        ListChapterBuilder::default().http_client(self.http_client.clone())
76    }
77
78    /// Search for cover art.
79    ///
80    /// <https://api.mangadex.org/swagger.html#/Cover/get-cover>
81    ///
82    /// # Examples
83    ///
84    /// ```rust
85    /// use mangadex_api::v5::MangaDexClient;
86    ///
87    /// # async fn run() -> anyhow::Result<()> {
88    /// let client = MangaDexClient::default();
89    ///
90    /// let res = client
91    ///     .search()
92    ///     .cover()
93    ///     .send()
94    ///     .await?;
95    ///
96    /// println!("results: {:?}", res);
97    /// # Ok(())
98    /// # }
99    /// ```
100    pub fn cover(&self) -> ListCoverBuilder {
101        ListCoverBuilder::default().http_client(self.http_client.clone())
102    }
103
104    /// Search for manga.
105    ///
106    /// <https://api.mangadex.org/swagger.html#/Manga/get-search-manga>
107    ///
108    /// # Examples
109    ///
110    /// ```rust
111    /// use mangadex_api::v5::MangaDexClient;
112    ///
113    /// # async fn run() -> anyhow::Result<()> {
114    /// let client = MangaDexClient::default();
115    ///
116    /// let res = client
117    ///     .search()
118    ///     .manga()
119    ///     .title("official test manga")
120    ///     .send()
121    ///     .await?;
122    ///
123    /// println!("results: {:?}", res);
124    /// # Ok(())
125    /// # }
126    /// ```
127    pub fn manga(&self) -> ListMangaBuilder {
128        ListMangaBuilder::default().http_client(self.http_client.clone())
129    }
130
131    /// Search for scanlation groups.
132    ///
133    /// <https://api.mangadex.org/swagger.html#/ScanlationGroup/get-search-group>
134    ///
135    /// # Examples
136    ///
137    /// ```rust
138    /// use mangadex_api::v5::MangaDexClient;
139    ///
140    /// # async fn run() -> anyhow::Result<()> {
141    /// let client = MangaDexClient::default();
142    ///
143    /// let res = client
144    ///     .search()
145    ///     .scanlation_group()
146    ///     .name("mangadex")
147    ///     .send()
148    ///     .await?;
149    ///
150    /// println!("results: {:?}", res);
151    /// # Ok(())
152    /// # }
153    /// ```
154    pub fn scanlation_group(&self) -> ListGroupBuilder {
155        ListGroupBuilder::default().http_client(self.http_client.clone())
156    }
157}