Skip to content

Commit 381011b

Browse files
committed
derive: Use if let instead of unwrapping
1 parent 9d2c9d2 commit 381011b

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

oauth1-request-derive/src/method_body.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use proc_macro2::{Span, TokenStream};
1+
use proc_macro2::{Span, TokenStream, TokenTree};
22
use quote::{quote, quote_spanned, ToTokens};
33
use syn::spanned::Spanned;
44
use syn::{Ident, PathArguments, Type};
@@ -20,6 +20,8 @@ impl<'a> ToTokens for MethodBody<'a> {
2020
fn to_tokens(&self, tokens: &mut TokenStream) {
2121
let this = Ident::new("self", Span::mixed_site());
2222
let ser = Ident::new("serializer", Span::mixed_site());
23+
// Name of destructured value inside an `Option` field value.
24+
let bind = Ident::new("value", Span::mixed_site());
2325

2426
let mut next_param = OAuthParameter::default();
2527
for f in self.fields {
@@ -45,13 +47,10 @@ impl<'a> ToTokens for MethodBody<'a> {
4547
.map(|v| v.value)
4648
.unwrap_or_else(|| is_option(&f.ty));
4749

48-
let value = if ty_is_option {
49-
quote_spanned! {f.ty.span()=> {
50-
let value = &#this.#ident;
51-
::std::option::Option::as_ref(value).unwrap()
52-
}}
50+
let unwrapped = if ty_is_option {
51+
TokenStream::from(TokenTree::Ident(bind.clone()))
5352
} else {
54-
quote! { &#this.#ident }
53+
quote_spanned! {f.ty.span()=> &#this.#ident }
5554
};
5655

5756
let display = if let Some(ref fmt) = f.meta.fmt {
@@ -88,10 +87,10 @@ impl<'a> ToTokens for MethodBody<'a> {
8887
#fmt;
8988
fmt
9089
})
91-
.make_adapter(#value)
90+
.make_adapter(#unwrapped)
9291
}
9392
} else {
94-
value.clone()
93+
unwrapped.clone()
9594
};
9695

9796
let mut stmt = if f.meta.encoded {
@@ -108,15 +107,15 @@ impl<'a> ToTokens for MethodBody<'a> {
108107
if !{
109108
let skip_if: fn(&_) -> bool = #skip_if;
110109
skip_if
111-
}(#value)
110+
}(#unwrapped)
112111
{
113112
#stmt
114113
}
115114
};
116115
}
117116
if ty_is_option {
118117
stmt = quote_spanned! {f.ty.span()=>
119-
if ::std::option::Option::is_some({
118+
if let ::std::option::Option::Some(#bind) = ::std::option::Option::as_ref({
120119
let value = &#this.#ident;
121120
value
122121
}) {

0 commit comments

Comments
 (0)