use crate::{User, VideoPicture};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Photo {
pub id: u64,
pub width: u32,
pub height: u32,
pub url: String,
pub photographer: String,
pub photographer_url: Option<String>,
pub photographer_id: Option<u64>,
pub avg_color: Option<String>,
pub src: PhotoSources,
pub alt: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PhotoSources {
pub original: String,
pub large2x: String,
pub large: String,
pub medium: String,
pub small: String,
pub portrait: String,
pub landscape: String,
pub tiny: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Video {
pub id: u64,
pub width: u32,
pub height: u32,
pub url: String,
pub image: String,
pub duration: u32,
pub user: User,
pub video_files: Vec<VideoFile>,
pub video_pictures: Vec<VideoPicture>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoFile {
pub id: u64,
pub quality: String,
pub file_type: String,
pub width: Option<u32>,
pub height: Option<u32>,
pub link: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PhotosPage {
pub page: u32,
pub per_page: u32,
pub photos: Vec<Photo>,
pub total_results: u32,
pub prev_page: Option<String>,
pub next_page: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideosPage {
pub page: u32,
pub per_page: u32,
pub videos: Vec<Video>,
pub total_results: u32,
pub prev_page: Option<String>,
pub next_page: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Collection {
pub id: String,
pub title: String,
pub description: Option<String>,
pub private: bool,
pub media_count: u32,
pub photos_count: u32,
pub videos_count: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionsPage {
pub collections: Vec<Collection>,
pub page: u32,
pub per_page: u32,
pub total_results: u32,
pub next_page: Option<String>,
pub prev_page: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum MediaItem {
#[serde(rename = "Photo")]
Photo(Photo),
#[serde(rename = "Video")]
Video(Video),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MediaPage {
pub id: String,
pub media: Vec<MediaItem>,
pub page: u32,
pub per_page: u32,
pub total_results: u32,
pub next_page: Option<String>,
pub prev_page: Option<String>,
}