Documentation
use crate::models::{ModerateData, VoteData};

use serde::Deserialize;

#[derive(Deserialize, Debug, Clone, Default)]
pub struct PostImage {
    pub url: String,
    pub width: Option<i32>,
    pub height: Option<i32>,
}

#[derive(Deserialize, Debug, Clone, Default)]
pub struct PostImages {
    pub source: PostImage,
    pub resolutions: Vec<PostImage>,
    pub id: String,
}

#[derive(Deserialize, Debug, Clone, Default)]
pub struct PostPreview {
    pub images: Vec<PostImages>,
    pub enabled: bool,
}

#[derive(Deserialize, Debug, Clone, Default)]
pub struct PostInfo {
    #[serde(flatten)]
    pub vote_data: VoteData,

    #[serde(flatten)]
    pub moderate_data: ModerateData,

    #[serde(rename = "spoiler")]
    pub is_spoiler: bool,

    #[serde(rename = "hidden")]
    pub is_hidden: bool,

    #[serde(rename = "is_self")]
    pub is_self_posted: bool,

    #[serde(rename = "over_18")]
    pub nsfw: bool,

    pub author: String,
    pub name: String,
    pub permalink: Option<String>,
    pub domain: Option<String>,
    pub link_flair_css_class: Option<String>,
    pub link_flair_text: Option<String>,
    pub num_comments: i32,
    pub selftext: Option<String>,
    pub selftext_html: Option<String>,
    pub thumbnail: Option<String>,
    pub preview: Option<PostPreview>,
    pub title: String,
    pub subreddit: String,
    pub url: String,
    pub is_crosspostable: bool,
    pub num_crossposts: i32,
    pub created: f64,
    pub crosspost_parent: Option<String>,
}

use crate::feed::Feedable;
impl Feedable for PostInfo {
    fn feed_id(&self) -> String {
        self.name.clone()
    }
}