1use core::ops::{Deref, DerefMut};
2
3pub struct Handler<'a, T>(bool, Box<dyn FnMut(T) + Send + Sync + 'a>);
4
5impl<T> Handler<'_, T> {
6 pub fn is_default(&self) -> bool {
7 !self.0
8 }
9
10 pub fn take(&mut self) -> Self {
11 core::mem::take(self)
12 }
13}
14
15impl<'a, T> Default for Handler<'a, T> {
16 fn default() -> Self {
17 Self(false, Box::new(|_| {}))
18 }
19}
20
21impl<'a, F, T> From<F> for Handler<'a, T>
22where
23 F: FnMut(T) + Send + Sync + 'a,
24{
25 fn from(f: F) -> Self {
26 Self(false, Box::new(f))
27 }
28}
29
30impl<'a, T> Deref for Handler<'a, T> {
31 type Target = Box<dyn FnMut(T) + Send + Sync + 'a>;
32
33 fn deref(&self) -> &Self::Target {
34 &self.1
35 }
36}
37
38impl<'a, T> DerefMut for Handler<'a, T> {
39 fn deref_mut(&mut self) -> &mut Self::Target {
40 &mut self.1
41 }
42}