A protoc plugin that generates fieldmask paths as static type properties for proto messages, which elimantes the usage of error-prone strings.
For example, given the following proto messages:
syntax = "proto3";
package example;
option go_package = "example/;example";
import "google/type/date.proto";
message Foo {
string baz = 1;
int32 xyz = 2;
Bar my_bar = 3;
google.type.Date some_date = 4;
}
message Bar {
string some_field = 1;
bool another_field = 2;
}
fieldmasks paths can be used as follows:
foo := &example.Foo{}
// Prints "baz"
fmt.Println(foo.FieldMaskPaths().Baz())
// Prints "xyz"
fmt.Println(foo.FieldMaskPaths().Xyz())
// Prints "my_bar"
fmt.Println(foo.FieldMaskPaths().MyBar().String())
// Since baz is a nested message, we can print a nested path - "my_bar.some_field"
fmt.Println(foo.FieldMaskPaths().MyBar().SomeField())
// Thirdparty messages work the same way:
// Prints "some_date"
fmt.Println(foo.FieldMaskPaths().SomeDate().String())
// Prints "some_date.year"
fmt.Println(foo.FieldMaskPaths().SomeDate().Year())
The plugin can be downloaded from the release page, and should be ideally installed somewhere available in your $PATH.
protoc --fieldmask_out=gen protos/example.proto
# If the plugin is not in your $PATH:
protoc --fieldmask_out=out_dir protos/example.proto --plugin=protoc-gen-fieldmask=/path/to/protoc-gen-fieldmask
The following parameters can be set by passing --fieldmask_opt to the command:
maxdepth: This option is relevant for a recursive message case.7.go.maxdepth).Go
85.4%
Earthly
14.6%
A protoc plugin that generates fieldmask paths as static type properties for proto messages, which elimantes the usage of error-prone strings.
For example, given the following proto messages:
syntax = "proto3";
package example;
option go_package = "example/;example";
import "google/type/date.proto";
message Foo {
string baz = 1;
int32 xyz = 2;
Bar my_bar = 3;
google.type.Date some_date = 4;
}
message Bar {
string some_field = 1;
bool another_field = 2;
}
fieldmasks paths can be used as follows:
foo := &example.Foo{}
// Prints "baz"
fmt.Println(foo.FieldMaskPaths().Baz())
// Prints "xyz"
fmt.Println(foo.FieldMaskPaths().Xyz())
// Prints "my_bar"
fmt.Println(foo.FieldMaskPaths().MyBar().String())
// Since baz is a nested message, we can print a nested path - "my_bar.some_field"
fmt.Println(foo.FieldMaskPaths().MyBar().SomeField())
// Thirdparty messages work the same way:
// Prints "some_date"
fmt.Println(foo.FieldMaskPaths().SomeDate().String())
// Prints "some_date.year"
fmt.Println(foo.FieldMaskPaths().SomeDate().Year())
The plugin can be downloaded from the release page, and should be ideally installed somewhere available in your $PATH.
protoc --fieldmask_out=gen protos/example.proto
# If the plugin is not in your $PATH:
protoc --fieldmask_out=out_dir protos/example.proto --plugin=protoc-gen-fieldmask=/path/to/protoc-gen-fieldmask
The following parameters can be set by passing --fieldmask_opt to the command:
maxdepth: This option is relevant for a recursive message case.7.go.maxdepth).Go
85.4%
Earthly
14.6%