web_extensions/tabs/
on_replaced.rs

1use super::prelude::*;
2
3/// <https://developer.chrome.com/docs/extensions/reference/tabs/#event-onReplaced>
4pub fn on_replaced() -> OnReplaced {
5    OnReplaced(tabs().on_replaced())
6}
7
8/// <https://developer.chrome.com/docs/extensions/reference/tabs/#event-onReplaced>
9pub struct OnReplaced(sys::EventTarget);
10
11pub struct OnReplacedEventListener<'a>(EventListener<'a, dyn FnMut(i32, i32)>);
12
13impl OnReplacedEventListener<'_> {
14    pub fn forget(self) {
15        self.0.forget()
16    }
17}
18
19impl OnReplaced {
20    pub fn add_listener<L>(&self, mut listener: L) -> OnReplacedEventListener
21    where
22        L: FnMut(ReplaceInfo) + 'static,
23    {
24        let listener = Closure::new(move |added_tab_id: i32, removed_tab_id: i32| {
25            let replace_info = ReplaceInfo {
26                added: TabId::from(added_tab_id),
27                removed: TabId::from(removed_tab_id),
28            };
29            listener(replace_info)
30        });
31        OnReplacedEventListener(EventListener::raw_new(&self.0, listener))
32    }
33}
34
35#[derive(Debug)]
36pub struct ReplaceInfo {
37    pub added: TabId,
38    pub removed: TabId,
39}