|
@@ -783,31 +783,16 @@ Finally, call `.build()` to create the instance of `{name}`.
|
|
|
None => quote!(),
|
|
|
};
|
|
|
|
|
|
- // NOTE: both auto_into and strip_option affect `arg_type` and `arg_expr`, but the order of
|
|
|
- // nesting is different so we have to do this little dance.
|
|
|
- let arg_type = if field.builder_attr.strip_option {
|
|
|
- field.type_from_inside_option(false).ok_or_else(|| {
|
|
|
- Error::new_spanned(
|
|
|
- field_type,
|
|
|
- "can't `strip_option` - field is not `Option<...>`",
|
|
|
+ let arg_type = field_type;
|
|
|
+ let (arg_type, arg_expr) =
|
|
|
+ if field.builder_attr.auto_into || field.builder_attr.strip_option {
|
|
|
+ (
|
|
|
+ quote!(impl ::core::convert::Into<#arg_type>),
|
|
|
+ quote!(#field_name.into()),
|
|
|
)
|
|
|
- })?
|
|
|
- } else {
|
|
|
- field_type
|
|
|
- };
|
|
|
- let (arg_type, arg_expr) = if field.builder_attr.auto_into {
|
|
|
- (
|
|
|
- quote!(impl ::core::convert::Into<#arg_type>),
|
|
|
- quote!(#field_name.into()),
|
|
|
- )
|
|
|
- } else {
|
|
|
- (quote!(#arg_type), quote!(#field_name))
|
|
|
- };
|
|
|
- let arg_expr = if field.builder_attr.strip_option {
|
|
|
- quote!(Some(#arg_expr))
|
|
|
- } else {
|
|
|
- arg_expr
|
|
|
- };
|
|
|
+ } else {
|
|
|
+ (quote!(#arg_type), quote!(#field_name))
|
|
|
+ };
|
|
|
|
|
|
let repeated_fields_error_type_name = syn::Ident::new(
|
|
|
&format!(
|