use serde::Serialize;
use time::OffsetDateTime;
use crate::{
errors::HackerNewsClientError,
items::{HackerNewsItem, HackerNewsItemType},
HackerNewsID,
};
#[derive(Debug, Serialize)]
pub struct HackerNewsJob {
pub id: HackerNewsID,
pub score: u32,
pub created_at: OffsetDateTime,
pub title: String,
pub text: String,
pub by: String,
pub url: String,
}
impl TryFrom<HackerNewsItem> for HackerNewsJob {
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,
created_at: item.created_at,
text: item.text.unwrap_or_default(),
by: item.by.unwrap_or_default(),
score: item.score.unwrap_or(0),
title: item.title.unwrap_or_default(),
url: item.url.unwrap_or_default(),
})
}
}