Skip to main content

qobuz_api/models/
search.rs

1//! Search result data models.
2
3use serde::{Deserialize, Serialize};
4
5use crate::models::{album::Album, artist::Artist, playlist::Playlist, track::Track};
6
7/// API response wrapper for album search (`/album/search`).
8#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
9pub struct AlbumSearchResponse {
10    /// Album search results.
11    pub albums: ItemSearchResult<Box<Album>>,
12}
13
14/// API response wrapper for artist search (`/artist/search`).
15#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
16pub struct ArtistSearchResponse {
17    /// Artist search results.
18    pub artists: ItemSearchResult<Box<Artist>>,
19}
20
21/// Generic paginated result container.
22#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
23pub struct ItemSearchResult<T> {
24    /// Result items.
25    pub items: Option<Vec<T>>,
26    /// Total matching items.
27    pub total: Option<i32>,
28    /// Items per page.
29    pub limit: Option<i32>,
30    /// Current page offset.
31    pub offset: Option<i32>,
32}
33
34/// API response wrapper for playlist search (`/playlist/search`).
35#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
36pub struct PlaylistSearchResponse {
37    /// Playlist search results.
38    pub playlists: ItemSearchResult<Box<Playlist>>,
39}
40
41/// Grouped search results across content types.
42#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
43pub struct SearchResult {
44    /// Matching albums.
45    pub albums: Option<ItemSearchResult<Box<Album>>>,
46    /// Matching artists.
47    pub artists: Option<ItemSearchResult<Box<Artist>>>,
48    /// Matching tracks.
49    pub tracks: Option<ItemSearchResult<Box<Track>>>,
50    /// Matching playlists.
51    pub playlists: Option<ItemSearchResult<Box<Playlist>>>,
52}
53
54/// API response wrapper for track search (`/track/search`).
55#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
56pub struct TrackSearchResponse {
57    /// Track search results.
58    pub tracks: ItemSearchResult<Box<Track>>,
59}
60
61/// Collection of user's favorited items.
62#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
63pub struct UserFavorites {
64    /// Favorite albums.
65    pub albums: Option<ItemSearchResult<Box<Album>>>,
66    /// Favorite artists.
67    pub artists: Option<ItemSearchResult<Box<Artist>>>,
68    /// Favorite tracks.
69    pub tracks: Option<ItemSearchResult<Box<Track>>>,
70    /// Favorite article IDs.
71    pub article_ids: Option<Vec<i32>>,
72    /// Favorite artist IDs.
73    pub artist_ids: Option<Vec<i32>>,
74    /// Favorite album IDs.
75    pub album_ids: Option<Vec<i32>>,
76    /// Favorite track IDs.
77    pub track_ids: Option<Vec<i32>>,
78}