MCPcopy Create free account
hub / github.com/csskit/csskit / parse_normal_tokens

Method parse_normal_tokens

crates/csskit_derives/src/parse.rs:102–131  ·  view source on GitHub ↗
(&self, parse_mode: FieldParseMode, wc: &mut WhereCollector)

Source from the content-addressed store, hash-verified

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 {

Callers 3

parse_tokensMethod · 0.80
renderMethod · 0.80
hoisted_preloopMethod · 0.80

Calls 2

unpack_optionMethod · 0.80
addMethod · 0.45

Tested by

no test coverage detected