use core::fmt;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GelbooruPost {
pub id: u32,
pub created_at: String,
pub score: u32,
pub width: u32,
pub height: u32,
pub md5: String,
pub file_url: String,
pub tags: String,
pub image: String,
pub source: String,
pub rating: GelbooruRating,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct GelbooruResponse {
#[serde(rename = "post")]
pub posts: Vec<GelbooruPost>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "lowercase")]
pub enum GelbooruRating {
Explicit,
Questionable,
Safe,
Sensitive,
General,
}
impl From<GelbooruRating> for String {
fn from(rating: GelbooruRating) -> String {
rating.to_string()
}
}
impl fmt::Display for GelbooruRating {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let lovercase_tag = format!("{:?}", self).to_lowercase();
write!(f, "{lovercase_tag}")
}
}