MCPcopy Create free account
hub / github.com/PerroEngine/Perro / parse_mask

Method parse_mask

perro_source/core/perro_animation/src/anim_tree.rs:349–380  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

347 }
348
349 fn parse_mask(&mut self) -> Result<AnimationTreeMask, String> {
350 self.expect(Token::LBrace)?;
351 let mut mask = AnimationTreeMask::default();
352 loop {
353 if self.current == Token::RBrace {
354 self.advance();
355 break;
356 }
357 let key = self.expect_ident()?;
358 if matches!(self.current, Token::Equals | Token::Colon) {
359 self.advance();
360 } else {
361 return Err(format!(
362 "expected `=` or `:` in mask, got {:?}",
363 self.current
364 ));
365 }
366 let values = self.parse_name_list()?;
367 match key.as_str() {
368 "objects" => {
369 mask.objects = Cow::Owned(values.into_iter().map(Cow::Owned).collect())
370 }
371 "fields" => mask.fields = Cow::Owned(values.into_iter().map(Cow::Owned).collect()),
372 "bones" => mask.bones = Cow::Owned(values.into_iter().map(Cow::Owned).collect()),
373 _ => {}
374 }
375 if self.current == Token::Comma {
376 self.advance();
377 }
378 }
379 Ok(mask)
380 }
381
382 fn parse_name_list(&mut self) -> Result<Vec<String>, String> {
383 self.expect(Token::LBracket)?;

Callers 3

parse_blend_kindMethod · 0.80
parse_add_kindMethod · 0.80
parse_invert_kindMethod · 0.80

Calls 5

parse_name_listMethod · 0.80
expectMethod · 0.45
advanceMethod · 0.45
expect_identMethod · 0.45
as_strMethod · 0.45

Tested by

no test coverage detected