Skip to main content

tmdb_rs/endpoints/
search.rs

1use serde::Deserialize;
2
3use crate::endpoints::collection::CollectionShort;
4use crate::endpoints::company::CompanyShort;
5use crate::endpoints::keyword::Keyword;
6use crate::endpoints::movie::MovieShort;
7use crate::endpoints::person::PersonShort;
8use crate::endpoints::tv::TvShort;
9use crate::{CountryCode, Language, Page};
10
11/// one multi-search hit, discriminated by TMDB's `media_type`
12#[derive(Debug, Clone, Deserialize)]
13#[serde(tag = "media_type", rename_all = "snake_case")]
14pub enum MultiResult {
15    Movie(MovieShort),
16    Tv(TvShort),
17    Person(PersonShort),
18}
19
20endpoint! {
21    /// search for movies by title
22    search_movies(query: &str): GET "/search/movie" => Page<MovieShort> {
23        params {
24            language: Language,
25            page: u32,
26            include_adult: bool,
27            region: CountryCode,
28            year: u32,
29            primary_release_year: u32,
30        }
31    }
32}
33
34endpoint! {
35    /// search for series by name
36    search_tv(query: &str): GET "/search/tv" => Page<TvShort> {
37        params {
38            language: Language,
39            page: u32,
40            include_adult: bool,
41            year: u32,
42            first_air_date_year: u32,
43        }
44    }
45}
46
47endpoint! {
48    /// search movies, series and people in one call
49    search(query: &str): GET "/search/multi" => Page<MultiResult> {
50        params { language: Language, page: u32, include_adult: bool }
51    }
52}
53
54endpoint! {
55    /// search for people by name
56    search_people(query: &str): GET "/search/person" => Page<PersonShort> {
57        params { language: Language, page: u32, include_adult: bool }
58    }
59}
60
61endpoint! {
62    /// search for collections by name
63    search_collections(query: &str): GET "/search/collection" => Page<CollectionShort> {
64        params { language: Language, page: u32, include_adult: bool }
65    }
66}
67
68endpoint! {
69    /// search for keywords by name
70    search_keywords(query: &str): GET "/search/keyword" => Page<Keyword> {
71        params { page: u32 }
72    }
73}
74
75endpoint! {
76    /// search for companies by name
77    search_companies(query: &str): GET "/search/company" => Page<CompanyShort> {
78        params { page: u32 }
79    }
80}