Enumeration Variant expressions

Syntax
EnumerationVariantExpression :
      EnumExprStruct
   | EnumExprTuple
   | EnumExprFieldless

EnumExprStruct :
   PathInExpression { EnumExprFields? }

EnumExprFields :
      EnumExprField (, EnumExprField)\* ,?

EnumExprField :
      IDENTIFIER
   | (IDENTIFIER | TUPLE_INDEX) : Expression

EnumExprTuple :
   PathInExpression (
      ( Expression (, Expression)\* ,? )?
   )

EnumExprFieldless : PathInExpression

Enumeration variants can be constructed similarly to structs, using a path to an enum variant instead of to a struct:


# #![allow(unused_variables)]
#fn main() {
# enum Message {
#     Quit,
#     WriteString(String),
#     Move { x: i32, y: i32 },
# }
let q = Message::Quit;
let w = Message::WriteString("Some string".to_string());
let m = Message::Move { x: 50, y: 200 };
#}

Enum variant expressions have the same syntax, behavior, and restrictions as struct expressions, except they do not support base update with the .. syntax.