use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct LoopingAllOf {
#[serde(flatten)]
pub image: Image,
#[serde(flatten)]
pub value: serde_json::Value,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Images {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub downsized: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub downsized_large: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub downsized_medium: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub downsized_small: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub downsized_still: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_height: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_height_downsampled: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_height_small: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_height_small_still: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_height_still: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_width: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_width_downsampled: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_width_small: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_width_small_still: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_width_still: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub looping: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub original: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub original_still: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub preview: Option<LoopingAllOf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub preview_gif: Option<LoopingAllOf>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub enum Type {
#[serde(rename = "gif")]
Gif,
#[serde(other)]
FallthroughString,
}
impl std::fmt::Display for Type {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Type::Gif => "gif",
Type::FallthroughString => "*",
}
.fmt(f)
}
}
impl Default for Type {
fn default() -> Type {
Type::Gif
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Gif {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub bitly_url: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub content_url: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub create_datetime: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub embded_url: String,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub featured_tags: Vec<String>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub images: Option<Images>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub import_datetime: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub rating: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub slug: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub source: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub source_post_url: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub source_tld: String,
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub tags: Vec<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub trending_datetime: Option<chrono::DateTime<chrono::Utc>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
pub type_: Option<Type>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::utils::date_time_format::deserialize"
)]
pub update_datetime: Option<chrono::DateTime<chrono::Utc>>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub url: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub user: Option<User>,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub username: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Image {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub frames: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub height: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize",
rename = "mp4"
)]
pub mp_4: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize",
rename = "mp4_size"
)]
pub mp_4_size: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub size: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub url: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub webp: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub webp_size: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub width: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Meta {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub msg: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub response_id: String,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_i64",
deserialize_with = "crate::utils::deserialize_null_i64::deserialize"
)]
pub status: i64,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct Pagination {
#[serde(
default,
skip_serializing_if = "crate::utils::zero_i64",
deserialize_with = "crate::utils::deserialize_null_i64::deserialize"
)]
pub count: i64,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_i64",
deserialize_with = "crate::utils::deserialize_null_i64::deserialize"
)]
pub offset: i64,
#[serde(
default,
skip_serializing_if = "crate::utils::zero_i64",
deserialize_with = "crate::utils::deserialize_null_i64::deserialize"
)]
pub total_count: i64,
}
#[derive(Serialize, Default, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct User {
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub avatar_url: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub banner_url: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub display_name: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub profile_url: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub twitter: String,
#[serde(
default,
skip_serializing_if = "String::is_empty",
deserialize_with = "crate::utils::deserialize_null_string::deserialize"
)]
pub username: String,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct GetGifsByResponse {
#[serde(
default,
skip_serializing_if = "Vec::is_empty",
deserialize_with = "crate::utils::deserialize_null_vector::deserialize"
)]
pub data: Vec<Gif>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub meta: Option<Meta>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pagination: Option<Pagination>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
pub struct RandomGifResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data: Option<Gif>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub meta: Option<Meta>,
}