1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::DeriveInput;
4use syn::Result;
5use syn::parse_quote;
6
7use crate::model::Model;
8use crate::util::{ty_for_foreign_derive, wrap_in_dummy_mod};
9
10pub fn derive(item: DeriveInput) -> Result<TokenStream> {
11 let model = Model::from_item(&item, true, false)?;
12 if model.sql_types.is_empty() {
13 return Err(syn::Error::new(
14 proc_macro2::Span::mixed_site(),
15 "at least one `sql_type` is needed for deriving `AsExpression` on a structure.",
16 ));
17 }
18
19 let struct_ty = ty_for_foreign_derive(&item, &model)?;
20
21 let sql_types = model.sql_types;
22
23 let tokens = derive_inner(
24 sql_types,
25 item.generics.clone(),
26 struct_ty,
27 model.foreign_derive,
28 model.not_sized,
29 )?;
30
31 Ok(wrap_in_dummy_mod(tokens))
32}
33
34pub fn derive_inner(
35 sql_types: Vec<syn::Type>,
36 generics: syn::Generics,
37 struct_ty: syn::Type,
38 foreign_derive: bool,
39 not_sized: bool,
40) -> Result<TokenStream> {
41 let (impl_generics_plain, _, where_clause_plain) = generics.split_for_impl();
43
44 let mut generics1 = generics.clone();
45 generics1.params.push(::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_lifetime(&mut _s, "\'__expr");
_s
})parse_quote!('__expr));
46 let (impl_generics, _, where_clause) = generics1.split_for_impl();
47
48 let mut generics2 = generics1.clone();
49 generics2.params.push(::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_lifetime(&mut _s, "\'__expr2");
_s
})parse_quote!('__expr2));
50 let (impl_generics2, _, where_clause2) = generics2.split_for_impl();
51
52 let wrappers: Vec<syn::Path> = if foreign_derive {
61 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "alloc");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "rc");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Rc");
_s
}),
::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "alloc");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sync");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Arc");
_s
}),
::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "alloc");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "boxed");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Box");
_s
})]))vec![
62 parse_quote!(alloc::rc::Rc),
63 parse_quote!(alloc::sync::Arc),
64 parse_quote!(alloc::boxed::Box),
65 ]
66 } else {
67 Vec::new()
68 };
69
70 let tokens = sql_types.iter().map(|sql_type| {
71
72 let mut to_sql_generics = generics.clone();
73 to_sql_generics.params.push(::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "__DB");
_s
})parse_quote!(__DB));
74 to_sql_generics.make_where_clause().predicates.push(::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "__DB");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "backend");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Backend");
_s
})parse_quote!(__DB: diesel::backend::Backend));
75 to_sql_generics.make_where_clause().predicates.push(::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "serialize");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ToSql");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "__DB");
::quote::__private::push_gt(&mut _s);
_s
})parse_quote!(Self: diesel::serialize::ToSql<#sql_type, __DB>));
76 let (to_sql_impl_generics, _, to_sql_where_clause) = to_sql_generics.split_for_impl();
77
78 let wrapper_borrowed = wrappers.iter().map(|wrapper| {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&wrapper, &mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::ToTokens::to_tokens(&where_clause, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_and(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&wrapper, &mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::ToTokens::to_tokens(&where_clause, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_and(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
_s
}quote!(
79 #[diagnostic::do_not_recommend]
80 impl #impl_generics diesel::expression::AsExpression<#sql_type>
81 for &'__expr #wrapper<#struct_ty> #where_clause
82 {
83 type Expression = diesel::internal::derives::as_expression::Bound<#sql_type, &'__expr #struct_ty>;
84
85 fn as_expression(self) -> <Self as diesel::expression::AsExpression<#sql_type>>::Expression {
86 diesel::internal::derives::as_expression::Bound::new(&**self)
87 }
88 }
89
90 #[diagnostic::do_not_recommend]
91 impl #impl_generics diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>
92 for &'__expr #wrapper<#struct_ty> #where_clause
93 {
94 type Expression = diesel::internal::derives::as_expression::Bound<diesel::sql_types::Nullable<#sql_type>, &'__expr #struct_ty>;
95
96 fn as_expression(self) -> <Self as diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>>::Expression {
97 diesel::internal::derives::as_expression::Bound::new(&**self)
98 }
99 }
100 ));
101 let wrapper_borrowed = {
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut wrapper_borrowed, i) = wrapper_borrowed.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let wrapper_borrowed =
match wrapper_borrowed.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&wrapper_borrowed, &mut _s);
}
}
_s
}quote!( #( #wrapper_borrowed )* );
102
103 let tokens = {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::ToTokens::to_tokens(&where_clause, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::ToTokens::to_tokens(&where_clause, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics2, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr2");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::ToTokens::to_tokens(&where_clause2, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics2, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr2");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__expr");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::ToTokens::to_tokens(&where_clause2, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&to_sql_impl_generics, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "serialize");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ToSql");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "__DB");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::ToTokens::to_tokens(&to_sql_where_clause, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "to_sql");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__b");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__b");
::quote::__private::push_ident(&mut _s, "self");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "out");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_and(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "serialize");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Output");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'__b");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'_");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "__DB");
::quote::__private::push_gt(&mut _s);
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "serialize");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Result");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "serialize");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ToSql");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "__DB");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "to_sql");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "out");
_s
});
_s
});
_s
});
::quote::ToTokens::to_tokens(&wrapper_borrowed, &mut _s);
_s
}quote!(
104 impl #impl_generics diesel::expression::AsExpression<#sql_type>
105 for &'__expr #struct_ty #where_clause
106 {
107 type Expression = diesel::internal::derives::as_expression::Bound<#sql_type, Self>;
108
109 fn as_expression(self) -> <Self as diesel::expression::AsExpression<#sql_type>>::Expression {
110 diesel::internal::derives::as_expression::Bound::new(self)
111 }
112 }
113
114 #[diagnostic::do_not_recommend]
115 impl #impl_generics diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>
116 for &'__expr #struct_ty #where_clause
117 {
118 type Expression = diesel::internal::derives::as_expression::Bound<diesel::sql_types::Nullable<#sql_type>, Self>;
119
120 fn as_expression(self) -> <Self as diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>>::Expression {
121 diesel::internal::derives::as_expression::Bound::new(self)
122 }
123 }
124
125 #[diagnostic::do_not_recommend]
126 impl #impl_generics2 diesel::expression::AsExpression<#sql_type>
127 for &'__expr2 &'__expr #struct_ty #where_clause2
128 {
129 type Expression = diesel::internal::derives::as_expression::Bound<#sql_type, Self>;
130
131 fn as_expression(self) -> <Self as diesel::expression::AsExpression<#sql_type>>::Expression {
132 diesel::internal::derives::as_expression::Bound::new(self)
133 }
134 }
135
136 #[diagnostic::do_not_recommend]
137 impl #impl_generics2 diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>
138 for &'__expr2 &'__expr #struct_ty #where_clause2
139 {
140 type Expression = diesel::internal::derives::as_expression::Bound<diesel::sql_types::Nullable<#sql_type>, Self>;
141
142 fn as_expression(self) -> <Self as diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>>::Expression {
143 diesel::internal::derives::as_expression::Bound::new(self)
144 }
145 }
146
147 impl #to_sql_impl_generics diesel::serialize::ToSql<diesel::sql_types::Nullable<#sql_type>, __DB>
148 for #struct_ty #to_sql_where_clause
149 {
150 fn to_sql<'__b>(&'__b self, out: &mut diesel::serialize::Output<'__b, '_, __DB>) -> diesel::serialize::Result
151 {
152 diesel::serialize::ToSql::<#sql_type, __DB>::to_sql(self, out)
153 }
154 }
155
156 #wrapper_borrowed
157 );
158
159 let wrapper_owned = wrappers.iter().map(|wrapper| {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics_plain, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::ToTokens::to_tokens(&wrapper, &mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::ToTokens::to_tokens(&where_clause_plain, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics_plain, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::ToTokens::to_tokens(&wrapper, &mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::ToTokens::to_tokens(&where_clause_plain, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
_s
}quote!(
163 impl #impl_generics_plain diesel::expression::AsExpression<#sql_type>
164 for #wrapper<#struct_ty> #where_clause_plain
165 {
166 type Expression = diesel::internal::derives::as_expression::Bound<#sql_type, Self>;
167
168 fn as_expression(self) -> <Self as diesel::expression::AsExpression<#sql_type>>::Expression {
169 diesel::internal::derives::as_expression::Bound::new(self)
170 }
171 }
172
173 #[diagnostic::do_not_recommend]
174 impl #impl_generics_plain diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>
175 for #wrapper<#struct_ty> #where_clause_plain
176 {
177 type Expression = diesel::internal::derives::as_expression::Bound<diesel::sql_types::Nullable<#sql_type>, Self>;
178
179 fn as_expression(self) -> <Self as diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>>::Expression {
180 diesel::internal::derives::as_expression::Bound::new(self)
181 }
182 }
183 ));
184 let wrapper_owned = {
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut wrapper_owned, i) = wrapper_owned.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let wrapper_owned =
match wrapper_owned.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&wrapper_owned, &mut _s);
}
}
_s
}quote!( #( #wrapper_owned )* );
185
186 if not_sized {
187 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&tokens, &mut _s);
::quote::ToTokens::to_tokens(&wrapper_owned, &mut _s);
_s
}quote!(
188 #tokens
189
190 #wrapper_owned
191 )
192 } else {
193 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&tokens, &mut _s);
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics_plain, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::ToTokens::to_tokens(&where_clause_plain, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&impl_generics_plain, &mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::ToTokens::to_tokens(&struct_ty, &mut _s);
::quote::ToTokens::to_tokens(&where_clause_plain, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "AsExpression");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "sql_types");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Nullable");
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&sql_type, &mut _s);
::quote::__private::push_shr(&mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Expression");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diesel");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "internal");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "derives");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "as_expression");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Bound");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "self");
_s
});
_s
});
_s
});
::quote::ToTokens::to_tokens(&wrapper_owned, &mut _s);
_s
}quote!(
194 #tokens
195
196 impl #impl_generics_plain diesel::expression::AsExpression<#sql_type> for #struct_ty #where_clause_plain {
197 type Expression = diesel::internal::derives::as_expression::Bound<#sql_type, Self>;
198
199 fn as_expression(self) -> <Self as diesel::expression::AsExpression<#sql_type>>::Expression {
200 diesel::internal::derives::as_expression::Bound::new(self)
201 }
202 }
203
204 impl #impl_generics_plain diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>> for #struct_ty
205 #where_clause_plain
206 {
207 type Expression = diesel::internal::derives::as_expression::Bound<diesel::sql_types::Nullable<#sql_type>, Self>;
208
209 fn as_expression(self) -> <Self as diesel::expression::AsExpression<diesel::sql_types::Nullable<#sql_type>>>::Expression {
210 diesel::internal::derives::as_expression::Bound::new(self)
211 }
212 }
213
214 #wrapper_owned
215 )
216 }
217 });
218 Ok({
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut tokens, i) = tokens.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let tokens =
match tokens.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&tokens, &mut _s);
}
}
_s
}quote! {#(#tokens)*})
219}