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