1use crate::Handle;
4use super::{PropMap, Value};
5
6
7#[derive(Debug)]
9pub struct Map<'m, M, F> {
10 pub(super) inner: &'m M,
11 pub(super) mapper: F,
12}
13
14impl<'m, H, M, F, TargetT> PropMap<H> for Map<'m, M, F>
15where
16 H: Handle,
17 M: PropMap<H>,
18 M::Target: 'm,
19 F: Fn(Value<M::Ret<'m>, M::Target>) -> TargetT,
20{
21 type Target = TargetT;
22 type Ret<'s> = Self::Target where Self: 's;
23
24 fn get(&self, handle: H) -> Option<Value<Self::Ret<'_>, Self::Target>> {
25 self.inner.get(handle)
26 .map(|v| (&self.mapper)(v).into())
27 }
28}