# Tuple struct field initializer

struct S(u8); fn f() { S { 0: 1 }; }

==>

SourceFile(
  StructItem(struct, TypeIdentifier, OrderedFieldDeclarationList(TypeIdentifier)),
  FunctionItem(
    fn,
    BoundIdentifier,
    ParamList,
    Block(
      ExpressionStatement(
        StructExpression(
          TypeIdentifier,
          FieldInitializerList(FieldInitializer(Integer, Integer)))))))

# Attributed and reordered tuple struct field initializers

struct S(u8, u8); fn f() { S { 1: 2, #[cfg(all())] 0: 1 }; }

==>

SourceFile(
  StructItem(
    struct,
    TypeIdentifier,
    OrderedFieldDeclarationList(TypeIdentifier, TypeIdentifier)),
  FunctionItem(
    fn,
    BoundIdentifier,
    ParamList,
    Block(
      ExpressionStatement(
        StructExpression(
          TypeIdentifier,
          FieldInitializerList(
            FieldInitializer(Integer, Integer),
            FieldInitializer(
              Attribute(
                MetaItem(Identifier, ParenthesizedTokens(Identifier, ParenthesizedTokens))),
              Integer,
              Integer)))))))

# Tuple struct field initializer with functional update

struct S(u8, u8); fn f(s: S) -> S { S { 1: 2, ..s } }

==>

SourceFile(
  StructItem(
    struct,
    TypeIdentifier,
    OrderedFieldDeclarationList(TypeIdentifier, TypeIdentifier)),
  FunctionItem(
    fn,
    BoundIdentifier,
    ParamList(Parameter(BoundIdentifier, TypeIdentifier)),
    TypeIdentifier,
    Block(
      ExpressionStatement(
        StructExpression(
          TypeIdentifier,
          FieldInitializerList(
            FieldInitializer(Integer, Integer),
            BaseFieldInitializer(Identifier)))))))
