1pub struct Selector<'a, T> {
2 pub(crate) data: Option<&'a T>,
3}
4
5impl<'a, T> Selector<'a, T> {
6 pub fn map<R>(&self, handler: impl FnOnce(&'a T) -> R) -> Option<R> {
7 self.data.map(handler)
8 }
9
10 pub async fn map_async<R>(&self, handler: impl AsyncFnOnce(&'a T) -> R) -> Option<R> {
11 if let Some(data) = self.data {
12 Some(handler(data).await)
13 } else {
14 None
15 }
16 }
17
18 pub fn select(&self) -> Option<&'a T> {
19 self.data
20 }
21
22 pub fn is_matched(&self) -> bool {
23 self.data.is_some()
24 }
25}