(
from_field: &Field,
backtrace_field: Option<&Field>,
source_var: &Ident,
)
| 534 | } |
| 535 | |
| 536 | fn from_initializer( |
| 537 | from_field: &Field, |
| 538 | backtrace_field: Option<&Field>, |
| 539 | source_var: &Ident, |
| 540 | ) -> TokenStream { |
| 541 | let from_member = &from_field.member; |
| 542 | let some_source = if type_is_option(from_field.ty) { |
| 543 | quote!(::core::option::Option::Some(#source_var)) |
| 544 | } else { |
| 545 | quote!(#source_var) |
| 546 | }; |
| 547 | let backtrace = backtrace_field.map(|backtrace_field| { |
| 548 | let backtrace_member = &backtrace_field.member; |
| 549 | if type_is_option(backtrace_field.ty) { |
| 550 | quote! { |
| 551 | #backtrace_member: ::core::option::Option::Some(::thiserror::#private::Backtrace::capture()), |
| 552 | } |
| 553 | } else { |
| 554 | quote! { |
| 555 | #backtrace_member: ::core::convert::From::from(::thiserror::#private::Backtrace::capture()), |
| 556 | } |
| 557 | } |
| 558 | }); |
| 559 | quote!({ |
| 560 | #from_member: #some_source, |
| 561 | #backtrace |
| 562 | }) |
| 563 | } |
| 564 | |
| 565 | fn type_is_option(ty: &Type) -> bool { |
| 566 | type_parameter_of_option(ty).is_some() |
no test coverage detected