use core::fmt;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Rule34Post {
pub id: u32,
pub score: i32,
pub width: u32,
pub height: u32,
pub file_url: String,
pub preview_url: String,
pub sample_url: String,
pub tags: String,
pub rating: Rule34Rating,
#[serde(default)]
pub source: String,
#[serde(default)]
pub has_notes: bool,
#[serde(default)]
pub comment_count: u32,
#[serde(default)]
pub owner: String,
#[serde(default)]
pub parent_id: u32,
#[serde(default)]
pub status: String,
#[serde(default)]
pub change: u64,
#[serde(default)]
pub directory: u32,
#[serde(default)]
pub image: String,
#[serde(default)]
pub hash: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum Rule34Rating {
Explicit,
Questionable,
Safe,
General,
Sensitive,
}
impl From<Rule34Rating> for String {
fn from(rating: Rule34Rating) -> String {
rating.to_string()
}
}
impl fmt::Display for Rule34Rating {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let lowercase_tag = format!("{:?}", self).to_lowercase();
write!(f, "{lowercase_tag}")
}
}