README
¶
protoc-gen-go-validate
Plugin for the Google Protocol Buffers compiler protoc
that generates common validation code for Golang applications.
Install
$ go install github.com/picatz/protoc-gen-go-validate
...
$ make install
...
Usage
$ protoc -I protos --go_out=. --go-validate_out=. example.proto
...
Note: you can use the
--go-validate_opt=module=github.com/owner/module
flag when using Go modules.
All validation protobuf options are documented here.
Validate Message Fields
Protobuf message fields can use (validate.field)
field options.
-
(validate.field).message
: Define validation rules for message fields.message Outer { message Inner {} Inner inner = 1 [(validate.field).message = { required: true, }]; }
-
(validate.field).string
: Define validation rules for message fields of typestring
.message CreateUserRequest { string name = 1 [(validate.field).string = { min: 1, max: 255, allow_space: false, ascii_only: true, }]; string password = 2 [(validate.field).string = { min: 8, max: 255, }]; }
-
(validate.field).bytes
: Define validation rules for message fields of typebytes
.message UploadBlobRequest { bytes blob = 1 [(validate.field).bytes = { min: 1, max: 1024, }]; }
-
(validate.field).uint32
: Define validation rules for message fields of typeuint32
.message AddPointsRequest { uint32 points = 1 [(validate.field).uint32 = { gte: 1, lte: 100, }]; }
-
(validate.field).uint64
: Define validation rules for message fields of typeuint64
.message AddPointsRequest { uint64 points = 1 [(validate.field).uint64 = { gte: 1, lte: 100, }]; }
-
(validate.field).int32
: Define validation rules for message fields of typeint32
.message AddPointsRequest { int32 points = 1 [(validate.field).int32 = { gte: 1, lte: 100, }]; }
-
(validate.field).int64
: Define validation rules for message fields of typeint64
.message AddPointsRequest { int64 points = 1 [(validate.field).int64 = { gte: 1, lte: 100, }]; }
-
(validate.field).float
: Define validation rules for message fields of typefloat32
.message AddFuelRequest { float ammount = 1 [(validate.field).float = { gt: 0, }]; }
-
(validate.field).double
: Define validation rules for message fields of typedouble
.message AddFuelRequest { double ammount = 1 [(validate.field).double = { gt: 0, }]; }
-
(validate.field).repeated
: Define validation rules for message fields of typerepeated
.message AddFuelRequest { repeated string fuel_types = 1 [(validate.field).repeated = { min: 1, max: 3, }]; }
String Validation Rules
len
: Require field value have a specific length.message ReadUserByIDRequest { string uuid = 1 [(validate.field).string.len = 16]; }
gt
: Require field value be greater than a specific length.message ReadUserByEmailRequest { string email = 1 [(validate.field).string.gt = 0]; }
lt
: Require field value be less than a specific length.message RegisterUserRequest { string email = 1 [(validate.field).string.lt = 256]; }
contains
: Require field value contains a specific sub-string.message RegisterUserRequest { string email = 1 [(validate.field).string.contains = "@"]; }
not_contains
: Require field value does not contain a specific sub-string.message RegisterUserRequest { string name = 1 [(validate.field).string.not_contains = " "]; }
prefix
: Require field value has a specific prefix.message TweetAtUserRequest { string name = 1 [(validate.field).string.prefix = "@"]; }
suffix
: Require field value has a specific suffix.message WriteRequest { string paragraph = 1 [(validate.field).string.suffix = "."]; }
allow_space
: Allow (or not) spaces.message RegisterUserRequest { string name = 1 [(validate.field).string.allow_spaces = false]; }
ascii_only
: Require field value uses only ASCII characters.message RegisterUserRequest { string name = 1 [(validate.field).string.ascii_only = true]; }
min
: Require field value have a specific minimum length.message RegisterUserRequest { string name = 1 [(validate.field).string.min = 1]; }
max
: Require field value have a specific maximum length.message RegisterUserRequest { string name = 1 [(validate.field).string.max = 255]; }
match
: Require field value match a specific regular expression.message RegisterUserRequest { string name = 1 [(validate.field).string.match = "[[:alpha:]]"]; }
not_match
: Require field value does not match a specific regular expression.message RegisterUserRequest { string non_alpha_name = 1 [(validate.field).string.not_match = "[[:alpha:]]"]; }
required
: Require a non-empty string.message RegisterUserRequest { string name = 1 [(validate.field).string.required = true]; }
Bytes Validation Rules
len
: Require field value have a specific length.message CheckCertificateRequest { bytes pem_block = 1 [(validate.field).bytes.len = 2000]; }
gt
: Require field value be greater than a specific length.message SignMessageRequest { bytes msg = 1 [(validate.field).bytes.gt = 0]; }
lt
: Require field value be less than a specific length.message SignMessageRequest { bytes msg = 1 [(validate.field).bytes.lt = 5000]; }
gte
: Require field value be greater than or equal to a specific length.message SignMessageRequest { bytes msg = 1 [(validate.field).bytes.gte = 1]; }
lte
: Require field value be less than or equal to a specific length.message SignMessageRequest { bytes msg = 1 [(validate.field).bytes.lte = 500]; }
min
: Require field value to have a specific minimum length.message SignMessageRequest { bytes msg = 1 [(validate.field).bytes.min = 1]; }
max
: Require field value to have a specific maximum length.message SignMessageRequest { bytes msg = 1 [(validate.field).bytes.max = 500]; }
prefix
: Require field value to have a specific prefix.message StoreKeyRequest { bytes key = 1 [(validate.field).bytes.prefix = "-----BEGIN PRIVATE KEY-----\n"]; }
suffix
: Require field value to have a specific suffix.message StoreKeyRequest { bytes key = 1 [(validate.field).bytes.suffix = "-----END PRIVATE KEY-----\n"]; }
required
: Require a non-empty chunk of bytes.message StoreKeyRequest { bytes key = 1 [(validate.field).bytes.required = true]; }
UInt32 Validation Rules
eq
: Require field value to equal a specific value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.eq = 10]; }
gt
: Require field value be greater than a specific value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.gt = 0]; }
lt
: Require field value be less than a specific value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.lt = 1000]; }
gte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.gte = 1]; }
lte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.lte = 100]; }
min
: Require field value to have a specific minimum value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.min = 1]; }
max
: Require field value to have a specific maximum value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.min = 1]; }
required
: Require field to have a non-empty and non-zero value.message AwardPointsRequest { uint32 points = 1 [(validate.field).uint32.required = true]; }
Int32 Validation Rules
eq
: Require field value to equal a specific value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.eq = 10]; }
gt
: Require field value be greater than a specific value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.gt = 0]; }
lt
: Require field value be less than a specific value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.lt = 1000]; }
gte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.gte = 1]; }
lte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.lte = 100]; }
min
: Require field value to have a specific minimum value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.min = 1]; }
max
: Require field value to have a specific maximum value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.min = 1]; }
required
: Require field to have a non-empty and non-zero value.message AwardPointsRequest { int32 points = 1 [(validate.field).int32.required = true]; }
UInt64 Validation Rules
eq
: Require field value to equal a specific value.message AwardPointsRequest { uint64 points = 1 [(validate.field).uint64.eq = 10]; }
gt
: Require field value be greater than a specific value.message AwardPointsRequest { uint64 points = 1 [(validate.field).uint64.gt = 0]; }
lt
: Require field value be less than a specific value.message AwardPointsRequest { uint64 points = 1 [(validate.field).uint64.lt = 1000]; }
gte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { uint64 points = 1 [(validate.field).uint64.gte = 1]; }
lte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { uint64 points = 1 [(validate.field).uint64.lte = 100]; }
min
: Require field value to have a specific minimum value.message AwardPointsRequest { uint points = 1 [(validate.field).uint64.min = 1]; }
max
: Require field value to have a specific maximum value.message AwardPointsRequest { uint64 points = 1 [(validate.field).uint64.min = 1]; }
required
: Require field to have a non-empty and non-zero value.message AwardPointsRequest { uint64 points = 1 [(validate.field).uint64.required = true]; }
Int64 Validation Rules
eq
: Require field value to equal a specific value.message AwardPointsRequest { int64 points = 1 [(validate.field).int64.eq = 10]; }
gt
: Require field value be greater than a specific value.message AwardPointsRequest { int64 points = 1 [(validate.field).int64.gt = 0]; }
lt
: Require field value be less than a specific value.message AwardPointsRequest { int64 points = 1 [(validate.field).int64.lt = 1000]; }
gte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { int64 points = 1 [(validate.field).int64.gte = 1]; }
lte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { int64 points = 1 [(validate.field).int64.lte = 100]; }
min
: Require field value to have a specific minimum value.message AwardPointsRequest { uint points = 1 [(validate.field).int64.min = 1]; }
max
: Require field value to have a specific maximum value.message AwardPointsRequest { int64 points = 1 [(validate.field).int64.min = 1]; }
required
: Require field to have a non-empty and non-zero value.message AwardPointsRequest { int64 points = 1 [(validate.field).int64.required = true]; }
Float Validation Rules
eq
: Require field value to equal a specific value.message AwardPointsRequest { float points = 1 [(validate.field).float.eq = 10]; }
gt
: Require field value be greater than a specific value.message AwardPointsRequest { float points = 1 [(validate.field).float.gt = 0]; }
lt
: Require field value be less than a specific value.message AwardPointsRequest { float points = 1 [(validate.field).float.lt = 1000]; }
gte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { float points = 1 [(validate.field).float.gte = 1]; }
lte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { float points = 1 [(validate.field).float.lte = 100]; }
min
: Require field value to have a specific minimum value.message AwardPointsRequest { uint points = 1 [(validate.field).float.min = 1]; }
max
: Require field value to have a specific maximum value.message AwardPointsRequest { float points = 1 [(validate.field).float.min = 1]; }
required
: Require field to have a non-empty and non-zero value.message AwardPointsRequest { float points = 1 [(validate.field).float.required = true]; }
Double Validation Rules
eq
: Require field value to equal a specific value.message AwardPointsRequest { double points = 1 [(validate.field).double.eq = 10]; }
gt
: Require field value be greater than a specific value.message AwardPointsRequest { double points = 1 [(validate.field).double.gt = 0]; }
lt
: Require field value be less than a specific value.message AwardPointsRequest { double points = 1 [(validate.field).double.lt = 1000]; }
gte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { double points = 1 [(validate.field).double.gte = 1]; }
lte
: Require field value be greater than or equal to a specific value.message AwardPointsRequest { double points = 1 [(validate.field).double.lte = 100]; }
min
: Require field value to have a specific minimum value.message AwardPointsRequest { uint points = 1 [(validate.field).double.min = 1]; }
max
: Require field value to have a specific maximum value.message AwardPointsRequest { double points = 1 [(validate.field).double.min = 1]; }
required
: Require field to have a non-empty and non-zero value.message AwardPointsRequest { double points = 1 [(validate.field).double.required = true]; }
Message Validation Rules
skip
: Skip specifies that the validation rules of this field should not be evaluatedrequired
: Required specifies that this field must be set
Repeated Validation Rules
min
: MinItems specifies that this field must have the specified number of items at a minimummax
: MaxItems specifies that this field must have the specified number of items at a maximum
Documentation
¶
There is no documentation for this package.