]> git.proxmox.com Git - rustc.git/blame - src/doc/reference/src/expressions/enum-variant-expr.md
New upstream version 1.51.0+dfsg1
[rustc.git] / src / doc / reference / src / expressions / enum-variant-expr.md
CommitLineData
ea8adc8c
XL
1# Enumeration Variant expressions
2
0bf4aa26
XL
3> **<sup>Syntax</sup>**\
4> _EnumerationVariantExpression_ :\
5> &nbsp;&nbsp; &nbsp;&nbsp; _EnumExprStruct_\
6> &nbsp;&nbsp; | _EnumExprTuple_\
7> &nbsp;&nbsp; | _EnumExprFieldless_
8>
9> _EnumExprStruct_ :\
10> &nbsp;&nbsp; [_PathInExpression_] `{` _EnumExprFields_<sup>?</sup> `}`
11>
12> _EnumExprFields_ :\
13> &nbsp;&nbsp; &nbsp;&nbsp; _EnumExprField_ (`,` _EnumExprField_)<sup>\*</sup> `,`<sup>?</sup>
14>
15> _EnumExprField_ :\
16> &nbsp;&nbsp; &nbsp;&nbsp; [IDENTIFIER]\
17> &nbsp;&nbsp; | ([IDENTIFIER] | [TUPLE_INDEX]) `:` [_Expression_]
18>
19> _EnumExprTuple_ :\
20> &nbsp;&nbsp; [_PathInExpression_] `(`\
21> &nbsp;&nbsp; &nbsp;&nbsp; ( [_Expression_] (`,` [_Expression_])<sup>\*</sup> `,`<sup>?</sup> )<sup>?</sup>\
22> &nbsp;&nbsp; `)`
23>
24> _EnumExprFieldless_ : [_PathInExpression_]
25
26Enumeration variants can be constructed similarly to [structs], using a path to an enum
27variant instead of to a struct:
ea8adc8c
XL
28
29```rust
30# enum Message {
31# Quit,
32# WriteString(String),
33# Move { x: i32, y: i32 },
34# }
35let q = Message::Quit;
36let w = Message::WriteString("Some string".to_string());
37let m = Message::Move { x: 50, y: 200 };
38```
0bf4aa26
XL
39
40Enum variant expressions have the same syntax, behavior, and restrictions as [struct
41expressions][structs], except they do not support base update with the `..` syntax.
42
416331ca 43[IDENTIFIER]: ../identifiers.md
f9f354fc 44[TUPLE_INDEX]: ../tokens.md#tuple-index
416331ca
XL
45[_Expression_]: ../expressions.md
46[_PathInExpression_]: ../paths.md#paths-in-expressions
47[structs]: struct-expr.md