pkecs 9.0.0

Another ECS implementation.
Documentation
//! Contains blanket implementations for [`IntoSystemHandler`].

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

/// Facilitates conversiccn to a [`System`].
pub trait IntoSystemHandler<P> {
    type Handler: SystemHandler;

    /// Converts [`self`] into a [`SystemHandler`].
    fn into_handler(self) -> Self::Handler;
}

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

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

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

impl<F, P1, P2> IntoSystemHandler<(P1, P2)> for F
    where
        F: Fn(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, P1, P2, P3> IntoSystemHandler<(P1, P2, P3)> for F
    where
        F: Fn(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, P1, P2, P3, P4> IntoSystemHandler<(P1, P2, P3, P4)> for F
    where
        F: Fn(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, P1, P2, P3, P4, P5> IntoSystemHandler<(P1, P2, P3, P4, P5)> for F
    where
        F: Fn(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, P1, P2, P3, P4, P5, P6> IntoSystemHandler<(P1, P2, P3, P4, P5, P6)> for F
    where
        F: Fn(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, P1, P2, P3, P4, P5, P6, P7> IntoSystemHandler<(P1, P2, P3, P4, P5, P6, P7)> for F
    where
        F: Fn(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, P1, P2, P3, P4, P5, P6, P7, P8> IntoSystemHandler<(P1, P2, P3, P4, P5, P6, P7, P8)> for F
    where
        F: Fn(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)
    }
}