roopes_core/primitives/emitter/
lambda.rs

1//! Provides a simple wrapper struct around
2//! [`super::Delegate`], `Fn() -> I` types.
3
4use super::Emitter;
5use std::marker::PhantomData;
6
7/// Provides a type which redirects
8/// transformations to its enclosed
9/// [`super::Delegate`].
10#[derive(Clone)]
11pub struct Lambda<L, O>
12where
13    L: super::Delegate<O>,
14{
15    delegate: L,
16    _t: PhantomData<O>,
17}
18
19impl<L, O> Lambda<L, O>
20where
21    L: super::Delegate<O>,
22{
23    /// Creates a [`Lambda`] from a given
24    /// [`super::Delegate`].
25    pub fn new(delegate: L) -> Lambda<L, O>
26    {
27        Lambda {
28            delegate,
29            _t: PhantomData,
30        }
31    }
32}
33
34impl<L, O> Emitter<O> for Lambda<L, O>
35where
36    L: super::Delegate<O>,
37{
38    fn emit(&self) -> O
39    {
40        (self.delegate)()
41    }
42}
43
44impl<C, M> From<C> for Lambda<C, M>
45where
46    C: super::Delegate<M>,
47{
48    fn from(delegate: C) -> Self
49    {
50        Lambda::new(delegate)
51    }
52}