pkecs 9.0.0

Another ECS implementation.
Documentation
//! Contains trait definitions for [`IntoEventHandler`].

use crate::ecs::system::{handler::SystemFunction, param::SystemParameter};
use super::EventHandler;

/// Permits conversion into an [`EventHandler`].
pub trait IntoEventHandler<E, P> {
    type Handler: EventHandler<E>;

    fn into_handler(self) -> Self::Handler;
}

// TODO: Generate all trait implementations with a macro!

impl<F, E, P1> IntoEventHandler<E, P1> for F
    where
        F: Fn(&E, P1),
        P1: SystemParameter,
{
    type Handler = SystemFunction<F, P1>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}

impl<F, E, P1, P2> IntoEventHandler<E, (P1, P2)> for F
    where
        F: Fn(&E, P1, P2),
        P1: SystemParameter,
        P2: SystemParameter,
{
    type Handler = SystemFunction<F, (P1, P2)>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}

impl<F, E, P1, P2, P3> IntoEventHandler<E, (P1, P2, P3)> for F
    where
        F: Fn(&E, P1, P2, P3),
        P1: SystemParameter,
        P2: SystemParameter,
        P3: SystemParameter,
{
    type Handler = SystemFunction<F, (P1, P2, P3)>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}

impl<F, E, P1, P2, P3, P4> IntoEventHandler<E, (P1, P2, P3, P4)> for F
    where
        F: Fn(&E, P1, P2, P3, P4),
        P1: SystemParameter,
        P2: SystemParameter,
        P3: SystemParameter,
        P4: SystemParameter,
{
    type Handler = SystemFunction<F, (P1, P2, P3, P4)>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}

impl<F, E, P1, P2, P3, P4, P5> IntoEventHandler<E, (P1, P2, P3, P4, P5)> for F
    where
        F: Fn(&E, P1, P2, P3, P4, P5),
        P1: SystemParameter,
        P2: SystemParameter,
        P3: SystemParameter,
        P4: SystemParameter,
        P5: SystemParameter,
{
    type Handler = SystemFunction<F, (P1, P2, P3, P4, P5)>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}

impl<F, E, P1, P2, P3, P4, P5, P6> IntoEventHandler<E, (P1, P2, P3, P4, P5, P6)> for F
    where
        F: Fn(&E, P1, P2, P3, P4, P5, P6),
        P1: SystemParameter,
        P2: SystemParameter,
        P3: SystemParameter,
        P4: SystemParameter,
        P5: SystemParameter,
        P6: SystemParameter,
{
    type Handler = SystemFunction<F, (P1, P2, P3, P4, P5, P6)>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}

impl<F, E, P1, P2, P3, P4, P5, P6, P7> IntoEventHandler<E, (P1, P2, P3, P4, P5, P6, P7)> for F
    where
        F: Fn(&E, P1, P2, P3, P4, P5, P6, P7),
        P1: SystemParameter,
        P2: SystemParameter,
        P3: SystemParameter,
        P4: SystemParameter,
        P5: SystemParameter,
        P6: SystemParameter,
        P7: SystemParameter,
{
    type Handler = SystemFunction<F, (P1, P2, P3, P4, P5, P6, P7)>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}

impl<F, E, P1, P2, P3, P4, P5, P6, P7, P8> IntoEventHandler<E, (P1, P2, P3, P4, P5, P6, P7, P8)> for F
    where
        F: Fn(&E, P1, P2, P3, P4, P5, P6, P7, P8),
        P1: SystemParameter,
        P2: SystemParameter,
        P3: SystemParameter,
        P4: SystemParameter,
        P5: SystemParameter,
        P6: SystemParameter,
        P7: SystemParameter,
        P8: SystemParameter,
{
    type Handler = SystemFunction<F, (P1, P2, P3, P4, P5, P6, P7, P8)>;

    fn into_handler(self) -> Self::Handler {
        Self::Handler::from_func(self)
    }
}