pub trait QueryDataToComponents {
fn push_names(acc: &mut Vec<&'static str>);
}
impl<T: bevy::prelude::Component + crate::Persist> QueryDataToComponents for &T {
fn push_names(acc: &mut Vec<&'static str>) { acc.push(T::name()); }
}
impl<T: bevy::prelude::Component + crate::Persist> QueryDataToComponents for &mut T {
fn push_names(acc: &mut Vec<&'static str>) { acc.push(T::name()); }
}
impl<T: bevy::prelude::Component + crate::Persist> QueryDataToComponents for Option<&T> {
fn push_names(acc: &mut Vec<&'static str>) { acc.push(T::name()); }
}
impl<T: bevy::prelude::Component + crate::Persist> QueryDataToComponents for Option<&mut T> {
fn push_names(acc: &mut Vec<&'static str>) { acc.push(T::name()); }
}
impl QueryDataToComponents for &crate::components::Guid {
fn push_names(_acc: &mut Vec<&'static str>) {}
}
impl QueryDataToComponents for &mut crate::components::Guid {
fn push_names(_acc: &mut Vec<&'static str>) {}
}
impl QueryDataToComponents for Option<&crate::components::Guid> {
fn push_names(_acc: &mut Vec<&'static str>) {}
}
impl QueryDataToComponents for Option<&mut crate::components::Guid> {
fn push_names(_acc: &mut Vec<&'static str>) {}
}
macro_rules! impl_q_to_components_tuple {
( $( $name:ident ),+ ) => {
impl<$( $name: QueryDataToComponents ),+> QueryDataToComponents for ( $( $name, )+ ) {
fn push_names(acc: &mut Vec<&'static str>) {
$( $name::push_names(acc); )+
}
}
};
}
impl_q_to_components_tuple!(A);
impl_q_to_components_tuple!(A,B);
impl_q_to_components_tuple!(A,B,C);
impl_q_to_components_tuple!(A,B,C,D);
impl_q_to_components_tuple!(A,B,C,D,E);
impl_q_to_components_tuple!(A,B,C,D,E,F);
impl_q_to_components_tuple!(A,B,C,D,E,F,G);
impl_q_to_components_tuple!(A,B,C,D,E,F,G,H);