diff --git a/problem_06/src/db.rs b/problem_06/src/db.rs index bac630d..d039eb7 100644 --- a/problem_06/src/db.rs +++ b/problem_06/src/db.rs @@ -163,6 +163,15 @@ impl Db { state.open_tickets.values().flatten().cloned().collect() } + pub(crate) fn remove_open_ticket(&self, road: Road, ticket: Ticket) -> bool { + let mut state = self.state.lock().unwrap(); + if let Some(tickets) = state.open_tickets.get_mut(&road) { + tickets.retain(|t| t.plate != ticket.plate); + return true; + } + false + } + pub(crate) fn get_plates_by_road( &self, plate: Plate, diff --git a/problem_06/src/ticketing.rs b/problem_06/src/ticketing.rs index a05b80b..76b0c11 100644 --- a/problem_06/src/ticketing.rs +++ b/problem_06/src/ticketing.rs @@ -88,7 +88,8 @@ pub(crate) async fn send_out_waiting_tickets(db: Db) { debug!(?tickets, "Sending out waiting tickets"); for ticket in tickets { if let Some(dispatcher) = db.get_dispatcher_for_road(Road(ticket.road)) { - let _ = dispatcher.send(ticket.into()).await; + let _ = dispatcher.send(ticket.clone().into()).await; + db.remove_open_ticket(Road(ticket.road), ticket); } } }