Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c68e9859 authored by Zach Johnson's avatar Zach Johnson
Browse files

rusty-gd: only allow one registration for an event, allow unregistering

Bug: 171749953
Tag: #gd-refactor
Test: gd/cert/run --rhost SimpleHalTest
Change-Id: I6a0f12b696a22f0653037e3530ccfb4e2f38d001
parent 6e4aceb1
Loading
Loading
Loading
Loading
+30 −8
Original line number Diff line number Diff line
@@ -104,21 +104,43 @@ impl HciExports {
    }

    /// Indicate interest in specific HCI events
    pub async fn register_event_handler(
        &mut self,
        evt_code: EventCode,
        sender: Sender<EventPacket>,
    ) {
        self.evt_handlers.lock().await.insert(evt_code, sender);
    pub async fn register_event_handler(&mut self, code: EventCode, sender: Sender<EventPacket>) {
        assert!(
            self.evt_handlers
                .lock()
                .await
                .insert(code, sender)
                .is_none(),
            "A handler for {:?} is already registered",
            code
        );
    }

    /// Remove interest in specific HCI events
    pub async fn unregister_event_handler(&mut self, code: EventCode) {
        self.evt_handlers.lock().await.remove(&code);
    }

    /// Indicate interest in specific LE events
    pub async fn register_le_event_handler(
        &mut self,
        evt_code: SubeventCode,
        code: SubeventCode,
        sender: Sender<LeMetaEventPacket>,
    ) {
        self.le_evt_handlers.lock().await.insert(evt_code, sender);
        assert!(
            self.le_evt_handlers
                .lock()
                .await
                .insert(code, sender)
                .is_none(),
            "A handler for {:?} is already registered",
            code
        );
    }

    /// Remove interest in specific LE events
    pub async fn unregister_le_event_handler(&mut self, code: SubeventCode) {
        self.le_evt_handlers.lock().await.remove(&code);
    }
}