(&mut self)
| 280 | } |
| 281 | |
| 282 | fn parse_typevalue(&mut self) -> Result<TypeValue> { |
| 283 | let pos = self.pos(); |
| 284 | self.expect_lparen()?; |
| 285 | if self.eat_sym_str("primitive")? { |
| 286 | let primitive_ident = self.parse_ident()?; |
| 287 | self.expect_rparen()?; |
| 288 | Ok(TypeValue::Primitive(primitive_ident, pos)) |
| 289 | } else if self.eat_sym_str("enum")? { |
| 290 | let mut variants = vec![]; |
| 291 | while !self.is_rparen() { |
| 292 | let variant = self.parse_type_variant()?; |
| 293 | variants.push(variant); |
| 294 | } |
| 295 | self.expect_rparen()?; |
| 296 | Ok(TypeValue::Enum(variants, pos)) |
| 297 | } else if self.eat_sym_str("struct")? { |
| 298 | let fields = self.parse_fields()?; |
| 299 | self.expect_rparen()?; |
| 300 | Ok(TypeValue::Struct(fields, pos)) |
| 301 | } else { |
| 302 | Err(self.error(pos, "Unknown type definition".to_string())) |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | fn parse_type_variant(&mut self) -> Result<Variant> { |
| 307 | if self.is_sym() { |
no test coverage detected