func Walk(proto *Proto, handlers ...Handler)
Walk recursively pays a visit to all Visitees of a Proto and calls each handler with it.
Comment one or more comment text lines, either in c- or c++ style.
type Comment struct { Position scanner.Position // Lines are comment text lines without prefixes //, ///, /* or suffix */ Lines []string Cstyle bool // refers to /* ... */, C++ style is using // ExtraSlash bool // is true if the comment starts with 3 slashes }
func (c *Comment) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (c *Comment) Merge(other *Comment)
Merge appends all lines from the argument comment.
func (c Comment) Message() string
Message returns the first line or empty if no lines.
Documented is for types that may have an associated comment (not inlined).
type Documented interface { Doc() *Comment }
Enum definition consists of a name and an enum body.
type Enum struct { Position scanner.Position Comment *Comment Name string Elements []Visitee Parent Visitee }
func (e *Enum) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (e *Enum) Doc() *Comment
Doc is part of Documented
EnumField is part of the body of an Enum.
type EnumField struct { Position scanner.Position Comment *Comment Name string Integer int // ValueOption is deprecated, use Elements instead ValueOption *Option Elements []Visitee // such as Option and Comment InlineComment *Comment Parent Visitee }
func (f *EnumField) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (f *EnumField) Doc() *Comment
Doc is part of Documented
func (f *EnumField) IsDeprecated() bool
IsDeprecated returns true if the option "deprecated" is set with value "true".
Extensions declare that a range of field numbers in a message are available for third-party extensions. proto2 only
type Extensions struct { Position scanner.Position Comment *Comment Ranges []Range InlineComment *Comment Parent Visitee }
func (e *Extensions) Accept(v Visitor)
Accept dispatches the call to the visitor.
Field is an abstract message field.
type Field struct { Position scanner.Position Comment *Comment Name string Type string Sequence int Options []*Option InlineComment *Comment Parent Visitee }
func (f *Field) IsDeprecated() bool
IsDeprecated returns true if the option "deprecated" is set with value "true".
Group represents a (proto2 only) group. https://developers.google.com/protocol-buffers/docs/reference/proto2-spec#group_field
type Group struct { Position scanner.Position Comment *Comment Name string Optional bool Repeated bool Required bool Sequence int Elements []Visitee Parent Visitee }
func (g *Group) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (g *Group) Doc() *Comment
Doc is part of Documented
Handler is a type of function that accepts a Visitee.
type Handler func(v Visitee)
func WithEnum(apply func(*Enum)) Handler
WithEnum returns a Handler that will call the apply function when the Visitee is a Enum.
func WithImport(apply func(*Import)) Handler
WithImport returns a Handler that will call the apply function when the Visitee is an Import.
func WithMessage(apply func(*Message)) Handler
WithMessage returns a Handler that will call the apply function when the Visitee is a Message.
func WithNormalField(apply func(*NormalField)) Handler
WithNormalField returns a Handler that will call the apply function when the Visitee is a NormalField.
func WithOneof(apply func(*Oneof)) Handler
WithOneof returns a Handler that will call the apply function when the Visitee is a Oneof.
func WithOption(apply func(*Option)) Handler
WithOption returns a Handler that will call the apply function when the Visitee is a Option.
func WithPackage(apply func(*Package)) Handler
WithPackage returns a Handler that will call the apply function when the Visitee is a Package.
func WithRPC(apply func(*RPC)) Handler
WithRPC returns a Handler that will call the apply function when the Visitee is a RPC.
func WithService(apply func(*Service)) Handler
WithService returns a Handler that will call the apply function when the Visitee is a Service.
Import holds a filename to another .proto definition.
type Import struct { Position scanner.Position Comment *Comment Filename string Kind string // weak, public, <empty> InlineComment *Comment Parent Visitee }
func (i *Import) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (i *Import) Doc() *Comment
Doc is part of Documented
Literal represents intLit,floatLit,strLit or boolLit or a nested structure thereof.
type Literal struct { Position scanner.Position Source string IsString bool // It not nil then the entry is actually a comment with line(s) // modelled this way because Literal is not an elementContainer Comment *Comment // The rune use to delimit the string value (only valid iff IsString) QuoteRune rune // literal value can be an array literal value (even nested) Array []*Literal // literal value can be a map of literals (even nested) // DEPRECATED: use OrderedMap instead Map map[string]*Literal // literal value can be a map of literals (even nested) // this is done as pairs of name keys and literal values so the original ordering is preserved OrderedMap LiteralMap }
func (l Literal) SourceRepresentation() string
SourceRepresentation returns the source (use the same rune that was used to delimit the string).
LiteralMap is like a map of *Literal but preserved the ordering. Can be iterated yielding *NamedLiteral values.
type LiteralMap []*NamedLiteral
func (m LiteralMap) Get(key string) (*Literal, bool)
Get returns a Literal from the map.
MapField represents a map entry in a message.
type MapField struct { *Field KeyType string }
func (f *MapField) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (f *MapField) Doc() *Comment
Doc is part of Documented
Message consists of a message name and a message body.
type Message struct { Position scanner.Position Comment *Comment Name string IsExtend bool Elements []Visitee Parent Visitee }
func (m *Message) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (m *Message) Doc() *Comment
Doc is part of Documented
NamedLiteral associates a name with a Literal
type NamedLiteral struct { *Literal Name string // PrintsColon is true when the Name must be printed with a colon suffix PrintsColon bool }
NoopVisitor is a no-operation visitor that can be used when creating your own visitor that is interested in only one or a few types. It implements the Visitor interface.
type NoopVisitor struct{}
func (n NoopVisitor) VisitComment(e *Comment)
VisitComment is part of Visitor interface
func (n NoopVisitor) VisitEnum(e *Enum)
VisitEnum is part of Visitor interface
func (n NoopVisitor) VisitEnumField(i *EnumField)
VisitEnumField is part of Visitor interface
func (n NoopVisitor) VisitExtensions(e *Extensions)
VisitExtensions is part of Visitor interface
func (n NoopVisitor) VisitGroup(g *Group)
VisitGroup is part of Visitor interface
func (n NoopVisitor) VisitImport(i *Import)
VisitImport is part of Visitor interface
func (n NoopVisitor) VisitMapField(f *MapField)
VisitMapField is part of Visitor interface
func (n NoopVisitor) VisitMessage(m *Message)
VisitMessage is part of Visitor interface
func (n NoopVisitor) VisitNormalField(i *NormalField)
VisitNormalField is part of Visitor interface
func (n NoopVisitor) VisitOneof(o *Oneof)
VisitOneof is part of Visitor interface
func (n NoopVisitor) VisitOneofField(o *OneOfField)
VisitOneofField is part of Visitor interface
func (n NoopVisitor) VisitOption(o *Option)
VisitOption is part of Visitor interface
func (n NoopVisitor) VisitPackage(p *Package)
VisitPackage is part of Visitor interface
func (n NoopVisitor) VisitRPC(r *RPC)
VisitRPC is part of Visitor interface
func (n NoopVisitor) VisitReserved(r *Reserved)
VisitReserved is part of Visitor interface
func (n NoopVisitor) VisitService(v *Service)
VisitService is part of Visitor interface
func (n NoopVisitor) VisitSyntax(s *Syntax)
VisitSyntax is part of Visitor interface
NormalField represents a field in a Message.
type NormalField struct { *Field Repeated bool Optional bool // proto2 Required bool // proto2 }
func (f *NormalField) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (f *NormalField) Doc() *Comment
Doc is part of Documented
OneOfField is part of Oneof.
type OneOfField struct { *Field }
func (o *OneOfField) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (o *OneOfField) Doc() *Comment
Doc is part of Documented Note: although Doc() is defined on Field, it must be implemented here as well.
Oneof is a field alternate.
type Oneof struct { Position scanner.Position Comment *Comment Name string Elements []Visitee Parent Visitee }
func (o *Oneof) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (o *Oneof) Doc() *Comment
Doc is part of Documented
Option is a protoc compiler option
type Option struct { Position scanner.Position Comment *Comment Name string Constant Literal IsEmbedded bool // AggregatedConstants is DEPRECATED. These Literals are populated into Constant.OrderedMap AggregatedConstants []*NamedLiteral InlineComment *Comment Parent Visitee }
func (o *Option) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (o *Option) Doc() *Comment
Doc is part of Documented
Package specifies the namespace for all proto elements.
type Package struct { Position scanner.Position Comment *Comment Name string InlineComment *Comment Parent Visitee }
func (p *Package) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (p *Package) Doc() *Comment
Doc is part of Documented
Parser represents a parser.
type Parser struct {
// contains filtered or unexported fields
}
func NewParser(r io.Reader) *Parser
NewParser returns a new instance of Parser.
func (p *Parser) Filename(f string)
Filename is for reporting. Optional.
func (p *Parser) Parse() (*Proto, error)
Parse parses a proto definition. May return a parse or scanner error.
Proto represents a .proto definition
type Proto struct { Filename string Elements []Visitee }
func (proto *Proto) Accept(v Visitor)
Accept dispatches the call to the visitor.
RPC represents an rpc entry in a message.
type RPC struct { Position scanner.Position Comment *Comment Name string RequestType string StreamsRequest bool ReturnsType string StreamsReturns bool Elements []Visitee InlineComment *Comment Parent Visitee // Options field is DEPRECATED, use Elements instead. Options []*Option }
func (r *RPC) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (r *RPC) Doc() *Comment
Doc is part of Documented
Range is to specify number intervals (with special end value "max")
type Range struct { From, To int Max bool }
func (r Range) SourceRepresentation() string
SourceRepresentation return a single number if from = to. Returns <from> to <to> otherwise unless Max then return <from> to max.
Reserved statements declare a range of field numbers or field names that cannot be used in a message.
type Reserved struct { Position scanner.Position Comment *Comment Ranges []Range FieldNames []string InlineComment *Comment Parent Visitee }
func (r *Reserved) Accept(v Visitor)
Accept dispatches the call to the visitor.
Service defines a set of RPC calls.
type Service struct { Position scanner.Position Comment *Comment Name string Elements []Visitee Parent Visitee }
func (s *Service) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (s *Service) Doc() *Comment
Doc is part of Documented
Syntax should have value "proto"
type Syntax struct { Position scanner.Position Comment *Comment Value string InlineComment *Comment Parent Visitee }
func (s *Syntax) Accept(v Visitor)
Accept dispatches the call to the visitor.
func (s *Syntax) Doc() *Comment
Doc is part of Documented
Visitee is implemented by all Proto elements.
type Visitee interface { Accept(v Visitor) // contains filtered or unexported methods }
Visitor is for dispatching Proto elements.
type Visitor interface { //VisitProto(p *Proto) VisitMessage(m *Message) VisitService(v *Service) VisitSyntax(s *Syntax) VisitPackage(p *Package) VisitOption(o *Option) VisitImport(i *Import) VisitNormalField(i *NormalField) VisitEnumField(i *EnumField) VisitEnum(e *Enum) VisitComment(e *Comment) VisitOneof(o *Oneof) VisitOneofField(o *OneOfField) VisitReserved(r *Reserved) VisitRPC(r *RPC) VisitMapField(f *MapField) // proto2 VisitGroup(g *Group) VisitExtensions(e *Extensions) }