(&self, parse_mode: FieldParseMode, wc: &mut WhereCollector)
| 100 | } |
| 101 | |
| 102 | fn parse_normal_tokens(&self, parse_mode: FieldParseMode, wc: &mut WhereCollector) -> TokenStream { |
| 103 | let Field { var, ty, arg, .. } = self; |
| 104 | match parse_mode { |
| 105 | FieldParseMode::Sequential => { |
| 106 | wc.add(ty); |
| 107 | if let Some(crate::darling_ext::StateArg(state_ident)) = &arg.state { |
| 108 | quote! { |
| 109 | let #var = { |
| 110 | let old_state = p.set_state(State::#state_ident); |
| 111 | let result = p.parse::<#ty>()?; |
| 112 | p.set_state(old_state); |
| 113 | result |
| 114 | }; |
| 115 | } |
| 116 | } else { |
| 117 | quote! { let #var = p.parse::<#ty>()?; } |
| 118 | } |
| 119 | } |
| 120 | FieldParseMode::AllMustOccur | FieldParseMode::OneMustOccur => { |
| 121 | let inner_ty = ty.unpack_option(); |
| 122 | wc.add(&inner_ty); |
| 123 | quote! { |
| 124 | if #var.is_none() && <#inner_ty>::peek(p, c) { |
| 125 | #var = Some(p.parse::<#inner_ty>()?); |
| 126 | continue; |
| 127 | } |
| 128 | } |
| 129 | } |
| 130 | } |
| 131 | } |
| 132 | |
| 133 | /// Emits the atom-conditional match arm used in must-occur loops. |
| 134 | fn atom_match_arm(&self) -> TokenStream { |
no test coverage detected