diesel/query_dsl/
boxed_dsl.rs

1use crate::dsl;
2use crate::expression::TypedExpressionType;
3use crate::expression::ValidGrouping;
4use crate::query_builder::AsQuery;
5use crate::query_builder::FromClause;
6use crate::query_builder::SelectStatement;
7use crate::query_source::Table;
8use crate::Expression;
9
10/// The `into_boxed` method
11///
12/// This trait should not be relied on directly by most apps. Its behavior is
13/// provided by [`QueryDsl`]. However, you may need a where clause on this trait
14/// to call `into_boxed` from generic code.
15///
16/// [`QueryDsl`]: crate::QueryDsl
17pub trait BoxedDsl<'a, DB> {
18    /// The return type of `internal_into_boxed`
19    type Output;
20
21    /// See the trait documentation.
22    fn internal_into_boxed(self) -> dsl::IntoBoxed<'a, Self, DB>;
23}
24
25impl<'a, T, DB> BoxedDsl<'a, DB> for T
26where
27    T: Table + AsQuery<Query = SelectStatement<FromClause<T>>>,
28    SelectStatement<FromClause<T>>: BoxedDsl<'a, DB>,
29    T::DefaultSelection: Expression<SqlType = T::SqlType> + ValidGrouping<()>,
30    T::SqlType: TypedExpressionType,
31{
32    type Output = dsl::IntoBoxed<'a, SelectStatement<FromClause<T>>, DB>;
33
34    fn internal_into_boxed(self) -> Self::Output {
35        self.as_query().internal_into_boxed()
36    }
37}