overlord_event_system/async_handler/
offers.rs

1use crate::{
2    async_handler::handler::OverlordAsyncEventHandler, event::OverlordEvent, state::OverlordState,
3};
4
5use essences::offers::Offer;
6
7use event_system::system::EventHandleResult;
8
9impl OverlordAsyncEventHandler {
10    pub fn handle_reset_offers(
11        &self,
12        new_offers: &[Offer],
13        mut state: OverlordState,
14    ) -> EventHandleResult<OverlordEvent, OverlordState> {
15        let reset_template_ids: Vec<_> = new_offers.iter().map(|o| o.template_id).collect();
16
17        state
18            .offers_info
19            .active_offers
20            .retain(|offer| !reset_template_ids.contains(&offer.template_id));
21
22        state
23            .offers_info
24            .offer_buy_counts
25            .retain(|k, _| !reset_template_ids.contains(k));
26
27        state
28            .offers_info
29            .active_offers
30            .extend_from_slice(new_offers);
31
32        EventHandleResult::ok(state)
33    }
34}