use chrono::serde::ts_seconds;
use chrono::{DateTime, Utc};
use serde::Deserialize;
pub(crate) trait AsAttrs {
fn attrs(&self) -> &Attrs;
}
#[derive(Clone, Debug, Deserialize)]
pub struct Attrs {
pub id: String,
pub score: i32,
pub permalink: Option<String>,
#[serde(rename = "created_utc", with = "ts_seconds")]
pub date: DateTime<Utc>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct Comment {
#[serde(flatten)]
pub author: Author,
#[serde(flatten)]
pub subreddit: SubReddit,
#[serde(flatten)]
pub attrs: Attrs,
pub body: String,
pub parent_id: String,
}
impl AsAttrs for Comment {
fn attrs(&self) -> &Attrs {
&self.attrs
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct Post {
#[serde(flatten)]
pub author: Author,
#[serde(flatten)]
pub subreddit: SubReddit,
#[serde(flatten)]
pub attrs: Attrs,
#[serde(rename = "url")]
pub content_url: String,
#[serde(rename = "full_link")]
pub comment_url: String,
#[serde(rename = "selftext")]
pub self_text: Option<String>,
}
impl AsAttrs for Post {
fn attrs(&self) -> &Attrs {
&self.attrs
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct Author {
#[serde(rename = "author_fullname")]
pub id: Option<String>,
#[serde(rename = "author")]
pub name: String,
}
#[derive(Clone, Debug, Deserialize)]
pub struct SubReddit {
#[serde(rename = "subreddit_id")]
pub id: String,
#[serde(rename = "subreddit")]
pub name: String,
}