862 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
			
		
		
	
	
			862 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
| syntax = "proto2";
 | |
| package validate;
 | |
| 
 | |
| option go_package = "github.com/envoyproxy/protoc-gen-validate/validate";
 | |
| option java_package = "io.envoyproxy.pgv.validate";
 | |
| 
 | |
| import "google/protobuf/descriptor.proto";
 | |
| import "google/protobuf/duration.proto";
 | |
| import "google/protobuf/timestamp.proto";
 | |
| 
 | |
| // Validation rules applied at the message level
 | |
| extend google.protobuf.MessageOptions {
 | |
|   // Disabled nullifies any validation rules for this message, including any
 | |
|   // message fields associated with it that do support validation.
 | |
|   optional bool disabled = 1071;
 | |
|   // Ignore skips generation of validation methods for this message.
 | |
|   optional bool ignored = 1072;
 | |
| }
 | |
| 
 | |
| // Validation rules applied at the oneof level
 | |
| extend google.protobuf.OneofOptions {
 | |
|   // Required ensures that exactly one the field options in a oneof is set;
 | |
|   // validation fails if no fields in the oneof are set.
 | |
|   optional bool required = 1071;
 | |
| }
 | |
| 
 | |
| // Validation rules applied at the field level
 | |
| extend google.protobuf.FieldOptions {
 | |
|   // Rules specify the validations to be performed on this field. By default,
 | |
|   // no validation is performed against a field.
 | |
|   optional FieldRules rules = 1071;
 | |
| }
 | |
| 
 | |
| // FieldRules encapsulates the rules for each type of field. Depending on the
 | |
| // field, the correct set should be used to ensure proper validations.
 | |
| message FieldRules {
 | |
|   optional MessageRules message = 17;
 | |
|   oneof type {
 | |
|     // Scalar Field Types
 | |
|     FloatRules    float    = 1;
 | |
|     DoubleRules   double   = 2;
 | |
|     Int32Rules    int32    = 3;
 | |
|     Int64Rules    int64    = 4;
 | |
|     UInt32Rules   uint32   = 5;
 | |
|     UInt64Rules   uint64   = 6;
 | |
|     SInt32Rules   sint32   = 7;
 | |
|     SInt64Rules   sint64   = 8;
 | |
|     Fixed32Rules  fixed32  = 9;
 | |
|     Fixed64Rules  fixed64  = 10;
 | |
|     SFixed32Rules sfixed32 = 11;
 | |
|     SFixed64Rules sfixed64 = 12;
 | |
|     BoolRules     bool     = 13;
 | |
|     StringRules   string   = 14;
 | |
|     BytesRules    bytes    = 15;
 | |
| 
 | |
|     // Complex Field Types
 | |
|     EnumRules     enum     = 16;
 | |
|     RepeatedRules repeated = 18;
 | |
|     MapRules      map      = 19;
 | |
| 
 | |
|     // Well-Known Field Types
 | |
|     AnyRules       any       = 20;
 | |
|     DurationRules  duration  = 21;
 | |
|     TimestampRules timestamp = 22;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // FloatRules describes the constraints applied to `float` values
 | |
| message FloatRules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional float const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional float lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional float lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional float gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional float gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated float in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated float not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // DoubleRules describes the constraints applied to `double` values
 | |
| message DoubleRules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional double const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional double lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional double lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional double gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional double gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated double in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated double not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // Int32Rules describes the constraints applied to `int32` values
 | |
| message Int32Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional int32 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional int32 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional int32 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional int32 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional int32 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated int32 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated int32 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // Int64Rules describes the constraints applied to `int64` values
 | |
| message Int64Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional int64 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional int64 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional int64 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional int64 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional int64 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated int64 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated int64 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // UInt32Rules describes the constraints applied to `uint32` values
 | |
| message UInt32Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional uint32 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional uint32 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional uint32 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional uint32 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional uint32 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated uint32 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated uint32 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // UInt64Rules describes the constraints applied to `uint64` values
 | |
| message UInt64Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional uint64 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional uint64 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional uint64 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional uint64 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional uint64 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated uint64 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated uint64 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // SInt32Rules describes the constraints applied to `sint32` values
 | |
| message SInt32Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional sint32 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional sint32 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional sint32 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional sint32 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional sint32 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated sint32 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated sint32 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // SInt64Rules describes the constraints applied to `sint64` values
 | |
| message SInt64Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional sint64 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional sint64 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional sint64 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional sint64 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional sint64 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated sint64 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated sint64 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // Fixed32Rules describes the constraints applied to `fixed32` values
 | |
| message Fixed32Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional fixed32 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional fixed32 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional fixed32 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional fixed32 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional fixed32 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated fixed32 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated fixed32 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // Fixed64Rules describes the constraints applied to `fixed64` values
 | |
| message Fixed64Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional fixed64 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional fixed64 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional fixed64 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional fixed64 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional fixed64 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated fixed64 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated fixed64 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // SFixed32Rules describes the constraints applied to `sfixed32` values
 | |
| message SFixed32Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional sfixed32 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional sfixed32 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional sfixed32 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional sfixed32 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional sfixed32 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated sfixed32 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated sfixed32 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // SFixed64Rules describes the constraints applied to `sfixed64` values
 | |
| message SFixed64Rules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional sfixed64 const = 1;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional sfixed64 lt = 2;
 | |
| 
 | |
|   // Lte specifies that this field must be less than or equal to the
 | |
|   // specified value, inclusive
 | |
|   optional sfixed64 lte = 3;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
 | |
|   // range is reversed.
 | |
|   optional sfixed64 gt = 4;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than or equal to the
 | |
|   // specified value, inclusive. If the value of Gte is larger than a
 | |
|   // specified Lt or Lte, the range is reversed.
 | |
|   optional sfixed64 gte = 5;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated sfixed64 in = 6;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated sfixed64 not_in = 7;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 8;
 | |
| }
 | |
| 
 | |
| // BoolRules describes the constraints applied to `bool` values
 | |
| message BoolRules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional bool const = 1;
 | |
| }
 | |
| 
 | |
| // StringRules describe the constraints applied to `string` values
 | |
| message StringRules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional string const = 1;
 | |
| 
 | |
|   // Len specifies that this field must be the specified number of
 | |
|   // characters (Unicode code points). Note that the number of
 | |
|   // characters may differ from the number of bytes in the string.
 | |
|   optional uint64 len = 19;
 | |
| 
 | |
|   // MinLen specifies that this field must be the specified number of
 | |
|   // characters (Unicode code points) at a minimum. Note that the number of
 | |
|   // characters may differ from the number of bytes in the string.
 | |
|   optional uint64 min_len = 2;
 | |
| 
 | |
|   // MaxLen specifies that this field must be the specified number of
 | |
|   // characters (Unicode code points) at a maximum. Note that the number of
 | |
|   // characters may differ from the number of bytes in the string.
 | |
|   optional uint64 max_len = 3;
 | |
| 
 | |
|   // LenBytes specifies that this field must be the specified number of bytes
 | |
|   optional uint64 len_bytes = 20;
 | |
| 
 | |
|   // MinBytes specifies that this field must be the specified number of bytes
 | |
|   // at a minimum
 | |
|   optional uint64 min_bytes = 4;
 | |
| 
 | |
|   // MaxBytes specifies that this field must be the specified number of bytes
 | |
|   // at a maximum
 | |
|   optional uint64 max_bytes = 5;
 | |
| 
 | |
|   // Pattern specifes that this field must match against the specified
 | |
|   // regular expression (RE2 syntax). The included expression should elide
 | |
|   // any delimiters.
 | |
|   optional string pattern  = 6;
 | |
| 
 | |
|   // Prefix specifies that this field must have the specified substring at
 | |
|   // the beginning of the string.
 | |
|   optional string prefix   = 7;
 | |
| 
 | |
|   // Suffix specifies that this field must have the specified substring at
 | |
|   // the end of the string.
 | |
|   optional string suffix   = 8;
 | |
| 
 | |
|   // Contains specifies that this field must have the specified substring
 | |
|   // anywhere in the string.
 | |
|   optional string contains = 9;
 | |
| 
 | |
|   // NotContains specifies that this field cannot have the specified substring
 | |
|   // anywhere in the string.
 | |
|   optional string not_contains = 23;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated string in     = 10;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated string not_in = 11;
 | |
| 
 | |
|   // WellKnown rules provide advanced constraints against common string
 | |
|   // patterns
 | |
|   oneof well_known {
 | |
|     // Email specifies that the field must be a valid email address as
 | |
|     // defined by RFC 5322
 | |
|     bool email    = 12;
 | |
| 
 | |
|     // Hostname specifies that the field must be a valid hostname as
 | |
|     // defined by RFC 1034. This constraint does not support
 | |
|     // internationalized domain names (IDNs).
 | |
|     bool hostname = 13;
 | |
| 
 | |
|     // Ip specifies that the field must be a valid IP (v4 or v6) address.
 | |
|     // Valid IPv6 addresses should not include surrounding square brackets.
 | |
|     bool ip       = 14;
 | |
| 
 | |
|     // Ipv4 specifies that the field must be a valid IPv4 address.
 | |
|     bool ipv4     = 15;
 | |
| 
 | |
|     // Ipv6 specifies that the field must be a valid IPv6 address. Valid
 | |
|     // IPv6 addresses should not include surrounding square brackets.
 | |
|     bool ipv6     = 16;
 | |
| 
 | |
|     // Uri specifies that the field must be a valid, absolute URI as defined
 | |
|     // by RFC 3986
 | |
|     bool uri      = 17;
 | |
| 
 | |
|     // UriRef specifies that the field must be a valid URI as defined by RFC
 | |
|     // 3986 and may be relative or absolute.
 | |
|     bool uri_ref  = 18;
 | |
| 
 | |
|     // Address specifies that the field must be either a valid hostname as
 | |
|     // defined by RFC 1034 (which does not support internationalized domain
 | |
|     // names or IDNs), or it can be a valid IP (v4 or v6).
 | |
|     bool address  = 21;
 | |
| 
 | |
|     // Uuid specifies that the field must be a valid UUID as defined by
 | |
|     // RFC 4122
 | |
|     bool uuid     = 22;
 | |
| 
 | |
|     // WellKnownRegex specifies a common well known pattern defined as a regex.
 | |
|     KnownRegex well_known_regex = 24;
 | |
|   }
 | |
| 
 | |
|   // This applies to regexes HTTP_HEADER_NAME and HTTP_HEADER_VALUE to enable
 | |
|   // strict header validation.
 | |
|   // By default, this is true, and HTTP header validations are RFC-compliant.
 | |
|   // Setting to false will enable a looser validations that only disallows
 | |
|   // \r\n\0 characters, which can be used to bypass header matching rules.
 | |
|   optional bool strict = 25 [default = true];
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 26;
 | |
| }
 | |
| 
 | |
| // WellKnownRegex contain some well-known patterns.
 | |
| enum KnownRegex {
 | |
|   UNKNOWN = 0;
 | |
| 
 | |
|   // HTTP header name as defined by RFC 7230.
 | |
|   HTTP_HEADER_NAME = 1;
 | |
| 
 | |
|   // HTTP header value as defined by RFC 7230.
 | |
|   HTTP_HEADER_VALUE = 2;
 | |
| }
 | |
| 
 | |
| // BytesRules describe the constraints applied to `bytes` values
 | |
| message BytesRules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional bytes const = 1;
 | |
| 
 | |
|   // Len specifies that this field must be the specified number of bytes
 | |
|   optional uint64 len = 13;
 | |
| 
 | |
|   // MinLen specifies that this field must be the specified number of bytes
 | |
|   // at a minimum
 | |
|   optional uint64 min_len = 2;
 | |
| 
 | |
|   // MaxLen specifies that this field must be the specified number of bytes
 | |
|   // at a maximum
 | |
|   optional uint64 max_len = 3;
 | |
| 
 | |
|   // Pattern specifes that this field must match against the specified
 | |
|   // regular expression (RE2 syntax). The included expression should elide
 | |
|   // any delimiters.
 | |
|   optional string pattern  = 4;
 | |
| 
 | |
|   // Prefix specifies that this field must have the specified bytes at the
 | |
|   // beginning of the string.
 | |
|   optional bytes  prefix   = 5;
 | |
| 
 | |
|   // Suffix specifies that this field must have the specified bytes at the
 | |
|   // end of the string.
 | |
|   optional bytes  suffix   = 6;
 | |
| 
 | |
|   // Contains specifies that this field must have the specified bytes
 | |
|   // anywhere in the string.
 | |
|   optional bytes  contains = 7;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated bytes in     = 8;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated bytes not_in = 9;
 | |
| 
 | |
|   // WellKnown rules provide advanced constraints against common byte
 | |
|   // patterns
 | |
|   oneof well_known {
 | |
|     // Ip specifies that the field must be a valid IP (v4 or v6) address in
 | |
|     // byte format
 | |
|     bool ip   = 10;
 | |
| 
 | |
|     // Ipv4 specifies that the field must be a valid IPv4 address in byte
 | |
|     // format
 | |
|     bool ipv4 = 11;
 | |
| 
 | |
|     // Ipv6 specifies that the field must be a valid IPv6 address in byte
 | |
|     // format
 | |
|     bool ipv6 = 12;
 | |
|   }
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 14;
 | |
| }
 | |
| 
 | |
| // EnumRules describe the constraints applied to enum values
 | |
| message EnumRules {
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional int32 const        = 1;
 | |
| 
 | |
|   // DefinedOnly specifies that this field must be only one of the defined
 | |
|   // values for this enum, failing on any undefined value.
 | |
|   optional bool  defined_only = 2;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated int32 in           = 3;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated int32 not_in       = 4;
 | |
| }
 | |
| 
 | |
| // MessageRules describe the constraints applied to embedded message values.
 | |
| // For message-type fields, validation is performed recursively.
 | |
| message MessageRules {
 | |
|   // Skip specifies that the validation rules of this field should not be
 | |
|   // evaluated
 | |
|   optional bool skip     = 1;
 | |
| 
 | |
|   // Required specifies that this field must be set
 | |
|   optional bool required = 2;
 | |
| }
 | |
| 
 | |
| // RepeatedRules describe the constraints applied to `repeated` values
 | |
| message RepeatedRules {
 | |
|   // MinItems specifies that this field must have the specified number of
 | |
|   // items at a minimum
 | |
|   optional uint64 min_items = 1;
 | |
| 
 | |
|   // MaxItems specifies that this field must have the specified number of
 | |
|   // items at a maximum
 | |
|   optional uint64 max_items = 2;
 | |
| 
 | |
|   // Unique specifies that all elements in this field must be unique. This
 | |
|   // contraint is only applicable to scalar and enum types (messages are not
 | |
|   // supported).
 | |
|   optional bool   unique    = 3;
 | |
| 
 | |
|   // Items specifies the contraints to be applied to each item in the field.
 | |
|   // Repeated message fields will still execute validation against each item
 | |
|   // unless skip is specified here.
 | |
|   optional FieldRules items = 4;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 5;
 | |
| }
 | |
| 
 | |
| // MapRules describe the constraints applied to `map` values
 | |
| message MapRules {
 | |
|   // MinPairs specifies that this field must have the specified number of
 | |
|   // KVs at a minimum
 | |
|   optional uint64 min_pairs = 1;
 | |
| 
 | |
|   // MaxPairs specifies that this field must have the specified number of
 | |
|   // KVs at a maximum
 | |
|   optional uint64 max_pairs = 2;
 | |
| 
 | |
|   // NoSparse specifies values in this field cannot be unset. This only
 | |
|   // applies to map's with message value types.
 | |
|   optional bool no_sparse = 3;
 | |
| 
 | |
|   // Keys specifies the constraints to be applied to each key in the field.
 | |
|   optional FieldRules keys   = 4;
 | |
| 
 | |
|   // Values specifies the constraints to be applied to the value of each key
 | |
|   // in the field. Message values will still have their validations evaluated
 | |
|   // unless skip is specified here.
 | |
|   optional FieldRules values = 5;
 | |
| 
 | |
|   // IgnoreEmpty specifies that the validation rules of this field should be
 | |
|   // evaluated only if the field is not empty
 | |
|   optional bool ignore_empty = 6;
 | |
| }
 | |
| 
 | |
| // AnyRules describe constraints applied exclusively to the
 | |
| // `google.protobuf.Any` well-known type
 | |
| message AnyRules {
 | |
|   // Required specifies that this field must be set
 | |
|   optional bool required = 1;
 | |
| 
 | |
|   // In specifies that this field's `type_url` must be equal to one of the
 | |
|   // specified values.
 | |
|   repeated string in     = 2;
 | |
| 
 | |
|   // NotIn specifies that this field's `type_url` must not be equal to any of
 | |
|   // the specified values.
 | |
|   repeated string not_in = 3;
 | |
| }
 | |
| 
 | |
| // DurationRules describe the constraints applied exclusively to the
 | |
| // `google.protobuf.Duration` well-known type
 | |
| message DurationRules {
 | |
|   // Required specifies that this field must be set
 | |
|   optional bool required = 1;
 | |
| 
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional google.protobuf.Duration const = 2;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional google.protobuf.Duration lt = 3;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // inclusive
 | |
|   optional google.protobuf.Duration lte = 4;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive
 | |
|   optional google.protobuf.Duration gt = 5;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than the specified value,
 | |
|   // inclusive
 | |
|   optional google.protobuf.Duration gte = 6;
 | |
| 
 | |
|   // In specifies that this field must be equal to one of the specified
 | |
|   // values
 | |
|   repeated google.protobuf.Duration in = 7;
 | |
| 
 | |
|   // NotIn specifies that this field cannot be equal to one of the specified
 | |
|   // values
 | |
|   repeated google.protobuf.Duration not_in = 8;
 | |
| }
 | |
| 
 | |
| // TimestampRules describe the constraints applied exclusively to the
 | |
| // `google.protobuf.Timestamp` well-known type
 | |
| message TimestampRules {
 | |
|   // Required specifies that this field must be set
 | |
|   optional bool required = 1;
 | |
| 
 | |
|   // Const specifies that this field must be exactly the specified value
 | |
|   optional google.protobuf.Timestamp const = 2;
 | |
| 
 | |
|   // Lt specifies that this field must be less than the specified value,
 | |
|   // exclusive
 | |
|   optional google.protobuf.Timestamp lt = 3;
 | |
| 
 | |
|   // Lte specifies that this field must be less than the specified value,
 | |
|   // inclusive
 | |
|   optional google.protobuf.Timestamp lte = 4;
 | |
| 
 | |
|   // Gt specifies that this field must be greater than the specified value,
 | |
|   // exclusive
 | |
|   optional google.protobuf.Timestamp gt = 5;
 | |
| 
 | |
|   // Gte specifies that this field must be greater than the specified value,
 | |
|   // inclusive
 | |
|   optional google.protobuf.Timestamp gte = 6;
 | |
| 
 | |
|   // LtNow specifies that this must be less than the current time. LtNow
 | |
|   // can only be used with the Within rule.
 | |
|   optional bool lt_now  = 7;
 | |
| 
 | |
|   // GtNow specifies that this must be greater than the current time. GtNow
 | |
|   // can only be used with the Within rule.
 | |
|   optional bool gt_now  = 8;
 | |
| 
 | |
|   // Within specifies that this field must be within this duration of the
 | |
|   // current time. This constraint can be used alone or with the LtNow and
 | |
|   // GtNow rules.
 | |
|   optional google.protobuf.Duration within = 9;
 | |
| } |