From 81686a07ad61ff3728482731454b7488f29923e5 Mon Sep 17 00:00:00 2001 From: Bastian Gruber Date: Mon, 22 May 2023 07:20:10 +0200 Subject: [PATCH] Remove open tickets when sent out --- problem_06/src/db.rs | 9 +++++++++ problem_06/src/ticketing.rs | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) 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); } } }