use serde::{Deserialize, Serialize};
use crate::models::{
Album, Article, Artist, MostPopular as MostPopularModel, Playlist, Story, Track, User,
};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ItemSearchResult<T> {
#[serde(rename = "items")]
pub items: Option<Vec<T>>,
#[serde(rename = "total")]
pub total: Option<i32>,
#[serde(rename = "limit")]
pub limit: Option<i32>,
#[serde(rename = "offset")]
pub offset: Option<i32>,
#[serde(rename = "has_more")]
pub has_more: Option<bool>,
}
impl<T> Default for ItemSearchResult<T> {
fn default() -> Self {
ItemSearchResult {
items: None,
total: None,
limit: None,
offset: None,
has_more: None,
}
}
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct SearchResult {
#[serde(rename = "albums")]
pub albums: Option<ItemSearchResult<Album>>,
#[serde(rename = "articles")]
pub articles: Option<ItemSearchResult<Article>>,
#[serde(rename = "artists")]
pub artists: Option<ItemSearchResult<Artist>>,
#[serde(rename = "focus")]
pub focus: Option<ItemSearchResult<Story>>,
#[serde(rename = "most_popular")]
pub most_popular: Option<ItemSearchResult<MostPopularModel>>,
#[serde(rename = "playlists")]
pub playlists: Option<ItemSearchResult<Playlist>>,
#[serde(rename = "query")]
pub query: Option<String>,
#[serde(rename = "stories")]
pub stories: Option<ItemSearchResult<Story>>,
#[serde(rename = "tracks")]
pub tracks: Option<ItemSearchResult<Track>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct MostPopular {
#[serde(rename = "content")]
pub content: MostPopularContent,
#[serde(rename = "type")]
pub type_field: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct MostPopularContent {
#[serde(rename = "type")]
pub type_field: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct UserFavorites {
#[serde(rename = "user")]
pub user: Option<User>,
#[serde(rename = "albums")]
pub albums: Option<ItemSearchResult<Album>>,
#[serde(rename = "artists")]
pub artists: Option<ItemSearchResult<Artist>>,
#[serde(rename = "tracks")]
pub tracks: Option<ItemSearchResult<Track>>,
#[serde(rename = "articles")]
pub articles: Option<ItemSearchResult<Article>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct UserFavoritesIds {
#[serde(rename = "albums")]
pub albums: Option<Vec<String>>,
#[serde(rename = "articles")]
pub articles: Option<Vec<i64>>,
#[serde(rename = "artists")]
pub artists: Option<Vec<i32>>,
#[serde(rename = "tracks")]
pub tracks: Option<Vec<i32>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct AlbumsSameArtist {
#[serde(rename = "albums")]
pub albums: Option<ItemSearchResult<Box<Album>>>,
#[serde(rename = "artist")]
pub artist: Option<Box<Artist>>,
}