use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageResponse {
pub total: u32,
#[serde(rename = "totalHits")]
pub total_hits: u32,
pub hits: Vec<Image>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Image {
pub id: u64,
#[serde(rename = "pageURL")]
pub page_url: String,
#[serde(rename = "type")]
pub image_type: String,
pub tags: String,
#[serde(rename = "previewURL")]
pub preview_url: String,
#[serde(rename = "previewWidth")]
pub preview_width: u32,
#[serde(rename = "previewHeight")]
pub preview_height: u32,
#[serde(rename = "webformatURL")]
pub webformat_url: String,
#[serde(rename = "webformatWidth")]
pub webformat_width: u32,
#[serde(rename = "webformatHeight")]
pub webformat_height: u32,
#[serde(rename = "largeImageURL")]
pub large_image_url: String,
#[serde(rename = "fullHDURL", skip_serializing_if = "Option::is_none")]
pub full_hd_url: Option<String>,
#[serde(rename = "imageURL", skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
#[serde(rename = "vectorURL", skip_serializing_if = "Option::is_none")]
pub vector_url: Option<String>,
#[serde(rename = "imageWidth")]
pub image_width: u32,
#[serde(rename = "imageHeight")]
pub image_height: u32,
#[serde(rename = "imageSize")]
pub image_size: u64,
pub views: u32,
pub downloads: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub collections: Option<u32>,
pub likes: u32,
pub comments: u32,
#[serde(rename = "user_id")]
pub user_id: u64,
pub user: String,
#[serde(rename = "userImageURL")]
pub user_image_url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoResponse {
pub total: u32,
#[serde(rename = "totalHits")]
pub total_hits: u32,
pub hits: Vec<Video>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Video {
pub id: u64,
#[serde(rename = "pageURL")]
pub page_url: String,
#[serde(rename = "type")]
pub video_type: String,
pub tags: String,
pub duration: u32,
pub videos: VideoFiles,
pub views: u32,
pub downloads: u32,
pub likes: u32,
pub comments: u32,
#[serde(rename = "user_id")]
pub user_id: u64,
pub user: String,
#[serde(rename = "userImageURL")]
pub user_image_url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoFiles {
pub large: Option<VideoFile>,
pub medium: Option<VideoFile>,
pub small: Option<VideoFile>,
pub tiny: Option<VideoFile>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoFile {
pub url: String,
pub width: u32,
pub height: u32,
pub size: u64,
pub thumbnail: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ImageType {
All,
Photo,
Illustration,
Vector,
}
impl std::fmt::Display for ImageType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
ImageType::All => "all",
ImageType::Photo => "photo",
ImageType::Illustration => "illustration",
ImageType::Vector => "vector",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum VideoType {
All,
Film,
Animation,
}
impl std::fmt::Display for VideoType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
VideoType::All => "all",
VideoType::Film => "film",
VideoType::Animation => "animation",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Orientation {
All,
Horizontal,
Vertical,
}
impl std::fmt::Display for Orientation {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
Orientation::All => "all",
Orientation::Horizontal => "horizontal",
Orientation::Vertical => "vertical",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Category {
Backgrounds,
Fashion,
Nature,
Science,
Education,
Feelings,
Health,
People,
Religion,
Places,
Animals,
Industry,
Computer,
Food,
Sports,
Transportation,
Travel,
Buildings,
Business,
Music,
}
impl std::fmt::Display for Category {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
Category::Backgrounds => "backgrounds",
Category::Fashion => "fashion",
Category::Nature => "nature",
Category::Science => "science",
Category::Education => "education",
Category::Feelings => "feelings",
Category::Health => "health",
Category::People => "people",
Category::Religion => "religion",
Category::Places => "places",
Category::Animals => "animals",
Category::Industry => "industry",
Category::Computer => "computer",
Category::Food => "food",
Category::Sports => "sports",
Category::Transportation => "transportation",
Category::Travel => "travel",
Category::Buildings => "buildings",
Category::Business => "business",
Category::Music => "music",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Order {
Popular,
Latest,
}
impl std::fmt::Display for Order {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
Order::Popular => "popular",
Order::Latest => "latest",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Language {
Cs,
Da,
De,
En,
Es,
Fr,
Id,
It,
Hu,
Nl,
No,
Pl,
Pt,
Ro,
Sk,
Fi,
Sv,
Tr,
Vi,
Th,
Bg,
Ru,
El,
Ja,
Ko,
Zh,
}
impl std::fmt::Display for Language {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
Language::Cs => "cs",
Language::Da => "da",
Language::De => "de",
Language::En => "en",
Language::Es => "es",
Language::Fr => "fr",
Language::Id => "id",
Language::It => "it",
Language::Hu => "hu",
Language::Nl => "nl",
Language::No => "no",
Language::Pl => "pl",
Language::Pt => "pt",
Language::Ro => "ro",
Language::Sk => "sk",
Language::Fi => "fi",
Language::Sv => "sv",
Language::Tr => "tr",
Language::Vi => "vi",
Language::Th => "th",
Language::Bg => "bg",
Language::Ru => "ru",
Language::El => "el",
Language::Ja => "ja",
Language::Ko => "ko",
Language::Zh => "zh",
};
f.write_str(s)
}
}