sql-orm 0.1.0

Public API crate for the sql-orm workspace.
Documentation
use crate::AliasedEntityColumn;
use sql_orm_core::{Entity, EntityColumn};
use sql_orm_query::{Expr, SelectProjection};

pub trait SelectProjections {
    fn into_select_projections(self) -> Vec<SelectProjection>;
}

impl<P> SelectProjections for Vec<P>
where
    P: Into<SelectProjection>,
{
    fn into_select_projections(self) -> Vec<SelectProjection> {
        self.into_iter().map(Into::into).collect()
    }
}

impl<P, const N: usize> SelectProjections for [P; N]
where
    P: Into<SelectProjection>,
{
    fn into_select_projections(self) -> Vec<SelectProjection> {
        self.into_iter().map(Into::into).collect()
    }
}

impl SelectProjections for SelectProjection {
    fn into_select_projections(self) -> Vec<SelectProjection> {
        vec![self]
    }
}

impl SelectProjections for Expr {
    fn into_select_projections(self) -> Vec<SelectProjection> {
        vec![SelectProjection::from(self)]
    }
}

impl<E> SelectProjections for EntityColumn<E>
where
    E: Entity,
{
    fn into_select_projections(self) -> Vec<SelectProjection> {
        vec![SelectProjection::from(self)]
    }
}

impl<E> SelectProjections for AliasedEntityColumn<E>
where
    E: Entity,
{
    fn into_select_projections(self) -> Vec<SelectProjection> {
        vec![SelectProjection::from(self)]
    }
}

macro_rules! impl_select_projections_tuple {
    ($($name:ident),+ $(,)?) => {
        impl<$($name),+> SelectProjections for ($($name,)+)
        where
            $($name: Into<SelectProjection>),+
        {
            #[allow(non_snake_case)]
            fn into_select_projections(self) -> Vec<SelectProjection> {
                let ($($name,)+) = self;
                vec![$($name.into()),+]
            }
        }
    };
}

impl_select_projections_tuple!(A);
impl_select_projections_tuple!(A, B);
impl_select_projections_tuple!(A, B, C);
impl_select_projections_tuple!(A, B, C, D);
impl_select_projections_tuple!(A, B, C, D, E);
impl_select_projections_tuple!(A, B, C, D, E, F);
impl_select_projections_tuple!(A, B, C, D, E, F, G);
impl_select_projections_tuple!(A, B, C, D, E, F, G, H);
impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I);
impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I, J);
impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I, J, K);
impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I, J, K, L);