diff --git a/protobuf/ast/ast.go b/protobuf/ast/ast.go index 5508f366..c8f74927 100644 --- a/protobuf/ast/ast.go +++ b/protobuf/ast/ast.go @@ -290,6 +290,8 @@ type Enum struct { Name string Values []*EnumValue + Deprecated bool + Up FileOrMessage // either *File or *Message } diff --git a/protobuf/parser/parser.go b/protobuf/parser/parser.go index d7def348..7fd6cd42 100644 --- a/protobuf/parser/parser.go +++ b/protobuf/parser/parser.go @@ -898,6 +898,20 @@ func (p *parser) readEnum(enum *ast.Enum) *parseError { } ev.Number = int32(num) // TODO: validate + // an enum can either end with a semicolon or have a deprecated option then a semicolon "[deprecated = true];" + tok = p.next() + if tok.value == ";" { + // that's it, the enum value is done + continue + } else if tok.value == "[" { + deprecatedOptions := []string{"deprecated", "=", "true", "]"} + for _, wantToken := range deprecatedOptions { + if err := p.readToken(wantToken); err != nil { + return err + } + } + enum.Deprecated = true + } if err := p.readToken(";"); err != nil { return err }