protoc-gen-go-validate

command module
v0.0.0-...-ae86fe2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 3, 2023 License: MPL-2.0 Imports: 5 Imported by: 0

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 type string.

    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 type bytes.

    message UploadBlobRequest {
      bytes blob = 1 [(validate.field).bytes = {
        min: 1,
        max: 1024,
      }];
    }
    
  • (validate.field).uint32: Define validation rules for message fields of type uint32.

    message AddPointsRequest {
      uint32 points = 1 [(validate.field).uint32 = {
        gte: 1,
        lte: 100,
      }];
    }
    
  • (validate.field).uint64: Define validation rules for message fields of type uint64.

    message AddPointsRequest {
      uint64 points = 1 [(validate.field).uint64 = {
        gte: 1,
        lte: 100,
      }];
    }
    
  • (validate.field).int32: Define validation rules for message fields of type int32.

    message AddPointsRequest {
      int32 points = 1 [(validate.field).int32 = {
        gte: 1,
        lte: 100,
      }];
    }
    
  • (validate.field).int64: Define validation rules for message fields of type int64.

    message AddPointsRequest {
      int64 points = 1 [(validate.field).int64 = {
        gte: 1,
        lte: 100,
      }];
    }
    
  • (validate.field).float: Define validation rules for message fields of type float32.

    message AddFuelRequest {
      float ammount = 1 [(validate.field).float = {
        gt: 0,
      }];
    }
    
  • (validate.field).double: Define validation rules for message fields of type double.

    message AddFuelRequest {
      double ammount = 1 [(validate.field).double = {
        gt: 0,
      }];
    }
    
  • (validate.field).repeated: Define validation rules for message fields of type repeated.

    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 evaluated
  • required: 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 minimum
  • max: MaxItems specifies that this field must have the specified number of items at a maximum

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL