Skip to content

Commit

Permalink
use an option for modeling new items
Browse files Browse the repository at this point in the history
  • Loading branch information
danitrap committed Dec 28, 2023
1 parent 34f3475 commit e19c1ba
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 14 deletions.
17 changes: 12 additions & 5 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,18 @@ async fn main() {
continue;
}

log::info!("Sending {} new items to Telegram", new_items.len());

for item in new_items {
let message = format!("{}", item);
send_telegram_message(&config, message).await;
match new_items {
None => {
log::info!("No new items");
continue;
}
Some(items) => {
log::info!("Sending {} new items to Telegram", items.len());
for item in items {
let message = format!("{}", item);
send_telegram_message(&config, message).await;
}
}
}
}
}
21 changes: 12 additions & 9 deletions src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ impl HackerNews {
}
}

pub fn whats_new(&mut self, items: Vec<HnItem>) -> Vec<Rc<HnItem>> {
pub fn whats_new(&mut self, items: Vec<HnItem>) -> Option<Vec<Rc<HnItem>>> {
let mut new_items = Vec::new();

for item in items {
Expand All @@ -72,7 +72,11 @@ impl HackerNews {

self.truncate();

new_items
if new_items.is_empty() {
None
} else {
Some(new_items)
}
}

fn add_item(&mut self, item: HnItem) -> AddItemResult {
Expand Down Expand Up @@ -185,10 +189,10 @@ mod tests {
let mut instance = HackerNews::new();
let item = HnItem::new("title".to_string(), "snippet".to_string(), "".to_string());
let items = vec![item.clone()];
let new_items = instance.whats_new(items);
let mut new_items = instance.whats_new(items);

assert_eq!(new_items.len(), 1);
assert_eq!(new_items[0], Rc::new(item));
assert_eq!(new_items, Some(vec![Rc::new(item)]));
assert_eq!(instance.history.len(), 1);
}

#[test]
Expand All @@ -203,17 +207,16 @@ mod tests {
let items = vec![item.clone()];
let new_items = instance.whats_new(items);

assert_eq!(new_items.len(), 0);
assert_eq!(new_items, None);

let item2 = HnItem::new(
"title2".to_string(),
"snippet2".to_string(),
"guid 2".to_string(),
);
let items2 = vec![item.clone(), item2.clone()];
let new_items2 = instance.whats_new(items2);
let mut new_items2 = instance.whats_new(items2);

assert_eq!(new_items2.len(), 1);
assert_eq!(new_items2[0], Rc::new(item2));
assert_eq!(new_items2, Some(vec![Rc::new(item2)]));
}
}

0 comments on commit e19c1ba

Please sign in to comment.