code: func (p *Parser) objectType() (*ast.ObjectType, error) {
  	defer un(trace(p, "ParseObjectType"))
  
  	// we assume that the currently scanned token is a LBRACE
  	o := &ast.ObjectType{
  		Lbrace: p.tok.Pos,
  	}
  
  	l, err := p.objectList(true)
  
  	// if we hit RBRACE, we are good to go (means we parsed all Items), if it's
  	// not a RBRACE, it's an syntax error and we just return it.
  	if err != nil && p.tok.Type != token.RBRACE {
  		return nil, err
  	}
  
  	// No error, scan and expect the ending to be a brace
  	if tok := p.scan(); tok.Type != token.RBRACE {
  		return nil, &PosError{
  			Pos: tok.Pos,
  			Err: fmt.Errorf("object expected closing RBRACE got: %s", tok.Type),
  		}
  	}
  
  	o.List = l
  	o.Rbrace = p.tok.Pos // advanced via parseObjectList
  	return o, nil
  }
docs: // objectType parses an object type and returns a ObjectType AST