Documentation
pub mod auth;
mod comment;
mod listing;
mod metadata;
mod post;
mod search;
mod subreddit;
mod user;

use serde::Deserialize;

pub use crate::models::{
    comment::CommentData,
    listing::ListingData,
    metadata::{ModerateData, VoteData},
    post::{PostImage, PostImages, PostInfo, PostPreview},
    search::SearchInfo,
    subreddit::SubredditInfo,
    user::UserInfo,
};

#[derive(Deserialize, Clone, Debug)]
pub struct RedditResponseGeneric<T> {
    pub kind: String,
    pub data: T,
}

#[derive(Deserialize, Clone, Debug)]
#[serde(tag = "kind", content = "data")]
pub enum RedditResponse {
    #[serde(rename = "t1")]
    Comment(CommentData),

    #[serde(rename = "t2")]
    RedditUser(UserInfo),

    #[serde(rename = "t3")]
    Post(PostInfo),

    #[serde(rename = "t4")]
    PrivateMessage(),

    #[serde(rename = "t5")]
    Subreddit(SubredditInfo),

    #[serde(rename = "Listing")]
    Listing(ListingData<RedditResponse>),

    #[serde(rename = "modaction")]
    ModAction(),

    #[serde(rename = "more")]
    More(),

    #[serde(rename = "LiveUpdate")]
    LiveUpdate(),

    #[serde(rename = "LiveUpdateEvent")]
    LiveUpdateEvent(),

    Invalid,
}