FILE
  RsStructItemImpl(STRUCT_ITEM)
    PsiElement(struct)('struct')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('S')
    PsiWhiteSpace(' ')
    RsBlockFieldsImpl(BLOCK_FIELDS)
      PsiElement({)('{')
      PsiWhiteSpace(' ')
      RsNamedFieldDeclImpl(NAMED_FIELD_DECL)
        PsiElement(identifier)('f')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiWhiteSpace(' ')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsStructItemImpl(STRUCT_ITEM)
    PsiElement(struct)('struct')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('S2')
    PsiWhiteSpace(' ')
    RsBlockFieldsImpl(BLOCK_FIELDS)
      PsiElement({)('{')
      PsiWhiteSpace(' ')
      RsNamedFieldDeclImpl(NAMED_FIELD_DECL)
        PsiElement(identifier)('foo')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiElement(,)(',')
      PsiWhiteSpace(' ')
      RsNamedFieldDeclImpl(NAMED_FIELD_DECL)
        PsiElement(identifier)('bar')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsUnitTypeImpl(UNIT_TYPE)
          PsiElement(()('(')
          PsiElement())(')')
      PsiWhiteSpace(' ')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('main')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsIfExprImpl(IF_EXPR)
              PsiElement(if)('if')
              PsiWhiteSpace(' ')
              RsConditionImpl(CONDITION)
                RsLitExprImpl(LIT_EXPR)
                  PsiElement(BOOL_LITERAL)('true')
              PsiWhiteSpace(' ')
              RsBlockImpl(BLOCK)
                PsiElement({)('{')
                PsiWhiteSpace(' ')
                RsExprStmtImpl(EXPR_STMT)
                  RsStructLiteralImpl(STRUCT_LITERAL)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('S')
                    PsiWhiteSpace(' ')
                    RsStructLiteralBodyImpl(STRUCT_LITERAL_BODY)
                      PsiElement({)('{')
                      RsStructLiteralFieldImpl(STRUCT_LITERAL_FIELD)
                        PsiElement(identifier)('f')
                        PsiElement(:)(':')
                        RsLitExprImpl(LIT_EXPR)
                          PsiElement(INTEGER_LITERAL)('1')
                      PsiElement(})('}')
                  PsiElement(;)(';')
                PsiWhiteSpace(' ')
                RsExprStmtImpl(EXPR_STMT)
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(BOOL_LITERAL)('true')
                PsiWhiteSpace(' ')
                PsiElement(})('}')
              PsiWhiteSpace(' ')
              RsElseBranchImpl(ELSE_BRANCH)
                PsiElement(else)('else')
                PsiWhiteSpace(' ')
                RsBlockImpl(BLOCK)
                  PsiElement({)('{')
                  PsiWhiteSpace(' ')
                  RsExprStmtImpl(EXPR_STMT)
                    RsStructLiteralImpl(STRUCT_LITERAL)
                      RsPathImpl(PATH)
                        PsiElement(identifier)('S')
                      PsiWhiteSpace(' ')
                      RsStructLiteralBodyImpl(STRUCT_LITERAL_BODY)
                        PsiElement({)('{')
                        RsStructLiteralFieldImpl(STRUCT_LITERAL_FIELD)
                          PsiElement(identifier)('f')
                          PsiElement(:)(':')
                          RsLitExprImpl(LIT_EXPR)
                            PsiElement(INTEGER_LITERAL)('1')
                        PsiElement(})('}')
                    PsiElement(;)(';')
                  PsiWhiteSpace(' ')
                  RsExprStmtImpl(EXPR_STMT)
                    RsLitExprImpl(LIT_EXPR)
                      PsiElement(BOOL_LITERAL)('false')
                  PsiWhiteSpace(' ')
                  PsiElement(})('}')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiWhiteSpace('\n        ')
            RsExprStmtImpl(EXPR_STMT)
              RsUnitExprImpl(UNIT_EXPR)
                PsiElement(()('(')
                PsiElement())(')')
            PsiWhiteSpace('\n    ')
            PsiElement(})('}')
          PsiWhiteSpace(' ')
          RsElseBranchImpl(ELSE_BRANCH)
            PsiElement(else)('else')
            PsiWhiteSpace(' ')
            RsBlockImpl(BLOCK)
              PsiElement({)('{')
              PsiWhiteSpace('\n        ')
              RsExprStmtImpl(EXPR_STMT)
                RsUnitExprImpl(UNIT_EXPR)
                  PsiElement(()('(')
                  PsiElement())(')')
              PsiWhiteSpace('\n    ')
              PsiElement(})('}')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBlockExprImpl(BLOCK_EXPR)
              RsBlockImpl(BLOCK)
                PsiElement({)('{')
                RsExprStmtImpl(EXPR_STMT)
                  RsStructLiteralImpl(STRUCT_LITERAL)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('S')
                    PsiWhiteSpace(' ')
                    RsStructLiteralBodyImpl(STRUCT_LITERAL_BODY)
                      PsiElement({)('{')
                      RsStructLiteralFieldImpl(STRUCT_LITERAL_FIELD)
                        PsiElement(identifier)('f')
                        PsiElement(:)(':')
                        RsLitExprImpl(LIT_EXPR)
                          PsiElement(INTEGER_LITERAL)('1')
                      PsiElement(})('}')
                  PsiElement(;)(';')
                PsiWhiteSpace(' ')
                RsLetDeclImpl(LET_DECL)
                  PsiElement(let)('let')
                  PsiWhiteSpace(' ')
                  RsPatWildImpl(PAT_WILD)
                    PsiElement(_)('_')
                  PsiWhiteSpace(' ')
                  PsiElement(=)('=')
                  PsiWhiteSpace(' ')
                  RsStructLiteralImpl(STRUCT_LITERAL)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('S')
                    PsiWhiteSpace(' ')
                    RsStructLiteralBodyImpl(STRUCT_LITERAL_BODY)
                      PsiElement({)('{')
                      RsStructLiteralFieldImpl(STRUCT_LITERAL_FIELD)
                        PsiElement(identifier)('f')
                        PsiElement(:)(':')
                        RsLitExprImpl(LIT_EXPR)
                          PsiElement(INTEGER_LITERAL)('1')
                      PsiElement(})('}')
                  PsiElement(;)(';')
                PsiWhiteSpace(' ')
                RsExprStmtImpl(EXPR_STMT)
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(BOOL_LITERAL)('true')
                PsiElement(})('}')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            RsExprStmtImpl(EXPR_STMT)
              RsUnitExprImpl(UNIT_EXPR)
                PsiElement(()('(')
                PsiElement())(')')
            PsiElement(})('}')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsBlockExprImpl(BLOCK_EXPR)
                RsBlockImpl(BLOCK)
                  PsiElement({)('{')
                  PsiWhiteSpace(' ')
                  RsExprStmtImpl(EXPR_STMT)
                    RsLitExprImpl(LIT_EXPR)
                      PsiElement(INTEGER_LITERAL)('1')
                  PsiWhiteSpace(' ')
                  PsiElement(})('}')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(==)('==')
              PsiWhiteSpace(' ')
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('1')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiWhiteSpace(' ')
            RsExprStmtImpl(EXPR_STMT)
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('1')
              PsiElement(;)(';')
            PsiWhiteSpace(' ')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsBlockExprImpl(BLOCK_EXPR)
                PsiElement(unsafe)('unsafe')
                PsiWhiteSpace(' ')
                RsBlockImpl(BLOCK)
                  PsiElement({)('{')
                  PsiWhiteSpace(' ')
                  RsExprStmtImpl(EXPR_STMT)
                    RsLitExprImpl(LIT_EXPR)
                      PsiElement(INTEGER_LITERAL)('0')
                  PsiWhiteSpace(' ')
                  PsiElement(})('}')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(==)('==')
              PsiWhiteSpace(' ')
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('0')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiWhiteSpace(' ')
            RsExprStmtImpl(EXPR_STMT)
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('0')
              PsiElement(;)(';')
            PsiWhiteSpace(' ')
            PsiElement(})('}')
      PsiWhiteSpace('\n\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatTupImpl(PAT_TUP)
          PsiElement(()('(')
          RsPatIdentImpl(PAT_IDENT)
            RsPatBindingImpl(PAT_BINDING)
              PsiElement(identifier)('foo')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          RsPatIdentImpl(PAT_IDENT)
            RsPatBindingImpl(PAT_BINDING)
              PsiElement(identifier)('bar')
          PsiElement())(')')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsTupleExprImpl(TUPLE_EXPR)
          PsiElement(()('(')
          RsLitExprImpl(LIT_EXPR)
            PsiElement(INTEGER_LITERAL)('1')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          RsUnitExprImpl(UNIT_EXPR)
            PsiElement(()('(')
            PsiElement())(')')
          PsiElement())(')')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('s2')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsStructLiteralImpl(STRUCT_LITERAL)
          RsPathImpl(PATH)
            PsiElement(identifier)('S2')
          PsiWhiteSpace(' ')
          RsStructLiteralBodyImpl(STRUCT_LITERAL_BODY)
            PsiElement({)('{')
            PsiWhiteSpace(' ')
            RsStructLiteralFieldImpl(STRUCT_LITERAL_FIELD)
              PsiElement(identifier)('foo')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            RsStructLiteralFieldImpl(STRUCT_LITERAL_FIELD)
              PsiElement(identifier)('bar')
            PsiWhiteSpace(' ')
            PsiElement(})('}')
        PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
