use time::OffsetDateTime;
use crate::{
errors::HackerNewsClientError,
items::{HackerNewsItem, HackerNewsItemType},
HackerNewsID,
};
#[derive(Debug)]
pub struct HackerNewsComment {
pub id: HackerNewsID,
pub sub_comments: Vec<HackerNewsID>,
pub created_at: OffsetDateTime,
pub parent_story: HackerNewsID,
pub text: String,
pub by: String,
}
impl TryFrom<HackerNewsItem> for HackerNewsComment {
type Error = HackerNewsClientError;
fn try_from(item: HackerNewsItem) -> Result<Self, Self::Error> {
if item.get_item_type() != HackerNewsItemType::Comment {
return Err(HackerNewsClientError::InvalidTypeMapping(
item.get_item_type(),
));
}
Ok(Self {
id: item.id,
sub_comments: item.kids.unwrap_or_default(),
created_at: item.created_at,
parent_story: item.parent.unwrap_or_default(),
text: item.text.unwrap_or_default(),
by: item.by.unwrap_or_default(),
})
}
}