#[macro_export]
#[doc(hidden)]
macro_rules! __diesel_parse_struct_body {
(
$headers:tt,
callback = $callback:ident,
body = {$($body:tt)*},
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = [],
body = ($($body)*,),
}
};
(
$headers:tt,
callback = $callback:ident,
body = ($($body:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = [],
body = ($($body)*,),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = $fields:tt,
body = (
$(#$meta:tt)*
pub $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = $fields,
body = ($(#$meta)* $($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = $fields:tt,
body = (,),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = $fields,
body = (),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = [$($fields:tt)*],
body = (
#[column_name($column_name:ident)]
Option<$field_ty:ty> , $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = [$($fields)* {
column_name: $column_name,
field_ty: Option<$field_ty>,
field_kind: option,
inner_field_ty: $field_ty,
}],
body = ($($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = [$($fields:tt)*],
body = (
#[column_name($column_name:ident)]
$field_ty:ty , $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = [$($fields)* {
column_name: $column_name,
field_ty: $field_ty,
field_kind: regular,
inner_field_ty: $field_ty,
}],
body = ($($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = $fields:tt,
body = (
#[column_name($column_name:ident)]
$field_name:ident : $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = $fields,
body = ($field_name as $column_name : $($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = $fields:tt,
body = ($field_name:ident : $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = $fields,
body = ($field_name as $field_name : $($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = [$($fields:tt)*],
body = ($field_name:ident as $column_name:ident : Option<$field_ty:ty>, $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = [$($fields)* {
field_name: $field_name,
column_name: $column_name,
field_ty: Option<$field_ty>,
field_kind: option,
inner_field_ty: $field_ty,
}],
body = ($($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = [$($fields:tt)*],
body = ($field_name:ident as $column_name:ident : $field_ty:ty, $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = [$($fields)* {
field_name: $field_name,
column_name: $column_name,
field_ty: $field_ty,
field_kind: regular,
inner_field_ty: $field_ty,
}],
body = ($($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = [$($fields:tt)*],
body = ($field_ty:ty , $($tail:tt)*),
) => {
__diesel_parse_struct_body! {
$headers,
callback = $callback,
fields = [$($fields)* {
field_ty: $field_ty,
field_kind: bare,
inner_field_ty: $field_ty,
}],
body = ($($tail)*),
}
};
(
$headers:tt,
callback = $callback:ident,
fields = $fields:tt,
body = (),
) => {
$callback! {
$headers,
fields = $fields,
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __diesel_parse_as_item {
($i:item) => { $i }
}
#[doc(hidden)]
#[macro_export]
macro_rules! __diesel_field_with_column_name {
(
$headers:tt,
callback = $callback:ident,
target = $target_column_name:ident,
fields = [$({
field_name: $field_name:ident,
column_name: $column_name:ident,
$($field_info:tt)*
})*],
) => {
$(
static_cond! {
if $target_column_name == $column_name {
$callback! {
$headers,
found_field_with_column_name = $column_name,
field = {
field_name: $field_name,
column_name: $column_name,
$($field_info)*
},
}
}
}
)*
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __diesel_field_with_field_name {
(
$headers:tt,
callback = $callback:ident,
target = $target_field_name:ident,
fields = [$({
field_name: $field_name:ident,
$($field_info:tt)*
})*],
) => {
$(
static_cond! {
if $target_field_name == $field_name {
$callback! {
$headers,
found_field_with_field_name = $field_name,
field = {
field_name: $field_name,
$($field_info)*
},
}
}
}
)*
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __diesel_fields_with_field_names {
(
$headers:tt,
callback = $callback:ident,
targets = ($target_field_name:ident $(,$rest:ident)*),
fields = $fields:tt,
) => {
__diesel_field_with_field_name! {
(
targets = ($($rest),*),
fields = $fields,
headers = $headers,
callback = $callback,
found_fields = [],
),
callback = __diesel_fields_with_field_names,
target = $target_field_name,
fields = $fields,
}
};
(
(
targets = ($target_field_name:ident $(,$rest:ident)*),
fields = $fields:tt,
headers = $headers:tt,
callback = $callback:ident,
found_fields = [$($found_fields:tt)*],
),
found_field_with_field_name = $ignore:tt,
field = $field:tt,
) => {
__diesel_field_with_field_name! {
(
targets = ($($rest),*),
fields = $fields,
headers = $headers,
callback = $callback,
found_fields = [$($found_fields)* $field],
),
callback = __diesel_fields_with_field_names,
target = $target_field_name,
fields = $fields,
}
};
(
(
targets = (),
fields = $fields:tt,
headers = $headers:tt,
callback = $callback:ident,
found_fields = [$($found_fields:tt)*],
),
found_field_with_field_name = $ignore:tt,
field = $field:tt,
) => {
$callback! {
$headers,
found_fields_with_field_names,
fields = [$($found_fields)* $field],
}
}
}
#[doc(hidden)]
#[macro_export]
macro_rules! __diesel_find_option_with_name {
(
$headers:tt,
option_name = $target_option_name:ident,
args = [$(#[$option_name:ident $option_value:tt])*],
callback = $callback:ident,
) => { $(
static_cond! {
if $target_option_name == $option_name {
$callback! {
$headers,
found_option_with_name = $target_option_name,
value = $option_value,
}
}
}
)* };
(
$headers:tt,
option_name = $target_option_name:ident,
args = [#[$option_name:ident $option_value:tt] $($rest:tt)*],
callback = $callback:ident,
default = $default:tt,
) => {
static_cond! {
if $target_option_name == $option_name {
$callback! {
$headers,
found_option_with_name = $target_option_name,
value = $option_value,
}
} else {
__diesel_find_option_with_name! {
$headers,
option_name = $target_option_name,
args = [$($rest)*],
callback = $callback,
default = $default,
}
}
}
};
(
$headers:tt,
option_name = $target_option_name:ident,
args = [],
callback = $callback:ident,
default = $default:tt,
) => {
$callback! {
$headers,
found_option_with_name = $target_option_name,
value = $default,
}
};
}