1use core::ops::{Deref, DerefMut};
15
16pub struct Handler<'a, T>(bool, Box<dyn FnMut(T) + Send + Sync + 'a>);
17
18impl<T> Handler<'_, T> {
19 pub fn is_default(&self) -> bool {
20 !self.0
21 }
22
23 pub fn take(&mut self) -> Self {
24 core::mem::take(self)
25 }
26}
27
28impl<'a, T> Default for Handler<'a, T> {
29 fn default() -> Self {
30 Self(false, Box::new(|_| {}))
31 }
32}
33
34impl<'a, F, T> From<F> for Handler<'a, T>
35where
36 F: FnMut(T) + Send + Sync + 'a,
37{
38 fn from(f: F) -> Self {
39 Self(false, Box::new(f))
40 }
41}
42
43impl<'a, T> Deref for Handler<'a, T> {
44 type Target = Box<dyn FnMut(T) + Send + Sync + 'a>;
45
46 fn deref(&self) -> &Self::Target {
47 &self.1
48 }
49}
50
51impl<'a, T> DerefMut for Handler<'a, T> {
52 fn deref_mut(&mut self) -> &mut Self::Target {
53 &mut self.1
54 }
55}