func (p *parser) readFieldOptions(f *ast.Field) *parseError { if err := p.readToken("["); err != nil { return err } for !p.done { tok := p.next() if tok.err != nil { return tok.err } // TODO: support more options than just default and packed switch tok.value { case "default": f.HasDefault = true if err := p.readToken("="); err != nil { return err } tok := p.next() if tok.err != nil { return tok.err } // TODO: check type switch f.TypeName { case "string": f.Default = tok.unquoted default: f.Default = tok.value } case "packed": f.HasPacked = true if err := p.readToken("="); err != nil { return err } packed, err := p.readBool() if err != nil { return err } f.Packed = packed default: return p.errorf(`got %q, want "default" or "packed"`, tok.value) } // next should be a comma or ] tok = p.next() if tok.err != nil { return tok.err } if tok.value == "," { continue } if tok.value == "]" { return nil } return p.errorf(`got %q, want "," or "]"`, tok.value) } return p.errorf("unexpected EOF while parsing field options") }