Skip to main content

lox/map/
adaptors.rs

1//! Helper types to implement [`PropMap::map`] and other adaptor functions.
2
3use crate::Handle;
4use super::{PropMap, Value};
5
6
7/// Helper type for [`PropMap::map`]. See that method for more information.
8#[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}