ratatui_kit/
handler.rs

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}