microrm 0.6.3

Lightweight ORM using sqlite as a backend
Documentation
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);