use super::{Entity, EntityList, EntityVisitor};
#[derive(microrm_macros::Entity)]
pub struct FakeEntity {
_ghost: bool,
}
impl EntityList for () {
type ListHead = FakeEntity;
type ListTail = ();
const IS_EMPTY: bool = true;
fn accept_visitor<EV: EntityVisitor>(_visitor: &mut EV) {}
}
impl<E0: Entity> EntityList for E0 {
type ListHead = E0;
type ListTail = ();
fn accept_visitor<EV: EntityVisitor>(visitor: &mut EV) {
visitor.visit::<E0>();
}
}
macro_rules! entity_list {
( $e0:ident, $($e:ident),* ) => {
impl< $e0: Entity, $( $e : Entity ),*> EntityList for ( $e0, $( $e ),*) {
type ListHead = $e0;
#[allow(unused_parens)]
type ListTail = ( $( $e ),* );
fn accept_visitor<EV: EntityVisitor>(visitor: &mut EV) {
visitor.visit::< $e0 >();
$( visitor.visit::< $e >(); )*
}
}
}
}
entity_list!(E0,);
entity_list!(E0, E1);
entity_list!(E0, E1, E2);
entity_list!(E0, E1, E2, E3);
entity_list!(E0, E1, E2, E3, E4);
entity_list!(E0, E1, E2, E3, E4, E5);
entity_list!(E0, E1, E2, E3, E4, E5, E6);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14);
entity_list!(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15);