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}