sql_orm/
query_projection.rs1use crate::AliasedEntityColumn;
2use sql_orm_core::{Entity, EntityColumn};
3use sql_orm_query::{Expr, SelectProjection};
4
5pub trait SelectProjections {
6 fn into_select_projections(self) -> Vec<SelectProjection>;
7}
8
9impl<P> SelectProjections for Vec<P>
10where
11 P: Into<SelectProjection>,
12{
13 fn into_select_projections(self) -> Vec<SelectProjection> {
14 self.into_iter().map(Into::into).collect()
15 }
16}
17
18impl<P, const N: usize> SelectProjections for [P; N]
19where
20 P: Into<SelectProjection>,
21{
22 fn into_select_projections(self) -> Vec<SelectProjection> {
23 self.into_iter().map(Into::into).collect()
24 }
25}
26
27impl SelectProjections for SelectProjection {
28 fn into_select_projections(self) -> Vec<SelectProjection> {
29 vec![self]
30 }
31}
32
33impl SelectProjections for Expr {
34 fn into_select_projections(self) -> Vec<SelectProjection> {
35 vec![SelectProjection::from(self)]
36 }
37}
38
39impl<E> SelectProjections for EntityColumn<E>
40where
41 E: Entity,
42{
43 fn into_select_projections(self) -> Vec<SelectProjection> {
44 vec![SelectProjection::from(self)]
45 }
46}
47
48impl<E> SelectProjections for AliasedEntityColumn<E>
49where
50 E: Entity,
51{
52 fn into_select_projections(self) -> Vec<SelectProjection> {
53 vec![SelectProjection::from(self)]
54 }
55}
56
57macro_rules! impl_select_projections_tuple {
58 ($($name:ident),+ $(,)?) => {
59 impl<$($name),+> SelectProjections for ($($name,)+)
60 where
61 $($name: Into<SelectProjection>),+
62 {
63 #[allow(non_snake_case)]
64 fn into_select_projections(self) -> Vec<SelectProjection> {
65 let ($($name,)+) = self;
66 vec![$($name.into()),+]
67 }
68 }
69 };
70}
71
72impl_select_projections_tuple!(A);
73impl_select_projections_tuple!(A, B);
74impl_select_projections_tuple!(A, B, C);
75impl_select_projections_tuple!(A, B, C, D);
76impl_select_projections_tuple!(A, B, C, D, E);
77impl_select_projections_tuple!(A, B, C, D, E, F);
78impl_select_projections_tuple!(A, B, C, D, E, F, G);
79impl_select_projections_tuple!(A, B, C, D, E, F, G, H);
80impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I);
81impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I, J);
82impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I, J, K);
83impl_select_projections_tuple!(A, B, C, D, E, F, G, H, I, J, K, L);