luci: Index | Files

package flagpb

import ""

Package flagpb defines a flag format for protobuf messages, implements a parser and a formatter.

Currently flagpb supports only untyped messages, not proto.Message. Support for the latter could be added too.


Flag syntax by example. First line is flagpb, second is jsonpb.

-x=42 -b -s hello
{"x": 42, "b": true, "s": "hello"}

-m.x 3 -m.s world
{"m": {"x": 3, "s": "world"}}

-rx 1 -rx 2
{"rx": [1, 2]}

-rm.x 1 -rm -rm.x 2
{"rm": [{"x": 1}, {"x": 2}]}

where x fields are int32, m are message fields, b are boolean and s are strings. Fields with "r" prefix are repeated.

Bytes field values are decoded from hex, e.g. "FF02AB".

Enum field values can be specified by enum member name or number.


Package Files

doc.go generate.go marshal.go resolver.go unmarshal.go

func MarshalUntyped Uses

func MarshalUntyped(msg map[string]interface{}) ([]string, error)

MarshalUntyped marshals a key-value map to flags.

func UnmarshalMessage Uses

func UnmarshalMessage(flags []string, resolver Resolver, msg proto.Message) error

UnmarshalMessage unmarshals the proto message from flags.

The descriptor set should be obtained from the `cproto` compiled packages' FileDescriptorSet() method.

func UnmarshalUntyped Uses

func UnmarshalUntyped(flags []string, desc *descriptor.DescriptorProto, resolver Resolver) (map[string]interface{}, error)

UnmarshalUntyped unmarshals a key-value map from flags using a protobuf message descriptor.

type Resolver Uses

type Resolver interface {
    // Resolve resolves a type name to
    // *descriptor.DescriptorProto or *descriptor.EnumDescriptorProto.
    Resolve(name string) interface{}

Resolver resolves type names.

func NewResolver Uses

func NewResolver(set *descriptor.FileDescriptorSet) Resolver

NewResolver creates a resolver for all types in a file descriptor set. Resolving time complexity is linear.

Package flagpb imports 11 packages (graph). Updated 2020-11-26. Refresh now. Tools for package owners.