use crate::ecs::system::param::SystemParameter;
use super::{SystemFunction, SystemHandler};
pub trait IntoSystemHandler<P> {
type Handler: SystemHandler;
fn into_handler(self) -> Self::Handler;
}
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)
}
}