roopes-core 0.1.1

Roopes is a Rust Object Oriented Pattern Element System. This crate provides generic traits and implementations for typical object-oriented patterns in Rust. It is intended to be used as a cluster of utility classes for implementing OOP-architected executables -- in Rust!
Documentation
//! Provides a simple wrapper struct around
//! [`Emitter`], `Fn()->T` types.
use super::AbstractFactory;
use crate::prelude::*;
use std::marker::PhantomData;

/// Created new objects by repeatedly calling its
/// delegated [`Emitter`].
pub struct Lambda<D, R>
where
    D: Emitter<R>,
{
    delegate: D,
    _retain_types: PhantomData<(D, R)>,
}

impl<D, R> AbstractFactory<R> for Lambda<D, R>
where
    D: Emitter<R>,
{
    /// Creates the given type from the
    /// [`delegate`].
    fn create(&self) -> R
    {
        self.delegate.emit()
    }
}

impl<D, R> Lambda<D, R>
where
    D: Emitter<R>,
{
    /// Creates a new [`Lambda`] from the supplied
    /// [`Emitter`].
    pub fn new(delegate: D) -> Lambda<D, R>
    {
        Lambda {
            delegate,
            _retain_types: PhantomData,
        }
    }
}

impl<D, R> From<D> for Lambda<D, R>
where
    D: Emitter<R>,
{
    fn from(delegate: D) -> Self
    {
        Lambda::new(delegate)
    }
}