diff --git a/Makefile b/Makefile index d008d3ff..d077757f 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ ADD_LICENSE_HEADER := $(BIN)/license-header \ --copyright-holder "Buf Technologies, Inc." \ --year-range "2023-2025" # This version should be kept in sync with the version in buf.yaml -PROTOVALIDATE_VERSION ?= v1.0.0 +PROTOVALIDATE_VERSION ?= v1.1.0 # Version of the cel-spec that this implementation is conformant with # This should be kept in sync with the version in test/test_format.py CEL_SPEC_VERSION ?= v0.25.1 diff --git a/gen/buf/validate/conformance/cases/bytes_pb2.py b/gen/buf/validate/conformance/cases/bytes_pb2.py index e93b542a..af127a88 100644 --- a/gen/buf/validate/conformance/cases/bytes_pb2.py +++ b/gen/buf/validate/conformance/cases/bytes_pb2.py @@ -29,7 +29,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*buf/validate/conformance/cases/bytes.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1d\n\tBytesNone\x12\x10\n\x03val\x18\x01 \x01(\x0cR\x03val\"*\n\nBytesConst\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05\n\x03\x66ooR\x03val\",\n\x07\x42ytesIn\x12!\n\x03val\x18\x01 \x01(\x0c\x42\x0f\xbaH\x0cz\nB\x03\x62\x61rB\x03\x62\x61zR\x03val\"1\n\nBytesNotIn\x12#\n\x03val\x18\x01 \x01(\x0c\x42\x11\xbaH\x0ez\x0cJ\x04\x66izzJ\x04\x62uzzR\x03val\"%\n\x08\x42ytesLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02h\x03R\x03val\"(\n\x0b\x42ytesMinLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x10\x03R\x03val\"(\n\x0b\x42ytesMaxLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x18\x05R\x03val\"-\n\x0e\x42ytesMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x03\x18\x05R\x03val\"2\n\x13\x42ytesEqualMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x05\x18\x05R\x03val\"7\n\x0c\x42ytesPattern\x12\'\n\x03val\x18\x01 \x01(\x0c\x42\x15\xbaH\x12z\x10\"\x0e^[\\x00-\\x7F]+$R\x03val\")\n\x0b\x42ytesPrefix\x12\x1a\n\x03val\x18\x01 \x01(\x0c\x42\x08\xbaH\x05z\x03*\x01\x99R\x03val\"-\n\rBytesContains\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05:\x03\x62\x61rR\x03val\",\n\x0b\x42ytesSuffix\x12\x1d\n\x03val\x18\x01 \x01(\x0c\x42\x0b\xbaH\x08z\x06\x32\x04\x62uzzR\x03val\"$\n\x07\x42ytesIP\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02P\x01R\x03val\"\'\n\nBytesNotIP\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02P\x00R\x03val\"&\n\tBytesIPv4\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02X\x01R\x03val\")\n\x0c\x42ytesNotIPv4\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02X\x00R\x03val\"&\n\tBytesIPv6\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02`\x01R\x03val\")\n\x0c\x42ytesNotIPv6\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02`\x00R\x03val\"/\n\x0f\x42ytesIPv6Ignore\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x02`\x01\xd8\x01\x01R\x03val\"*\n\x0c\x42ytesExample\x12\x1a\n\x03val\x18\x01 \x01(\x0c\x42\x08\xbaH\x05z\x03r\x01\x99R\x03valB\xcc\x01\n\"com.buf.validate.conformance.casesB\nBytesProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*buf/validate/conformance/cases/bytes.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1d\n\tBytesNone\x12\x10\n\x03val\x18\x01 \x01(\x0cR\x03val\"*\n\nBytesConst\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05\n\x03\x66ooR\x03val\",\n\x07\x42ytesIn\x12!\n\x03val\x18\x01 \x01(\x0c\x42\x0f\xbaH\x0cz\nB\x03\x62\x61rB\x03\x62\x61zR\x03val\"1\n\nBytesNotIn\x12#\n\x03val\x18\x01 \x01(\x0c\x42\x11\xbaH\x0ez\x0cJ\x04\x66izzJ\x04\x62uzzR\x03val\"%\n\x08\x42ytesLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02h\x03R\x03val\"(\n\x0b\x42ytesMinLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x10\x03R\x03val\"(\n\x0b\x42ytesMaxLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x18\x05R\x03val\"-\n\x0e\x42ytesMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x03\x18\x05R\x03val\"2\n\x13\x42ytesEqualMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x05\x18\x05R\x03val\"7\n\x0c\x42ytesPattern\x12\'\n\x03val\x18\x01 \x01(\x0c\x42\x15\xbaH\x12z\x10\"\x0e^[\\x00-\\x7F]+$R\x03val\")\n\x0b\x42ytesPrefix\x12\x1a\n\x03val\x18\x01 \x01(\x0c\x42\x08\xbaH\x05z\x03*\x01\x99R\x03val\"-\n\rBytesContains\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05:\x03\x62\x61rR\x03val\",\n\x0b\x42ytesSuffix\x12\x1d\n\x03val\x18\x01 \x01(\x0c\x42\x0b\xbaH\x08z\x06\x32\x04\x62uzzR\x03val\"$\n\x07\x42ytesIP\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02P\x01R\x03val\"\'\n\nBytesNotIP\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02P\x00R\x03val\"&\n\tBytesIPv4\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02X\x01R\x03val\")\n\x0c\x42ytesNotIPv4\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02X\x00R\x03val\"&\n\tBytesIPv6\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02`\x01R\x03val\")\n\x0c\x42ytesNotIPv6\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02`\x00R\x03val\"/\n\x0f\x42ytesIPv6Ignore\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x02`\x01\xd8\x01\x01R\x03val\"&\n\tBytesUUID\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02x\x01R\x03val\")\n\x0c\x42ytesNotUUID\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02x\x00R\x03val\"/\n\x0f\x42ytesUUIDIgnore\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x02x\x01\xd8\x01\x01R\x03val\"*\n\x0c\x42ytesExample\x12\x1a\n\x03val\x18\x01 \x01(\x0c\x42\x08\xbaH\x05z\x03r\x01\x99R\x03valB\xcc\x01\n\"com.buf.validate.conformance.casesB\nBytesProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -75,6 +75,12 @@ _globals['_BYTESNOTIPV6'].fields_by_name['val']._serialized_options = b'\272H\004z\002`\000' _globals['_BYTESIPV6IGNORE'].fields_by_name['val']._loaded_options = None _globals['_BYTESIPV6IGNORE'].fields_by_name['val']._serialized_options = b'\272H\007z\002`\001\330\001\001' + _globals['_BYTESUUID'].fields_by_name['val']._loaded_options = None + _globals['_BYTESUUID'].fields_by_name['val']._serialized_options = b'\272H\004z\002x\001' + _globals['_BYTESNOTUUID'].fields_by_name['val']._loaded_options = None + _globals['_BYTESNOTUUID'].fields_by_name['val']._serialized_options = b'\272H\004z\002x\000' + _globals['_BYTESUUIDIGNORE'].fields_by_name['val']._loaded_options = None + _globals['_BYTESUUIDIGNORE'].fields_by_name['val']._serialized_options = b'\272H\007z\002x\001\330\001\001' _globals['_BYTESEXAMPLE'].fields_by_name['val']._loaded_options = None _globals['_BYTESEXAMPLE'].fields_by_name['val']._serialized_options = b'\272H\005z\003r\001\231' _globals['_BYTESNONE']._serialized_start=107 @@ -117,6 +123,12 @@ _globals['_BYTESNOTIPV6']._serialized_end=937 _globals['_BYTESIPV6IGNORE']._serialized_start=939 _globals['_BYTESIPV6IGNORE']._serialized_end=986 - _globals['_BYTESEXAMPLE']._serialized_start=988 - _globals['_BYTESEXAMPLE']._serialized_end=1030 + _globals['_BYTESUUID']._serialized_start=988 + _globals['_BYTESUUID']._serialized_end=1026 + _globals['_BYTESNOTUUID']._serialized_start=1028 + _globals['_BYTESNOTUUID']._serialized_end=1069 + _globals['_BYTESUUIDIGNORE']._serialized_start=1071 + _globals['_BYTESUUIDIGNORE']._serialized_end=1118 + _globals['_BYTESEXAMPLE']._serialized_start=1120 + _globals['_BYTESEXAMPLE']._serialized_end=1162 # @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/conformance/cases/bytes_pb2.pyi b/gen/buf/validate/conformance/cases/bytes_pb2.pyi index 4414fccb..dc523379 100644 --- a/gen/buf/validate/conformance/cases/bytes_pb2.pyi +++ b/gen/buf/validate/conformance/cases/bytes_pb2.pyi @@ -139,6 +139,24 @@ class BytesIPv6Ignore(_message.Message): val: bytes def __init__(self, val: _Optional[bytes] = ...) -> None: ... +class BytesUUID(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: bytes + def __init__(self, val: _Optional[bytes] = ...) -> None: ... + +class BytesNotUUID(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: bytes + def __init__(self, val: _Optional[bytes] = ...) -> None: ... + +class BytesUUIDIgnore(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: bytes + def __init__(self, val: _Optional[bytes] = ...) -> None: ... + class BytesExample(_message.Message): __slots__ = ("val",) VAL_FIELD_NUMBER: _ClassVar[int] diff --git a/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.py b/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.py index 622d5c7f..9c2b5e60 100644 --- a/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.py +++ b/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.py @@ -29,7 +29,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n>buf/validate/conformance/cases/custom_rules/custom_rules.proto\x12+buf.validate.conformance.cases.custom_rules\x1a\x1b\x62uf/validate/validate.proto\"\xb9\x01\n\rNoExpressions\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\x12?\n\x01\x62\x18\x02 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x01\x62\x12O\n\x01\x63\x18\x03 \x01(\x0b\x32\x41.buf.validate.conformance.cases.custom_rules.NoExpressions.NestedR\x01\x63\x1a\x08\n\x06Nested\"\xab\x05\n\x12MessageExpressions\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\x12\x0c\n\x01\x62\x18\x02 \x01(\x05R\x01\x62\x12?\n\x01\x63\x18\x03 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x01\x63\x12?\n\x01\x64\x18\x04 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x01\x64\x12T\n\x01\x65\x18\x05 \x01(\x0b\x32\x46.buf.validate.conformance.cases.custom_rules.MessageExpressions.NestedR\x01\x65\x12T\n\x01\x66\x18\x06 \x01(\x0b\x32\x46.buf.validate.conformance.cases.custom_rules.MessageExpressions.NestedR\x01\x66\x1ax\n\x06Nested\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\x12\x0c\n\x01\x62\x18\x02 \x01(\x05R\x01\x62:R\xbaHO\x1aM\n\x19message_expression_nested\x1a\x30this.a > this.b ? \'\': \'a must be greater than b\':\xd0\x01\xbaH\xcc\x01\x1a\x43\n\x19message_expression_scalar\x12\x15\x61 must be less than b\x1a\x0fthis.a < this.b\x1a?\n\x17message_expression_enum\x12\x12\x63 must not equal d\x1a\x10this.c != this.d\x1a\x44\n\x18message_expression_embed\x12\x12\x65.a must equal f.a\x1a\x14this.e.a == this.f.a\"R\n\x0cMissingField\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61:4\xbaH1\x1a/\n\rmissing_field\x12\x12\x62 must be positive\x1a\nthis.b > 0\"g\n\rIncorrectType\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61:H\xbaHE\x1a\x43\n\x0eincorrect_type\x12\x17\x61 must start with \'foo\'\x1a\x18this.a.startsWith(\'foo\')\"}\n\x0f\x44ynRuntimeError\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61:\\\xbaHY\x1aW\n\x0f\x64yn_runtime_err\x12.dynamic type tries to use a non-existent field\x1a\x14\x64yn(this).b == \'foo\'\"\\\n\x0cNowEqualsNow:L\xbaHI\x1aG\n\x0enow_equals_now\x12)now should equal now within an expression\x1a\nnow == now\"\xdf\x02\n\x1d\x46ieldExpressionMultipleScalar\x12\xbd\x02\n\x03val\x18\x01 \x01(\x05\x42\xaa\x02\xbaH\xa6\x02\xba\x01_\n\"field_expression.multiple.scalar.1\x12/test message field_expression.multiple.scalar.1\x1a\x08this > 0\xba\x01_\n\"field_expression.multiple.scalar.2\x12/test message field_expression.multiple.scalar.2\x1a\x08this > 1\xba\x01_\n\"field_expression.multiple.scalar.3\x12/test message field_expression.multiple.scalar.3\x1a\x08this > 2R\x03val\"y\n\x1b\x46ieldExpressionNestedScalar\x12Z\n\x06nested\x18\x01 \x01(\x0b\x32\x42.buf.validate.conformance.cases.custom_rules.FieldExpressionScalarR\x06nested\"\xa2\x01\n\x1d\x46ieldExpressionOptionalScalar\x12y\n\x03val\x18\x01 \x01(\x05\x42\x62\xbaH_\xba\x01\\\n field_expression.optional.scalar\x12-test message field_expression.optional.scalar\x1a\tthis == 1H\x00R\x03val\x88\x01\x01\x42\x06\n\x04_val\"{\n\x15\x46ieldExpressionScalar\x12\x62\n\x03val\x18\x01 \x01(\x05\x42P\xbaHM\xba\x01J\n\x17\x66ield_expression.scalar\x12$test message field_expression.scalar\x1a\tthis == 1R\x03val\"\xa9\x01\n\x13\x46ieldExpressionEnum\x12\x91\x01\n\x03val\x18\x01 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumBL\xbaHI\xba\x01\x46\n\x15\x66ield_expression.enum\x12\"test message field_expression.enum\x1a\tthis == 1R\x03val\"\xdf\x01\n\x16\x46ieldExpressionMessage\x12\xaf\x01\n\x03val\x18\x01 \x01(\x0b\x32G.buf.validate.conformance.cases.custom_rules.FieldExpressionMessage.MsgBT\xbaHQ\xba\x01N\n\x18\x66ield_expression.message\x12%test message field_expression.message\x1a\x0bthis.a == 1R\x03val\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\x8f\x02\n\x17\x46ieldExpressionMapInt32\x12\xbb\x01\n\x03val\x18\x01 \x03(\x0b\x32M.buf.validate.conformance.cases.custom_rules.FieldExpressionMapInt32.ValEntryBZ\xbaHW\xba\x01T\n\x1a\x66ield_expression.map.int32\x12\x1b\x61ll map values must equal 1\x1a\x19this.all(k, this[k] == 1)R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"\x8f\x02\n\x17\x46ieldExpressionMapInt64\x12\xbb\x01\n\x03val\x18\x01 \x03(\x0b\x32M.buf.validate.conformance.cases.custom_rules.FieldExpressionMapInt64.ValEntryBZ\xbaHW\xba\x01T\n\x1a\x66ield_expression.map.int64\x12\x1b\x61ll map values must equal 1\x1a\x19this.all(k, this[k] == 1)R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x03R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x03R\x05value:\x02\x38\x01\"\x98\x02\n\x18\x46ieldExpressionMapUint32\x12\xc3\x01\n\x03val\x18\x01 \x03(\x0b\x32N.buf.validate.conformance.cases.custom_rules.FieldExpressionMapUint32.ValEntryBa\xbaH^\xba\x01[\n\x1b\x66ield_expression.map.uint32\x12\x1b\x61ll map values must equal 1\x1a\x1fthis.all(k, this[k] == uint(1))R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n\x05value\x18\x02 \x01(\rR\x05value:\x02\x38\x01\"\x98\x02\n\x18\x46ieldExpressionMapUint64\x12\xc3\x01\n\x03val\x18\x01 \x03(\x0b\x32N.buf.validate.conformance.cases.custom_rules.FieldExpressionMapUint64.ValEntryBa\xbaH^\xba\x01[\n\x1b\x66ield_expression.map.uint64\x12\x1b\x61ll map values must equal 1\x1a\x1fthis.all(k, this[k] == uint(1))R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x04R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x04R\x05value:\x02\x38\x01\"\x94\x02\n\x16\x46ieldExpressionMapBool\x12\xc1\x01\n\x03val\x18\x01 \x03(\x0b\x32L.buf.validate.conformance.cases.custom_rules.FieldExpressionMapBool.ValEntryBa\xbaH^\xba\x01[\n\x19\x66ield_expression.map.bool\x12\x1f\x61ll map values must equal false\x1a\x1dthis.all(k, this[k] == false)R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x08R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x08R\x05value:\x02\x38\x01\"\x9a\x02\n\x18\x46ieldExpressionMapString\x12\xc5\x01\n\x03val\x18\x01 \x03(\x0b\x32N.buf.validate.conformance.cases.custom_rules.FieldExpressionMapString.ValEntryBc\xbaH`\xba\x01]\n\x1b\x66ield_expression.map.string\x12\x1f\x61ll map values must equal \'foo\'\x1a\x1dthis.all(k, this[k] == \'foo\')R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xca\x02\n\x16\x46ieldExpressionMapEnum\x12\xc4\x01\n\x03val\x18\x01 \x03(\x0b\x32L.buf.validate.conformance.cases.custom_rules.FieldExpressionMapEnum.ValEntryBd\xbaHa\xba\x01^\n\x19\x66ield_expression.map.enum\x12&test message field_expression.map.enum\x1a\x19this.all(k, this[k] == 1)R\x03val\x1ai\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12G\n\x05value\x18\x02 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x05value:\x02\x38\x01\"\x87\x03\n\x19\x46ieldExpressionMapMessage\x12\xcf\x01\n\x03val\x18\x01 \x03(\x0b\x32O.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessage.ValEntryBl\xbaHi\xba\x01\x66\n\x1c\x66ield_expression.map.message\x12)test message field_expression.map.message\x1a\x1bthis.all(k, this[k].a == 1)R\x03val\x1a\x82\x01\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12`\n\x05value\x18\x02 \x01(\x0b\x32J.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessage.MsgR\x05value:\x02\x38\x01\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\x99\x02\n\x16\x46ieldExpressionMapKeys\x12\xc6\x01\n\x03val\x18\x01 \x03(\x0b\x32L.buf.validate.conformance.cases.custom_rules.FieldExpressionMapKeys.ValEntryBf\xbaHc\x9a\x01`\"^\xba\x01[\n\x19\x66ield_expression.map.keys\x12&test message field_expression.map.keys\x1a\x16this == 4 || this == 8R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"\xae\x02\n\x1e\x46ieldExpressionMapScalarValues\x12\xd3\x01\n\x03val\x18\x01 \x03(\x0b\x32T.buf.validate.conformance.cases.custom_rules.FieldExpressionMapScalarValues.ValEntryBk\xbaHh\x9a\x01\x65*c\xba\x01`\n\"field_expression.map.scalar.values\x12/test message field_expression.map.scalar.values\x1a\tthis == 1R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"\xd9\x02\n\x1c\x46ieldExpressionMapEnumValues\x12\xcd\x01\n\x03val\x18\x01 \x03(\x0b\x32R.buf.validate.conformance.cases.custom_rules.FieldExpressionMapEnumValues.ValEntryBg\xbaHd\x9a\x01\x61*_\xba\x01\\\n field_expression.map.enum.values\x12-test message field_expression.map.enum.values\x1a\tthis == 1R\x03val\x1ai\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12G\n\x05value\x18\x02 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x05value:\x02\x38\x01\"\x9c\x03\n\x1f\x46ieldExpressionMapMessageValues\x12\xd8\x01\n\x03val\x18\x01 \x03(\x0b\x32U.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessageValues.ValEntryBo\xbaHl\x9a\x01i*g\xba\x01\x64\n#field_expression.map.message.values\x12\x30test message field_expression.map.message.values\x1a\x0bthis.a == 1R\x03val\x1a\x88\x01\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x66\n\x05value\x18\x02 \x01(\x0b\x32P.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessageValues.MsgR\x05value:\x02\x38\x01\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\x9f\x01\n\x1d\x46ieldExpressionRepeatedScalar\x12~\n\x03val\x18\x01 \x03(\x05\x42l\xbaHi\xba\x01\x66\n field_expression.repeated.scalar\x12-test message field_expression.repeated.scalar\x1a\x13this.all(e, e == 1)R\x03val\"\xcd\x01\n\x1b\x46ieldExpressionRepeatedEnum\x12\xad\x01\n\x03val\x18\x01 \x03(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumBh\xbaHe\xba\x01\x62\n\x1e\x66ield_expression.repeated.enum\x12+test message field_expression.repeated.enum\x1a\x13this.all(e, e == 1)R\x03val\"\x8b\x02\n\x1e\x46ieldExpressionRepeatedMessage\x12\xd3\x01\n\x03val\x18\x01 \x03(\x0b\x32O.buf.validate.conformance.cases.custom_rules.FieldExpressionRepeatedMessage.MsgBp\xbaHm\xba\x01j\n!field_expression.repeated.message\x12.test message field_expression.repeated.message\x1a\x15this.all(e, e.a == 1)R\x03val\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\xac\x01\n\"FieldExpressionRepeatedScalarItems\x12\x85\x01\n\x03val\x18\x01 \x03(\x05\x42s\xbaHp\x92\x01m\"k\xba\x01h\n&field_expression.repeated.scalar.items\x12\x33test message field_expression.repeated.scalar.items\x1a\tthis == 1R\x03val\"\xd9\x01\n FieldExpressionRepeatedEnumItems\x12\xb4\x01\n\x03val\x18\x01 \x03(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumBo\xbaHl\x92\x01i\"g\xba\x01\x64\n$field_expression.repeated.enum.items\x12\x31test message field_expression.repeated.enum.items\x1a\tthis == 1R\x03val\"\x9c\x02\n#FieldExpressionRepeatedMessageItems\x12\xdf\x01\n\x03val\x18\x01 \x03(\x0b\x32T.buf.validate.conformance.cases.custom_rules.FieldExpressionRepeatedMessageItems.MsgBw\xbaHt\x92\x01q\"o\xba\x01l\n\'field_expression.repeated.message.items\x12\x34test message field_expression.repeated.message.items\x1a\x0bthis.a == 1R\x03val\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61**\n\x04\x45num\x12\x14\n\x10\x45NUM_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x45NUM_ONE\x10\x01\x42\x91\x02\n/com.buf.validate.conformance.cases.custom_rulesB\x10\x43ustomRulesProtoP\x01\xa2\x02\x05\x42VCCC\xaa\x02*Buf.Validate.Conformance.Cases.CustomRules\xca\x02*Buf\\Validate\\Conformance\\Cases\\CustomRules\xe2\x02\x36\x42uf\\Validate\\Conformance\\Cases\\CustomRules\\GPBMetadata\xea\x02.Buf::Validate::Conformance::Cases::CustomRulesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n>buf/validate/conformance/cases/custom_rules/custom_rules.proto\x12+buf.validate.conformance.cases.custom_rules\x1a\x1b\x62uf/validate/validate.proto\"\xb9\x01\n\rNoExpressions\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\x12?\n\x01\x62\x18\x02 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x01\x62\x12O\n\x01\x63\x18\x03 \x01(\x0b\x32\x41.buf.validate.conformance.cases.custom_rules.NoExpressions.NestedR\x01\x63\x1a\x08\n\x06Nested\"\xab\x05\n\x12MessageExpressions\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\x12\x0c\n\x01\x62\x18\x02 \x01(\x05R\x01\x62\x12?\n\x01\x63\x18\x03 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x01\x63\x12?\n\x01\x64\x18\x04 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x01\x64\x12T\n\x01\x65\x18\x05 \x01(\x0b\x32\x46.buf.validate.conformance.cases.custom_rules.MessageExpressions.NestedR\x01\x65\x12T\n\x01\x66\x18\x06 \x01(\x0b\x32\x46.buf.validate.conformance.cases.custom_rules.MessageExpressions.NestedR\x01\x66\x1ax\n\x06Nested\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\x12\x0c\n\x01\x62\x18\x02 \x01(\x05R\x01\x62:R\xbaHO\x1aM\n\x19message_expression_nested\x1a\x30this.a > this.b ? \'\': \'a must be greater than b\':\xd0\x01\xbaH\xcc\x01\x1a\x43\n\x19message_expression_scalar\x12\x15\x61 must be less than b\x1a\x0fthis.a < this.b\x1a?\n\x17message_expression_enum\x12\x12\x63 must not equal d\x1a\x10this.c != this.d\x1a\x44\n\x18message_expression_embed\x12\x12\x65.a must equal f.a\x1a\x14this.e.a == this.f.a\"6\n\x15MessageExpressionOnly\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61:\x0f\xbaH\x0c*\nthis.a > 0\"R\n\x0cMissingField\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61:4\xbaH1\x1a/\n\rmissing_field\x12\x12\x62 must be positive\x1a\nthis.b > 0\"g\n\rIncorrectType\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61:H\xbaHE\x1a\x43\n\x0eincorrect_type\x12\x17\x61 must start with \'foo\'\x1a\x18this.a.startsWith(\'foo\')\"}\n\x0f\x44ynRuntimeError\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61:\\\xbaHY\x1aW\n\x0f\x64yn_runtime_err\x12.dynamic type tries to use a non-existent field\x1a\x14\x64yn(this).b == \'foo\'\"\\\n\x0cNowEqualsNow:L\xbaHI\x1aG\n\x0enow_equals_now\x12)now should equal now within an expression\x1a\nnow == now\"8\n\x13\x46ieldExpressionOnly\x12!\n\x03val\x18\x01 \x01(\x05\x42\x0f\xbaH\x0c\xea\x01\tthis > 42R\x03val\"\xdf\x02\n\x1d\x46ieldExpressionMultipleScalar\x12\xbd\x02\n\x03val\x18\x01 \x01(\x05\x42\xaa\x02\xbaH\xa6\x02\xba\x01_\n\"field_expression.multiple.scalar.1\x12/test message field_expression.multiple.scalar.1\x1a\x08this > 0\xba\x01_\n\"field_expression.multiple.scalar.2\x12/test message field_expression.multiple.scalar.2\x1a\x08this > 1\xba\x01_\n\"field_expression.multiple.scalar.3\x12/test message field_expression.multiple.scalar.3\x1a\x08this > 2R\x03val\"y\n\x1b\x46ieldExpressionNestedScalar\x12Z\n\x06nested\x18\x01 \x01(\x0b\x32\x42.buf.validate.conformance.cases.custom_rules.FieldExpressionScalarR\x06nested\"\xa2\x01\n\x1d\x46ieldExpressionOptionalScalar\x12y\n\x03val\x18\x01 \x01(\x05\x42\x62\xbaH_\xba\x01\\\n field_expression.optional.scalar\x12-test message field_expression.optional.scalar\x1a\tthis == 1H\x00R\x03val\x88\x01\x01\x42\x06\n\x04_val\"{\n\x15\x46ieldExpressionScalar\x12\x62\n\x03val\x18\x01 \x01(\x05\x42P\xbaHM\xba\x01J\n\x17\x66ield_expression.scalar\x12$test message field_expression.scalar\x1a\tthis == 1R\x03val\"\xa9\x01\n\x13\x46ieldExpressionEnum\x12\x91\x01\n\x03val\x18\x01 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumBL\xbaHI\xba\x01\x46\n\x15\x66ield_expression.enum\x12\"test message field_expression.enum\x1a\tthis == 1R\x03val\"\xdf\x01\n\x16\x46ieldExpressionMessage\x12\xaf\x01\n\x03val\x18\x01 \x01(\x0b\x32G.buf.validate.conformance.cases.custom_rules.FieldExpressionMessage.MsgBT\xbaHQ\xba\x01N\n\x18\x66ield_expression.message\x12%test message field_expression.message\x1a\x0bthis.a == 1R\x03val\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\x8f\x02\n\x17\x46ieldExpressionMapInt32\x12\xbb\x01\n\x03val\x18\x01 \x03(\x0b\x32M.buf.validate.conformance.cases.custom_rules.FieldExpressionMapInt32.ValEntryBZ\xbaHW\xba\x01T\n\x1a\x66ield_expression.map.int32\x12\x1b\x61ll map values must equal 1\x1a\x19this.all(k, this[k] == 1)R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"\x8f\x02\n\x17\x46ieldExpressionMapInt64\x12\xbb\x01\n\x03val\x18\x01 \x03(\x0b\x32M.buf.validate.conformance.cases.custom_rules.FieldExpressionMapInt64.ValEntryBZ\xbaHW\xba\x01T\n\x1a\x66ield_expression.map.int64\x12\x1b\x61ll map values must equal 1\x1a\x19this.all(k, this[k] == 1)R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x03R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x03R\x05value:\x02\x38\x01\"\x98\x02\n\x18\x46ieldExpressionMapUint32\x12\xc3\x01\n\x03val\x18\x01 \x03(\x0b\x32N.buf.validate.conformance.cases.custom_rules.FieldExpressionMapUint32.ValEntryBa\xbaH^\xba\x01[\n\x1b\x66ield_expression.map.uint32\x12\x1b\x61ll map values must equal 1\x1a\x1fthis.all(k, this[k] == uint(1))R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n\x05value\x18\x02 \x01(\rR\x05value:\x02\x38\x01\"\x98\x02\n\x18\x46ieldExpressionMapUint64\x12\xc3\x01\n\x03val\x18\x01 \x03(\x0b\x32N.buf.validate.conformance.cases.custom_rules.FieldExpressionMapUint64.ValEntryBa\xbaH^\xba\x01[\n\x1b\x66ield_expression.map.uint64\x12\x1b\x61ll map values must equal 1\x1a\x1fthis.all(k, this[k] == uint(1))R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x04R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x04R\x05value:\x02\x38\x01\"\x94\x02\n\x16\x46ieldExpressionMapBool\x12\xc1\x01\n\x03val\x18\x01 \x03(\x0b\x32L.buf.validate.conformance.cases.custom_rules.FieldExpressionMapBool.ValEntryBa\xbaH^\xba\x01[\n\x19\x66ield_expression.map.bool\x12\x1f\x61ll map values must equal false\x1a\x1dthis.all(k, this[k] == false)R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x08R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x08R\x05value:\x02\x38\x01\"\x9a\x02\n\x18\x46ieldExpressionMapString\x12\xc5\x01\n\x03val\x18\x01 \x03(\x0b\x32N.buf.validate.conformance.cases.custom_rules.FieldExpressionMapString.ValEntryBc\xbaH`\xba\x01]\n\x1b\x66ield_expression.map.string\x12\x1f\x61ll map values must equal \'foo\'\x1a\x1dthis.all(k, this[k] == \'foo\')R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xca\x02\n\x16\x46ieldExpressionMapEnum\x12\xc4\x01\n\x03val\x18\x01 \x03(\x0b\x32L.buf.validate.conformance.cases.custom_rules.FieldExpressionMapEnum.ValEntryBd\xbaHa\xba\x01^\n\x19\x66ield_expression.map.enum\x12&test message field_expression.map.enum\x1a\x19this.all(k, this[k] == 1)R\x03val\x1ai\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12G\n\x05value\x18\x02 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x05value:\x02\x38\x01\"\x87\x03\n\x19\x46ieldExpressionMapMessage\x12\xcf\x01\n\x03val\x18\x01 \x03(\x0b\x32O.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessage.ValEntryBl\xbaHi\xba\x01\x66\n\x1c\x66ield_expression.map.message\x12)test message field_expression.map.message\x1a\x1bthis.all(k, this[k].a == 1)R\x03val\x1a\x82\x01\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12`\n\x05value\x18\x02 \x01(\x0b\x32J.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessage.MsgR\x05value:\x02\x38\x01\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\x99\x02\n\x16\x46ieldExpressionMapKeys\x12\xc6\x01\n\x03val\x18\x01 \x03(\x0b\x32L.buf.validate.conformance.cases.custom_rules.FieldExpressionMapKeys.ValEntryBf\xbaHc\x9a\x01`\"^\xba\x01[\n\x19\x66ield_expression.map.keys\x12&test message field_expression.map.keys\x1a\x16this == 4 || this == 8R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"\xae\x02\n\x1e\x46ieldExpressionMapScalarValues\x12\xd3\x01\n\x03val\x18\x01 \x03(\x0b\x32T.buf.validate.conformance.cases.custom_rules.FieldExpressionMapScalarValues.ValEntryBk\xbaHh\x9a\x01\x65*c\xba\x01`\n\"field_expression.map.scalar.values\x12/test message field_expression.map.scalar.values\x1a\tthis == 1R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"\xd9\x02\n\x1c\x46ieldExpressionMapEnumValues\x12\xcd\x01\n\x03val\x18\x01 \x03(\x0b\x32R.buf.validate.conformance.cases.custom_rules.FieldExpressionMapEnumValues.ValEntryBg\xbaHd\x9a\x01\x61*_\xba\x01\\\n field_expression.map.enum.values\x12-test message field_expression.map.enum.values\x1a\tthis == 1R\x03val\x1ai\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12G\n\x05value\x18\x02 \x01(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumR\x05value:\x02\x38\x01\"\x9c\x03\n\x1f\x46ieldExpressionMapMessageValues\x12\xd8\x01\n\x03val\x18\x01 \x03(\x0b\x32U.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessageValues.ValEntryBo\xbaHl\x9a\x01i*g\xba\x01\x64\n#field_expression.map.message.values\x12\x30test message field_expression.map.message.values\x1a\x0bthis.a == 1R\x03val\x1a\x88\x01\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\x05R\x03key\x12\x66\n\x05value\x18\x02 \x01(\x0b\x32P.buf.validate.conformance.cases.custom_rules.FieldExpressionMapMessageValues.MsgR\x05value:\x02\x38\x01\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\x9f\x01\n\x1d\x46ieldExpressionRepeatedScalar\x12~\n\x03val\x18\x01 \x03(\x05\x42l\xbaHi\xba\x01\x66\n field_expression.repeated.scalar\x12-test message field_expression.repeated.scalar\x1a\x13this.all(e, e == 1)R\x03val\"\xcd\x01\n\x1b\x46ieldExpressionRepeatedEnum\x12\xad\x01\n\x03val\x18\x01 \x03(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumBh\xbaHe\xba\x01\x62\n\x1e\x66ield_expression.repeated.enum\x12+test message field_expression.repeated.enum\x1a\x13this.all(e, e == 1)R\x03val\"\x8b\x02\n\x1e\x46ieldExpressionRepeatedMessage\x12\xd3\x01\n\x03val\x18\x01 \x03(\x0b\x32O.buf.validate.conformance.cases.custom_rules.FieldExpressionRepeatedMessage.MsgBp\xbaHm\xba\x01j\n!field_expression.repeated.message\x12.test message field_expression.repeated.message\x1a\x15this.all(e, e.a == 1)R\x03val\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61\"\xac\x01\n\"FieldExpressionRepeatedScalarItems\x12\x85\x01\n\x03val\x18\x01 \x03(\x05\x42s\xbaHp\x92\x01m\"k\xba\x01h\n&field_expression.repeated.scalar.items\x12\x33test message field_expression.repeated.scalar.items\x1a\tthis == 1R\x03val\"\xd9\x01\n FieldExpressionRepeatedEnumItems\x12\xb4\x01\n\x03val\x18\x01 \x03(\x0e\x32\x31.buf.validate.conformance.cases.custom_rules.EnumBo\xbaHl\x92\x01i\"g\xba\x01\x64\n$field_expression.repeated.enum.items\x12\x31test message field_expression.repeated.enum.items\x1a\tthis == 1R\x03val\"\x9c\x02\n#FieldExpressionRepeatedMessageItems\x12\xdf\x01\n\x03val\x18\x01 \x03(\x0b\x32T.buf.validate.conformance.cases.custom_rules.FieldExpressionRepeatedMessageItems.MsgBw\xbaHt\x92\x01q\"o\xba\x01l\n\'field_expression.repeated.message.items\x12\x34test message field_expression.repeated.message.items\x1a\x0bthis.a == 1R\x03val\x1a\x13\n\x03Msg\x12\x0c\n\x01\x61\x18\x01 \x01(\x05R\x01\x61**\n\x04\x45num\x12\x14\n\x10\x45NUM_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x45NUM_ONE\x10\x01\x42\x91\x02\n/com.buf.validate.conformance.cases.custom_rulesB\x10\x43ustomRulesProtoP\x01\xa2\x02\x05\x42VCCC\xaa\x02*Buf.Validate.Conformance.Cases.CustomRules\xca\x02*Buf\\Validate\\Conformance\\Cases\\CustomRules\xe2\x02\x36\x42uf\\Validate\\Conformance\\Cases\\CustomRules\\GPBMetadata\xea\x02.Buf::Validate::Conformance::Cases::CustomRulesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -41,6 +41,8 @@ _globals['_MESSAGEEXPRESSIONS_NESTED']._serialized_options = b'\272HO\032M\n\031message_expression_nested\0320this.a > this.b ? \'\': \'a must be greater than b\'' _globals['_MESSAGEEXPRESSIONS']._loaded_options = None _globals['_MESSAGEEXPRESSIONS']._serialized_options = b'\272H\314\001\032C\n\031message_expression_scalar\022\025a must be less than b\032\017this.a < this.b\032?\n\027message_expression_enum\022\022c must not equal d\032\020this.c != this.d\032D\n\030message_expression_embed\022\022e.a must equal f.a\032\024this.e.a == this.f.a' + _globals['_MESSAGEEXPRESSIONONLY']._loaded_options = None + _globals['_MESSAGEEXPRESSIONONLY']._serialized_options = b'\272H\014*\nthis.a > 0' _globals['_MISSINGFIELD']._loaded_options = None _globals['_MISSINGFIELD']._serialized_options = b'\272H1\032/\n\rmissing_field\022\022b must be positive\032\nthis.b > 0' _globals['_INCORRECTTYPE']._loaded_options = None @@ -49,6 +51,8 @@ _globals['_DYNRUNTIMEERROR']._serialized_options = b'\272HY\032W\n\017dyn_runtime_err\022.dynamic type tries to use a non-existent field\032\024dyn(this).b == \'foo\'' _globals['_NOWEQUALSNOW']._loaded_options = None _globals['_NOWEQUALSNOW']._serialized_options = b'\272HI\032G\n\016now_equals_now\022)now should equal now within an expression\032\nnow == now' + _globals['_FIELDEXPRESSIONONLY'].fields_by_name['val']._loaded_options = None + _globals['_FIELDEXPRESSIONONLY'].fields_by_name['val']._serialized_options = b'\272H\014\352\001\tthis > 42' _globals['_FIELDEXPRESSIONMULTIPLESCALAR'].fields_by_name['val']._loaded_options = None _globals['_FIELDEXPRESSIONMULTIPLESCALAR'].fields_by_name['val']._serialized_options = b'\272H\246\002\272\001_\n\"field_expression.multiple.scalar.1\022/test message field_expression.multiple.scalar.1\032\010this > 0\272\001_\n\"field_expression.multiple.scalar.2\022/test message field_expression.multiple.scalar.2\032\010this > 1\272\001_\n\"field_expression.multiple.scalar.3\022/test message field_expression.multiple.scalar.3\032\010this > 2' _globals['_FIELDEXPRESSIONOPTIONALSCALAR'].fields_by_name['val']._loaded_options = None @@ -119,8 +123,8 @@ _globals['_FIELDEXPRESSIONREPEATEDENUMITEMS'].fields_by_name['val']._serialized_options = b'\272Hl\222\001i\"g\272\001d\n$field_expression.repeated.enum.items\0221test message field_expression.repeated.enum.items\032\tthis == 1' _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS'].fields_by_name['val']._loaded_options = None _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS'].fields_by_name['val']._serialized_options = b'\272Ht\222\001q\"o\272\001l\n\'field_expression.repeated.message.items\0224test message field_expression.repeated.message.items\032\013this.a == 1' - _globals['_ENUM']._serialized_start=7668 - _globals['_ENUM']._serialized_end=7710 + _globals['_ENUM']._serialized_start=7782 + _globals['_ENUM']._serialized_end=7824 _globals['_NOEXPRESSIONS']._serialized_start=141 _globals['_NOEXPRESSIONS']._serialized_end=326 _globals['_NOEXPRESSIONS_NESTED']._serialized_start=318 @@ -129,94 +133,98 @@ _globals['_MESSAGEEXPRESSIONS']._serialized_end=1012 _globals['_MESSAGEEXPRESSIONS_NESTED']._serialized_start=681 _globals['_MESSAGEEXPRESSIONS_NESTED']._serialized_end=801 - _globals['_MISSINGFIELD']._serialized_start=1014 - _globals['_MISSINGFIELD']._serialized_end=1096 - _globals['_INCORRECTTYPE']._serialized_start=1098 - _globals['_INCORRECTTYPE']._serialized_end=1201 - _globals['_DYNRUNTIMEERROR']._serialized_start=1203 - _globals['_DYNRUNTIMEERROR']._serialized_end=1328 - _globals['_NOWEQUALSNOW']._serialized_start=1330 - _globals['_NOWEQUALSNOW']._serialized_end=1422 - _globals['_FIELDEXPRESSIONMULTIPLESCALAR']._serialized_start=1425 - _globals['_FIELDEXPRESSIONMULTIPLESCALAR']._serialized_end=1776 - _globals['_FIELDEXPRESSIONNESTEDSCALAR']._serialized_start=1778 - _globals['_FIELDEXPRESSIONNESTEDSCALAR']._serialized_end=1899 - _globals['_FIELDEXPRESSIONOPTIONALSCALAR']._serialized_start=1902 - _globals['_FIELDEXPRESSIONOPTIONALSCALAR']._serialized_end=2064 - _globals['_FIELDEXPRESSIONSCALAR']._serialized_start=2066 - _globals['_FIELDEXPRESSIONSCALAR']._serialized_end=2189 - _globals['_FIELDEXPRESSIONENUM']._serialized_start=2192 - _globals['_FIELDEXPRESSIONENUM']._serialized_end=2361 - _globals['_FIELDEXPRESSIONMESSAGE']._serialized_start=2364 - _globals['_FIELDEXPRESSIONMESSAGE']._serialized_end=2587 - _globals['_FIELDEXPRESSIONMESSAGE_MSG']._serialized_start=2568 - _globals['_FIELDEXPRESSIONMESSAGE_MSG']._serialized_end=2587 - _globals['_FIELDEXPRESSIONMAPINT32']._serialized_start=2590 - _globals['_FIELDEXPRESSIONMAPINT32']._serialized_end=2861 - _globals['_FIELDEXPRESSIONMAPINT32_VALENTRY']._serialized_start=2807 - _globals['_FIELDEXPRESSIONMAPINT32_VALENTRY']._serialized_end=2861 - _globals['_FIELDEXPRESSIONMAPINT64']._serialized_start=2864 - _globals['_FIELDEXPRESSIONMAPINT64']._serialized_end=3135 - _globals['_FIELDEXPRESSIONMAPINT64_VALENTRY']._serialized_start=3081 - _globals['_FIELDEXPRESSIONMAPINT64_VALENTRY']._serialized_end=3135 - _globals['_FIELDEXPRESSIONMAPUINT32']._serialized_start=3138 - _globals['_FIELDEXPRESSIONMAPUINT32']._serialized_end=3418 - _globals['_FIELDEXPRESSIONMAPUINT32_VALENTRY']._serialized_start=3364 - _globals['_FIELDEXPRESSIONMAPUINT32_VALENTRY']._serialized_end=3418 - _globals['_FIELDEXPRESSIONMAPUINT64']._serialized_start=3421 - _globals['_FIELDEXPRESSIONMAPUINT64']._serialized_end=3701 - _globals['_FIELDEXPRESSIONMAPUINT64_VALENTRY']._serialized_start=3647 - _globals['_FIELDEXPRESSIONMAPUINT64_VALENTRY']._serialized_end=3701 - _globals['_FIELDEXPRESSIONMAPBOOL']._serialized_start=3704 - _globals['_FIELDEXPRESSIONMAPBOOL']._serialized_end=3980 - _globals['_FIELDEXPRESSIONMAPBOOL_VALENTRY']._serialized_start=3926 - _globals['_FIELDEXPRESSIONMAPBOOL_VALENTRY']._serialized_end=3980 - _globals['_FIELDEXPRESSIONMAPSTRING']._serialized_start=3983 - _globals['_FIELDEXPRESSIONMAPSTRING']._serialized_end=4265 - _globals['_FIELDEXPRESSIONMAPSTRING_VALENTRY']._serialized_start=4211 - _globals['_FIELDEXPRESSIONMAPSTRING_VALENTRY']._serialized_end=4265 - _globals['_FIELDEXPRESSIONMAPENUM']._serialized_start=4268 - _globals['_FIELDEXPRESSIONMAPENUM']._serialized_end=4598 - _globals['_FIELDEXPRESSIONMAPENUM_VALENTRY']._serialized_start=4493 - _globals['_FIELDEXPRESSIONMAPENUM_VALENTRY']._serialized_end=4598 - _globals['_FIELDEXPRESSIONMAPMESSAGE']._serialized_start=4601 - _globals['_FIELDEXPRESSIONMAPMESSAGE']._serialized_end=4992 - _globals['_FIELDEXPRESSIONMAPMESSAGE_VALENTRY']._serialized_start=4841 - _globals['_FIELDEXPRESSIONMAPMESSAGE_VALENTRY']._serialized_end=4971 - _globals['_FIELDEXPRESSIONMAPMESSAGE_MSG']._serialized_start=2568 - _globals['_FIELDEXPRESSIONMAPMESSAGE_MSG']._serialized_end=2587 - _globals['_FIELDEXPRESSIONMAPKEYS']._serialized_start=4995 - _globals['_FIELDEXPRESSIONMAPKEYS']._serialized_end=5276 - _globals['_FIELDEXPRESSIONMAPKEYS_VALENTRY']._serialized_start=2807 - _globals['_FIELDEXPRESSIONMAPKEYS_VALENTRY']._serialized_end=2861 - _globals['_FIELDEXPRESSIONMAPSCALARVALUES']._serialized_start=5279 - _globals['_FIELDEXPRESSIONMAPSCALARVALUES']._serialized_end=5581 - _globals['_FIELDEXPRESSIONMAPSCALARVALUES_VALENTRY']._serialized_start=2807 - _globals['_FIELDEXPRESSIONMAPSCALARVALUES_VALENTRY']._serialized_end=2861 - _globals['_FIELDEXPRESSIONMAPENUMVALUES']._serialized_start=5584 - _globals['_FIELDEXPRESSIONMAPENUMVALUES']._serialized_end=5929 - _globals['_FIELDEXPRESSIONMAPENUMVALUES_VALENTRY']._serialized_start=4493 - _globals['_FIELDEXPRESSIONMAPENUMVALUES_VALENTRY']._serialized_end=4598 - _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES']._serialized_start=5932 - _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES']._serialized_end=6344 - _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_VALENTRY']._serialized_start=6187 - _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_VALENTRY']._serialized_end=6323 - _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_MSG']._serialized_start=2568 - _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_MSG']._serialized_end=2587 - _globals['_FIELDEXPRESSIONREPEATEDSCALAR']._serialized_start=6347 - _globals['_FIELDEXPRESSIONREPEATEDSCALAR']._serialized_end=6506 - _globals['_FIELDEXPRESSIONREPEATEDENUM']._serialized_start=6509 - _globals['_FIELDEXPRESSIONREPEATEDENUM']._serialized_end=6714 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGE']._serialized_start=6717 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGE']._serialized_end=6984 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGE_MSG']._serialized_start=2568 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGE_MSG']._serialized_end=2587 - _globals['_FIELDEXPRESSIONREPEATEDSCALARITEMS']._serialized_start=6987 - _globals['_FIELDEXPRESSIONREPEATEDSCALARITEMS']._serialized_end=7159 - _globals['_FIELDEXPRESSIONREPEATEDENUMITEMS']._serialized_start=7162 - _globals['_FIELDEXPRESSIONREPEATEDENUMITEMS']._serialized_end=7379 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS']._serialized_start=7382 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS']._serialized_end=7666 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS_MSG']._serialized_start=2568 - _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS_MSG']._serialized_end=2587 + _globals['_MESSAGEEXPRESSIONONLY']._serialized_start=1014 + _globals['_MESSAGEEXPRESSIONONLY']._serialized_end=1068 + _globals['_MISSINGFIELD']._serialized_start=1070 + _globals['_MISSINGFIELD']._serialized_end=1152 + _globals['_INCORRECTTYPE']._serialized_start=1154 + _globals['_INCORRECTTYPE']._serialized_end=1257 + _globals['_DYNRUNTIMEERROR']._serialized_start=1259 + _globals['_DYNRUNTIMEERROR']._serialized_end=1384 + _globals['_NOWEQUALSNOW']._serialized_start=1386 + _globals['_NOWEQUALSNOW']._serialized_end=1478 + _globals['_FIELDEXPRESSIONONLY']._serialized_start=1480 + _globals['_FIELDEXPRESSIONONLY']._serialized_end=1536 + _globals['_FIELDEXPRESSIONMULTIPLESCALAR']._serialized_start=1539 + _globals['_FIELDEXPRESSIONMULTIPLESCALAR']._serialized_end=1890 + _globals['_FIELDEXPRESSIONNESTEDSCALAR']._serialized_start=1892 + _globals['_FIELDEXPRESSIONNESTEDSCALAR']._serialized_end=2013 + _globals['_FIELDEXPRESSIONOPTIONALSCALAR']._serialized_start=2016 + _globals['_FIELDEXPRESSIONOPTIONALSCALAR']._serialized_end=2178 + _globals['_FIELDEXPRESSIONSCALAR']._serialized_start=2180 + _globals['_FIELDEXPRESSIONSCALAR']._serialized_end=2303 + _globals['_FIELDEXPRESSIONENUM']._serialized_start=2306 + _globals['_FIELDEXPRESSIONENUM']._serialized_end=2475 + _globals['_FIELDEXPRESSIONMESSAGE']._serialized_start=2478 + _globals['_FIELDEXPRESSIONMESSAGE']._serialized_end=2701 + _globals['_FIELDEXPRESSIONMESSAGE_MSG']._serialized_start=2682 + _globals['_FIELDEXPRESSIONMESSAGE_MSG']._serialized_end=2701 + _globals['_FIELDEXPRESSIONMAPINT32']._serialized_start=2704 + _globals['_FIELDEXPRESSIONMAPINT32']._serialized_end=2975 + _globals['_FIELDEXPRESSIONMAPINT32_VALENTRY']._serialized_start=2921 + _globals['_FIELDEXPRESSIONMAPINT32_VALENTRY']._serialized_end=2975 + _globals['_FIELDEXPRESSIONMAPINT64']._serialized_start=2978 + _globals['_FIELDEXPRESSIONMAPINT64']._serialized_end=3249 + _globals['_FIELDEXPRESSIONMAPINT64_VALENTRY']._serialized_start=3195 + _globals['_FIELDEXPRESSIONMAPINT64_VALENTRY']._serialized_end=3249 + _globals['_FIELDEXPRESSIONMAPUINT32']._serialized_start=3252 + _globals['_FIELDEXPRESSIONMAPUINT32']._serialized_end=3532 + _globals['_FIELDEXPRESSIONMAPUINT32_VALENTRY']._serialized_start=3478 + _globals['_FIELDEXPRESSIONMAPUINT32_VALENTRY']._serialized_end=3532 + _globals['_FIELDEXPRESSIONMAPUINT64']._serialized_start=3535 + _globals['_FIELDEXPRESSIONMAPUINT64']._serialized_end=3815 + _globals['_FIELDEXPRESSIONMAPUINT64_VALENTRY']._serialized_start=3761 + _globals['_FIELDEXPRESSIONMAPUINT64_VALENTRY']._serialized_end=3815 + _globals['_FIELDEXPRESSIONMAPBOOL']._serialized_start=3818 + _globals['_FIELDEXPRESSIONMAPBOOL']._serialized_end=4094 + _globals['_FIELDEXPRESSIONMAPBOOL_VALENTRY']._serialized_start=4040 + _globals['_FIELDEXPRESSIONMAPBOOL_VALENTRY']._serialized_end=4094 + _globals['_FIELDEXPRESSIONMAPSTRING']._serialized_start=4097 + _globals['_FIELDEXPRESSIONMAPSTRING']._serialized_end=4379 + _globals['_FIELDEXPRESSIONMAPSTRING_VALENTRY']._serialized_start=4325 + _globals['_FIELDEXPRESSIONMAPSTRING_VALENTRY']._serialized_end=4379 + _globals['_FIELDEXPRESSIONMAPENUM']._serialized_start=4382 + _globals['_FIELDEXPRESSIONMAPENUM']._serialized_end=4712 + _globals['_FIELDEXPRESSIONMAPENUM_VALENTRY']._serialized_start=4607 + _globals['_FIELDEXPRESSIONMAPENUM_VALENTRY']._serialized_end=4712 + _globals['_FIELDEXPRESSIONMAPMESSAGE']._serialized_start=4715 + _globals['_FIELDEXPRESSIONMAPMESSAGE']._serialized_end=5106 + _globals['_FIELDEXPRESSIONMAPMESSAGE_VALENTRY']._serialized_start=4955 + _globals['_FIELDEXPRESSIONMAPMESSAGE_VALENTRY']._serialized_end=5085 + _globals['_FIELDEXPRESSIONMAPMESSAGE_MSG']._serialized_start=2682 + _globals['_FIELDEXPRESSIONMAPMESSAGE_MSG']._serialized_end=2701 + _globals['_FIELDEXPRESSIONMAPKEYS']._serialized_start=5109 + _globals['_FIELDEXPRESSIONMAPKEYS']._serialized_end=5390 + _globals['_FIELDEXPRESSIONMAPKEYS_VALENTRY']._serialized_start=2921 + _globals['_FIELDEXPRESSIONMAPKEYS_VALENTRY']._serialized_end=2975 + _globals['_FIELDEXPRESSIONMAPSCALARVALUES']._serialized_start=5393 + _globals['_FIELDEXPRESSIONMAPSCALARVALUES']._serialized_end=5695 + _globals['_FIELDEXPRESSIONMAPSCALARVALUES_VALENTRY']._serialized_start=2921 + _globals['_FIELDEXPRESSIONMAPSCALARVALUES_VALENTRY']._serialized_end=2975 + _globals['_FIELDEXPRESSIONMAPENUMVALUES']._serialized_start=5698 + _globals['_FIELDEXPRESSIONMAPENUMVALUES']._serialized_end=6043 + _globals['_FIELDEXPRESSIONMAPENUMVALUES_VALENTRY']._serialized_start=4607 + _globals['_FIELDEXPRESSIONMAPENUMVALUES_VALENTRY']._serialized_end=4712 + _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES']._serialized_start=6046 + _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES']._serialized_end=6458 + _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_VALENTRY']._serialized_start=6301 + _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_VALENTRY']._serialized_end=6437 + _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_MSG']._serialized_start=2682 + _globals['_FIELDEXPRESSIONMAPMESSAGEVALUES_MSG']._serialized_end=2701 + _globals['_FIELDEXPRESSIONREPEATEDSCALAR']._serialized_start=6461 + _globals['_FIELDEXPRESSIONREPEATEDSCALAR']._serialized_end=6620 + _globals['_FIELDEXPRESSIONREPEATEDENUM']._serialized_start=6623 + _globals['_FIELDEXPRESSIONREPEATEDENUM']._serialized_end=6828 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGE']._serialized_start=6831 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGE']._serialized_end=7098 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGE_MSG']._serialized_start=2682 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGE_MSG']._serialized_end=2701 + _globals['_FIELDEXPRESSIONREPEATEDSCALARITEMS']._serialized_start=7101 + _globals['_FIELDEXPRESSIONREPEATEDSCALARITEMS']._serialized_end=7273 + _globals['_FIELDEXPRESSIONREPEATEDENUMITEMS']._serialized_start=7276 + _globals['_FIELDEXPRESSIONREPEATEDENUMITEMS']._serialized_end=7493 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS']._serialized_start=7496 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS']._serialized_end=7780 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS_MSG']._serialized_start=2682 + _globals['_FIELDEXPRESSIONREPEATEDMESSAGEITEMS_MSG']._serialized_end=2701 # @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.pyi b/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.pyi index d03a1e7c..2b076f81 100644 --- a/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.pyi +++ b/gen/buf/validate/conformance/cases/custom_rules/custom_rules_pb2.pyi @@ -64,6 +64,12 @@ class MessageExpressions(_message.Message): f: MessageExpressions.Nested def __init__(self, a: _Optional[int] = ..., b: _Optional[int] = ..., c: _Optional[_Union[Enum, str]] = ..., d: _Optional[_Union[Enum, str]] = ..., e: _Optional[_Union[MessageExpressions.Nested, _Mapping]] = ..., f: _Optional[_Union[MessageExpressions.Nested, _Mapping]] = ...) -> None: ... +class MessageExpressionOnly(_message.Message): + __slots__ = ("a",) + A_FIELD_NUMBER: _ClassVar[int] + a: int + def __init__(self, a: _Optional[int] = ...) -> None: ... + class MissingField(_message.Message): __slots__ = ("a",) A_FIELD_NUMBER: _ClassVar[int] @@ -86,6 +92,12 @@ class NowEqualsNow(_message.Message): __slots__ = () def __init__(self) -> None: ... +class FieldExpressionOnly(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: int + def __init__(self, val: _Optional[int] = ...) -> None: ... + class FieldExpressionMultipleScalar(_message.Message): __slots__ = ("val",) VAL_FIELD_NUMBER: _ClassVar[int] diff --git a/gen/buf/validate/conformance/cases/groups_editions_pb2.py b/gen/buf/validate/conformance/cases/groups_editions_pb2.py new file mode 100644 index 00000000..d7bd22e8 --- /dev/null +++ b/gen/buf/validate/conformance/cases/groups_editions_pb2.py @@ -0,0 +1,48 @@ +# Copyright 2023-2025 Buf Technologies, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: buf/validate/conformance/cases/groups_editions.proto +# Protobuf Python Version: 5.26.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n4buf/validate/conformance/cases/groups_editions.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x83\x01\n\x0eGroupDelimited\x12Q\n\x05value\x18\x01 \x01(\x0b\x32\x34.buf.validate.conformance.cases.GroupDelimited.ValueB\x05\xaa\x01\x02(\x02R\x05value\x1a\x1e\n\x05Value\x12\x15\n\x01x\x18\x01 \x01(\x08\x42\x07\xbaH\x04j\x02\x08\x01R\x01xB\xd5\x01\n\"com.buf.validate.conformance.casesB\x13GroupsEditionsProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x08\x65\x64itionsp\xe8\x07') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.conformance.cases.groups_editions_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\"com.buf.validate.conformance.casesB\023GroupsEditionsProtoP\001\242\002\004BVCC\252\002\036Buf.Validate.Conformance.Cases\312\002\036Buf\\Validate\\Conformance\\Cases\342\002*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\352\002!Buf::Validate::Conformance::Cases' + _globals['_GROUPDELIMITED_VALUE'].fields_by_name['x']._loaded_options = None + _globals['_GROUPDELIMITED_VALUE'].fields_by_name['x']._serialized_options = b'\272H\004j\002\010\001' + _globals['_GROUPDELIMITED'].fields_by_name['value']._loaded_options = None + _globals['_GROUPDELIMITED'].fields_by_name['value']._serialized_options = b'\252\001\002(\002' + _globals['_GROUPDELIMITED']._serialized_start=118 + _globals['_GROUPDELIMITED']._serialized_end=249 + _globals['_GROUPDELIMITED_VALUE']._serialized_start=219 + _globals['_GROUPDELIMITED_VALUE']._serialized_end=249 +# @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/conformance/cases/groups_editions_pb2.pyi b/gen/buf/validate/conformance/cases/groups_editions_pb2.pyi new file mode 100644 index 00000000..bbb65e0d --- /dev/null +++ b/gen/buf/validate/conformance/cases/groups_editions_pb2.pyi @@ -0,0 +1,31 @@ +# Copyright 2023-2025 Buf Technologies, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from buf.validate import validate_pb2 as _validate_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GroupDelimited(_message.Message): + __slots__ = ("value",) + class Value(_message.Message): + __slots__ = ("x",) + X_FIELD_NUMBER: _ClassVar[int] + x: bool + def __init__(self, x: bool = ...) -> None: ... + VALUE_FIELD_NUMBER: _ClassVar[int] + value: GroupDelimited.Value + def __init__(self, value: _Optional[_Union[GroupDelimited.Value, _Mapping]] = ...) -> None: ... diff --git a/gen/buf/validate/conformance/cases/groups_proto2_pb2.py b/gen/buf/validate/conformance/cases/groups_proto2_pb2.py new file mode 100644 index 00000000..2ef631ae --- /dev/null +++ b/gen/buf/validate/conformance/cases/groups_proto2_pb2.py @@ -0,0 +1,64 @@ +# Copyright 2023-2025 Buf Technologies, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: buf/validate/conformance/cases/groups_proto2.proto +# Protobuf Python Version: 5.26.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2buf/validate/conformance/cases/groups_proto2.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x91\x01\n\rGroupOptional\x12R\n\x08optional\x18\x01 \x01(\n26.buf.validate.conformance.cases.GroupOptional.OptionalR\x08optional\x1a,\n\x08Optional\x12 \n\x05value\x18\x01 \x01(\tB\n\xbaH\x07r\x05\n\x03\x66ooR\x05value\"\x8e\x01\n\rGroupRepeated\x12R\n\x08repeated\x18\x01 \x03(\n26.buf.validate.conformance.cases.GroupRepeated.RepeatedR\x08repeated\x1a)\n\x08Repeated\x12\x1d\n\x05value\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x05value\"\x8e\x01\n\rGroupRequired\x12R\n\x08required\x18\x01 \x02(\n26.buf.validate.conformance.cases.GroupRequired.RequiredR\x08required\x1a)\n\x08Required\x12\x1d\n\x05value\x18\x01 \x01(\x08\x42\x07\xbaH\x04j\x02\x08\x01R\x05value\"\xe1\x01\n\x0bGroupCustom\x12J\n\x06\x63ustom\x18\x01 \x01(\n22.buf.validate.conformance.cases.GroupCustom.CustomR\x06\x63ustom\x1a\x85\x01\n\x06\x43ustom\x12\x14\n\x05value\x18\x01 \x01(\x05R\x05value\x12\x10\n\x03\x64iv\x18\x02 \x01(\x05R\x03\x64iv:S\xbaHP\x1aN\n\x10group.custom.div\x12\x1evalue must be divisible by div\x1a\x1athis.value % this.div == 0B\xd3\x01\n\"com.buf.validate.conformance.casesB\x11GroupsProto2ProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Cases') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.conformance.cases.groups_proto2_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\"com.buf.validate.conformance.casesB\021GroupsProto2ProtoP\001\242\002\004BVCC\252\002\036Buf.Validate.Conformance.Cases\312\002\036Buf\\Validate\\Conformance\\Cases\342\002*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\352\002!Buf::Validate::Conformance::Cases' + _globals['_GROUPOPTIONAL_OPTIONAL'].fields_by_name['value']._loaded_options = None + _globals['_GROUPOPTIONAL_OPTIONAL'].fields_by_name['value']._serialized_options = b'\272H\007r\005\n\003foo' + _globals['_GROUPREPEATED_REPEATED'].fields_by_name['value']._loaded_options = None + _globals['_GROUPREPEATED_REPEATED'].fields_by_name['value']._serialized_options = b'\272H\004\032\002 \000' + _globals['_GROUPREQUIRED_REQUIRED'].fields_by_name['value']._loaded_options = None + _globals['_GROUPREQUIRED_REQUIRED'].fields_by_name['value']._serialized_options = b'\272H\004j\002\010\001' + _globals['_GROUPCUSTOM_CUSTOM']._loaded_options = None + _globals['_GROUPCUSTOM_CUSTOM']._serialized_options = b'\272HP\032N\n\020group.custom.div\022\036value must be divisible by div\032\032this.value % this.div == 0' + _globals['_GROUPOPTIONAL']._serialized_start=116 + _globals['_GROUPOPTIONAL']._serialized_end=261 + _globals['_GROUPOPTIONAL_OPTIONAL']._serialized_start=217 + _globals['_GROUPOPTIONAL_OPTIONAL']._serialized_end=261 + _globals['_GROUPREPEATED']._serialized_start=264 + _globals['_GROUPREPEATED']._serialized_end=406 + _globals['_GROUPREPEATED_REPEATED']._serialized_start=365 + _globals['_GROUPREPEATED_REPEATED']._serialized_end=406 + _globals['_GROUPREQUIRED']._serialized_start=409 + _globals['_GROUPREQUIRED']._serialized_end=551 + _globals['_GROUPREQUIRED_REQUIRED']._serialized_start=510 + _globals['_GROUPREQUIRED_REQUIRED']._serialized_end=551 + _globals['_GROUPCUSTOM']._serialized_start=554 + _globals['_GROUPCUSTOM']._serialized_end=779 + _globals['_GROUPCUSTOM_CUSTOM']._serialized_start=646 + _globals['_GROUPCUSTOM_CUSTOM']._serialized_end=779 +# @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/conformance/cases/groups_proto2_pb2.pyi b/gen/buf/validate/conformance/cases/groups_proto2_pb2.pyi new file mode 100644 index 00000000..c67e1592 --- /dev/null +++ b/gen/buf/validate/conformance/cases/groups_proto2_pb2.pyi @@ -0,0 +1,67 @@ +# Copyright 2023-2025 Buf Technologies, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from buf.validate import validate_pb2 as _validate_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GroupOptional(_message.Message): + __slots__ = ("optional",) + class Optional(_message.Message): + __slots__ = ("value",) + VALUE_FIELD_NUMBER: _ClassVar[int] + value: str + def __init__(self, value: _Optional[str] = ...) -> None: ... + OPTIONAL_FIELD_NUMBER: _ClassVar[int] + optional: GroupOptional.Optional + def __init__(self, optional: _Optional[_Union[GroupOptional.Optional, _Mapping]] = ...) -> None: ... + +class GroupRepeated(_message.Message): + __slots__ = ("repeated",) + class Repeated(_message.Message): + __slots__ = ("value",) + VALUE_FIELD_NUMBER: _ClassVar[int] + value: int + def __init__(self, value: _Optional[int] = ...) -> None: ... + REPEATED_FIELD_NUMBER: _ClassVar[int] + repeated: _containers.RepeatedCompositeFieldContainer[GroupRepeated.Repeated] + def __init__(self, repeated: _Optional[_Iterable[_Union[GroupRepeated.Repeated, _Mapping]]] = ...) -> None: ... + +class GroupRequired(_message.Message): + __slots__ = ("required",) + class Required(_message.Message): + __slots__ = ("value",) + VALUE_FIELD_NUMBER: _ClassVar[int] + value: bool + def __init__(self, value: bool = ...) -> None: ... + REQUIRED_FIELD_NUMBER: _ClassVar[int] + required: GroupRequired.Required + def __init__(self, required: _Optional[_Union[GroupRequired.Required, _Mapping]] = ...) -> None: ... + +class GroupCustom(_message.Message): + __slots__ = ("custom",) + class Custom(_message.Message): + __slots__ = ("value", "div") + VALUE_FIELD_NUMBER: _ClassVar[int] + DIV_FIELD_NUMBER: _ClassVar[int] + value: int + div: int + def __init__(self, value: _Optional[int] = ..., div: _Optional[int] = ...) -> None: ... + CUSTOM_FIELD_NUMBER: _ClassVar[int] + custom: GroupCustom.Custom + def __init__(self, custom: _Optional[_Union[GroupCustom.Custom, _Mapping]] = ...) -> None: ... diff --git a/gen/buf/validate/conformance/cases/required_field_proto3_pb2.py b/gen/buf/validate/conformance/cases/required_field_proto3_pb2.py index 4eb3ae14..335a8ff5 100644 --- a/gen/buf/validate/conformance/cases/required_field_proto3_pb2.py +++ b/gen/buf/validate/conformance/cases/required_field_proto3_pb2.py @@ -29,7 +29,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n:buf/validate/conformance/cases/required_field_proto3.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"0\n\x14RequiredProto3Scalar\x12\x18\n\x03val\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x03val\"?\n RequiredProto3ScalarIgnoreAlways\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\"E\n\x1cRequiredProto3OptionalScalar\x12\x1d\n\x03val\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01H\x00R\x03val\x88\x01\x01\x42\x06\n\x04_val\"T\n(RequiredProto3OptionalScalarIgnoreAlways\x12 \n\x03val\x18\x01 \x01(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03H\x00R\x03val\x88\x01\x01\x42\x06\n\x04_val\"\x85\x01\n\x15RequiredProto3Message\x12S\n\x03val\x18\x01 \x01(\x0b\x32\x39.buf.validate.conformance.cases.RequiredProto3Message.MsgB\x06\xbaH\x03\xc8\x01\x01R\x03val\x1a\x17\n\x03Msg\x12\x10\n\x03val\x18\x01 \x01(\tR\x03val\"\xa0\x01\n!RequiredProto3MessageIgnoreAlways\x12\x62\n\x03val\x18\x01 \x01(\x0b\x32\x45.buf.validate.conformance.cases.RequiredProto3MessageIgnoreAlways.MsgB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\x1a\x17\n\x03Msg\x12\x10\n\x03val\x18\x01 \x01(\tR\x03val\"D\n\x13RequiredProto3OneOf\x12\x16\n\x01\x61\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01H\x00R\x01\x61\x12\x0e\n\x01\x62\x18\x02 \x01(\tH\x00R\x01\x62\x42\x05\n\x03val\"S\n\x1fRequiredProto3OneOfIgnoreAlways\x12\x19\n\x01\x61\x18\x01 \x01(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03H\x00R\x01\x61\x12\x0e\n\x01\x62\x18\x02 \x01(\tH\x00R\x01\x62\x42\x05\n\x03val\"2\n\x16RequiredProto3Repeated\x12\x18\n\x03val\x18\x01 \x03(\tB\x06\xbaH\x03\xc8\x01\x01R\x03val\"A\n\"RequiredProto3RepeatedIgnoreAlways\x12\x1b\n\x03val\x18\x01 \x03(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\"\xa1\x01\n\x11RequiredProto3Map\x12T\n\x03val\x18\x01 \x03(\x0b\x32:.buf.validate.conformance.cases.RequiredProto3Map.ValEntryB\x06\xbaH\x03\xc8\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xbc\x01\n\x1dRequiredProto3MapIgnoreAlways\x12\x63\n\x03val\x18\x01 \x03(\x0b\x32\x46.buf.validate.conformance.cases.RequiredProto3MapIgnoreAlways.ValEntryB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xac\x01\n\x14RequiredProto3MapKey\x12\\\n\x03val\x18\x01 \x03(\x0b\x32=.buf.validate.conformance.cases.RequiredProto3MapKey.ValEntryB\x0b\xbaH\x08\x9a\x01\x05\"\x03\xc8\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xb0\x01\n\x16RequiredProto3MapValue\x12^\n\x03val\x18\x01 \x03(\x0b\x32?.buf.validate.conformance.cases.RequiredProto3MapValue.ValEntryB\x0b\xbaH\x08\x9a\x01\x05*\x03\xc8\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\";\n\x1aRequiredProto3RepeatedItem\x12\x1d\n\x03val\x18\x01 \x03(\tB\x0b\xbaH\x08\x92\x01\x05\"\x03\xc8\x01\x01R\x03valB\xda\x01\n\"com.buf.validate.conformance.casesB\x18RequiredFieldProto3ProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n:buf/validate/conformance/cases/required_field_proto3.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"0\n\x14RequiredProto3Scalar\x12\x18\n\x03val\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x03val\"?\n RequiredProto3ScalarIgnoreAlways\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\"E\n\x1cRequiredProto3OptionalScalar\x12\x1d\n\x03val\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01H\x00R\x03val\x88\x01\x01\x42\x06\n\x04_val\"T\n(RequiredProto3OptionalScalarIgnoreAlways\x12 \n\x03val\x18\x01 \x01(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03H\x00R\x03val\x88\x01\x01\x42\x06\n\x04_val\"\x85\x01\n\x15RequiredProto3Message\x12S\n\x03val\x18\x01 \x01(\x0b\x32\x39.buf.validate.conformance.cases.RequiredProto3Message.MsgB\x06\xbaH\x03\xc8\x01\x01R\x03val\x1a\x17\n\x03Msg\x12\x10\n\x03val\x18\x01 \x01(\tR\x03val\"\xa0\x01\n!RequiredProto3MessageIgnoreAlways\x12\x62\n\x03val\x18\x01 \x01(\x0b\x32\x45.buf.validate.conformance.cases.RequiredProto3MessageIgnoreAlways.MsgB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\x1a\x17\n\x03Msg\x12\x10\n\x03val\x18\x01 \x01(\tR\x03val\"D\n\x13RequiredProto3OneOf\x12\x16\n\x01\x61\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01H\x00R\x01\x61\x12\x0e\n\x01\x62\x18\x02 \x01(\tH\x00R\x01\x62\x42\x05\n\x03val\"S\n\x1fRequiredProto3OneOfIgnoreAlways\x12\x19\n\x01\x61\x18\x01 \x01(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03H\x00R\x01\x61\x12\x0e\n\x01\x62\x18\x02 \x01(\tH\x00R\x01\x62\x42\x05\n\x03val\"2\n\x16RequiredProto3Repeated\x12\x18\n\x03val\x18\x01 \x03(\tB\x06\xbaH\x03\xc8\x01\x01R\x03val\"A\n\"RequiredProto3RepeatedIgnoreAlways\x12\x1b\n\x03val\x18\x01 \x03(\tB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\"\xa1\x01\n\x11RequiredProto3Map\x12T\n\x03val\x18\x01 \x03(\x0b\x32:.buf.validate.conformance.cases.RequiredProto3Map.ValEntryB\x06\xbaH\x03\xc8\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xbc\x01\n\x1dRequiredProto3MapIgnoreAlways\x12\x63\n\x03val\x18\x01 \x03(\x0b\x32\x46.buf.validate.conformance.cases.RequiredProto3MapIgnoreAlways.ValEntryB\t\xbaH\x06\xc8\x01\x01\xd8\x01\x03R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xac\x01\n\x14RequiredProto3MapKey\x12\\\n\x03val\x18\x01 \x03(\x0b\x32=.buf.validate.conformance.cases.RequiredProto3MapKey.ValEntryB\x0b\xbaH\x08\x9a\x01\x05\"\x03\xc8\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xb0\x01\n\x16RequiredProto3MapValue\x12^\n\x03val\x18\x01 \x03(\x0b\x32?.buf.validate.conformance.cases.RequiredProto3MapValue.ValEntryB\x0b\xbaH\x08\x9a\x01\x05*\x03\xc8\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\";\n\x1aRequiredProto3RepeatedItem\x12\x1d\n\x03val\x18\x01 \x03(\tB\x0b\xbaH\x08\x92\x01\x05\"\x03\xc8\x01\x01R\x03val\">\n\x1cRequiredImplicitProto3Scalar\x12\x1e\n\x03val\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18\x02\xc8\x01\x01R\x03val\"A\n\x1eRequiredImplicitProto3Repeated\x12\x1f\n\x03val\x18\x01 \x03(\tB\r\xbaH\n\x92\x01\x04\x08\x01\x10\x02\xc8\x01\x01R\x03val\"\xb8\x01\n\x19RequiredImplicitProto3Map\x12\x63\n\x03val\x18\x01 \x03(\x0b\x32\x42.buf.validate.conformance.cases.RequiredImplicitProto3Map.ValEntryB\r\xbaH\n\x9a\x01\x04\x08\x01\x10\x02\xc8\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\xda\x01\n\"com.buf.validate.conformance.casesB\x18RequiredFieldProto3ProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -75,6 +75,14 @@ _globals['_REQUIREDPROTO3MAPVALUE'].fields_by_name['val']._serialized_options = b'\272H\010\232\001\005*\003\310\001\001' _globals['_REQUIREDPROTO3REPEATEDITEM'].fields_by_name['val']._loaded_options = None _globals['_REQUIREDPROTO3REPEATEDITEM'].fields_by_name['val']._serialized_options = b'\272H\010\222\001\005\"\003\310\001\001' + _globals['_REQUIREDIMPLICITPROTO3SCALAR'].fields_by_name['val']._loaded_options = None + _globals['_REQUIREDIMPLICITPROTO3SCALAR'].fields_by_name['val']._serialized_options = b'\272H\tr\004\020\001\030\002\310\001\001' + _globals['_REQUIREDIMPLICITPROTO3REPEATED'].fields_by_name['val']._loaded_options = None + _globals['_REQUIREDIMPLICITPROTO3REPEATED'].fields_by_name['val']._serialized_options = b'\272H\n\222\001\004\010\001\020\002\310\001\001' + _globals['_REQUIREDIMPLICITPROTO3MAP_VALENTRY']._loaded_options = None + _globals['_REQUIREDIMPLICITPROTO3MAP_VALENTRY']._serialized_options = b'8\001' + _globals['_REQUIREDIMPLICITPROTO3MAP'].fields_by_name['val']._loaded_options = None + _globals['_REQUIREDIMPLICITPROTO3MAP'].fields_by_name['val']._serialized_options = b'\272H\n\232\001\004\010\001\020\002\310\001\001' _globals['_REQUIREDPROTO3SCALAR']._serialized_start=123 _globals['_REQUIREDPROTO3SCALAR']._serialized_end=171 _globals['_REQUIREDPROTO3SCALARIGNOREALWAYS']._serialized_start=173 @@ -117,4 +125,12 @@ _globals['_REQUIREDPROTO3MAPVALUE_VALENTRY']._serialized_end=1130 _globals['_REQUIREDPROTO3REPEATEDITEM']._serialized_start=1677 _globals['_REQUIREDPROTO3REPEATEDITEM']._serialized_end=1736 + _globals['_REQUIREDIMPLICITPROTO3SCALAR']._serialized_start=1738 + _globals['_REQUIREDIMPLICITPROTO3SCALAR']._serialized_end=1800 + _globals['_REQUIREDIMPLICITPROTO3REPEATED']._serialized_start=1802 + _globals['_REQUIREDIMPLICITPROTO3REPEATED']._serialized_end=1867 + _globals['_REQUIREDIMPLICITPROTO3MAP']._serialized_start=1870 + _globals['_REQUIREDIMPLICITPROTO3MAP']._serialized_end=2054 + _globals['_REQUIREDIMPLICITPROTO3MAP_VALENTRY']._serialized_start=1076 + _globals['_REQUIREDIMPLICITPROTO3MAP_VALENTRY']._serialized_end=1130 # @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/conformance/cases/required_field_proto3_pb2.pyi b/gen/buf/validate/conformance/cases/required_field_proto3_pb2.pyi index 4e41b801..a619a03c 100644 --- a/gen/buf/validate/conformance/cases/required_field_proto3_pb2.pyi +++ b/gen/buf/validate/conformance/cases/required_field_proto3_pb2.pyi @@ -151,3 +151,28 @@ class RequiredProto3RepeatedItem(_message.Message): VAL_FIELD_NUMBER: _ClassVar[int] val: _containers.RepeatedScalarFieldContainer[str] def __init__(self, val: _Optional[_Iterable[str]] = ...) -> None: ... + +class RequiredImplicitProto3Scalar(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: str + def __init__(self, val: _Optional[str] = ...) -> None: ... + +class RequiredImplicitProto3Repeated(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, val: _Optional[_Iterable[str]] = ...) -> None: ... + +class RequiredImplicitProto3Map(_message.Message): + __slots__ = ("val",) + class ValEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + VAL_FIELD_NUMBER: _ClassVar[int] + val: _containers.ScalarMap[str, str] + def __init__(self, val: _Optional[_Mapping[str, str]] = ...) -> None: ... diff --git a/gen/buf/validate/conformance/cases/strings_pb2.py b/gen/buf/validate/conformance/cases/strings_pb2.py index e8196520..b71d530b 100644 --- a/gen/buf/validate/conformance/cases/strings_pb2.py +++ b/gen/buf/validate/conformance/cases/strings_pb2.py @@ -29,7 +29,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n,buf/validate/conformance/cases/strings.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1e\n\nStringNone\x12\x10\n\x03val\x18\x01 \x01(\tR\x03val\"+\n\x0bStringConst\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05\n\x03\x66ooR\x03val\"-\n\x08StringIn\x12!\n\x03val\x18\x01 \x01(\tB\x0f\xbaH\x0cr\nR\x03\x62\x61rR\x03\x62\x61zR\x03val\"2\n\x0bStringNotIn\x12#\n\x03val\x18\x01 \x01(\tB\x11\xbaH\x0er\x0cZ\x04\x66izzZ\x04\x62uzzR\x03val\"\'\n\tStringLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x98\x01\x03R\x03val\")\n\x0cStringMinLen\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x03R\x03val\")\n\x0cStringMaxLen\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18\x05R\x03val\".\n\x0fStringMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x03\x18\x05R\x03val\"3\n\x14StringEqualMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x05\x18\x05R\x03val\",\n\x0eStringLenBytes\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xa0\x01\x04R\x03val\"+\n\x0eStringMinBytes\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02 \x04R\x03val\"+\n\x0eStringMaxBytes\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02(\x08R\x03val\"0\n\x11StringMinMaxBytes\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04 \x04(\x08R\x03val\"5\n\x16StringEqualMinMaxBytes\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04 \x04(\x04R\x03val\"9\n\rStringPattern\x12(\n\x03val\x18\x01 \x01(\tB\x16\xbaH\x13r\x11\x32\x0f(?i)^[a-z0-9]+$R\x03val\"9\n\x14StringPatternEscapes\x12!\n\x03val\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n2\x08\\* \\\\ \\wR\x03val\",\n\x0cStringPrefix\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05:\x03\x66ooR\x03val\".\n\x0eStringContains\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05J\x03\x62\x61rR\x03val\"2\n\x11StringNotContains\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xba\x01\x03\x62\x61rR\x03val\",\n\x0cStringSuffix\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x42\x03\x62\x61zR\x03val\"(\n\x0bStringEmail\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x03val\"+\n\x0eStringNotEmail\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02`\x00R\x03val\"+\n\rStringAddress\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xa8\x01\x01R\x03val\".\n\x10StringNotAddress\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xa8\x01\x00R\x03val\"+\n\x0eStringHostname\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02h\x01R\x03val\".\n\x11StringNotHostname\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02h\x00R\x03val\"%\n\x08StringIP\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x03val\"(\n\x0bStringNotIP\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x00R\x03val\"\'\n\nStringIPv4\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02x\x01R\x03val\"*\n\rStringNotIPv4\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02x\x00R\x03val\"(\n\nStringIPv6\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x01\x01R\x03val\"+\n\rStringNotIPv6\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x01\x00R\x03val\"3\n\x15StringIPWithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd0\x01\x01R\x03val\"6\n\x18StringNotIPWithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd0\x01\x00R\x03val\"5\n\x17StringIPv4WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd8\x01\x01R\x03val\"8\n\x1aStringNotIPv4WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd8\x01\x00R\x03val\"5\n\x17StringIPv6WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe0\x01\x01R\x03val\"8\n\x1aStringNotIPv6WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe0\x01\x00R\x03val\",\n\x0eStringIPPrefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe8\x01\x01R\x03val\"/\n\x11StringNotIPPrefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe8\x01\x00R\x03val\".\n\x10StringIPv4Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf0\x01\x01R\x03val\"1\n\x13StringNotIPv4Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf0\x01\x00R\x03val\".\n\x10StringIPv6Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf8\x01\x01R\x03val\"1\n\x13StringNotIPv6Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf8\x01\x00R\x03val\"\'\n\tStringURI\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01R\x03val\"*\n\x0cStringNotURI\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x00R\x03val\"*\n\x0cStringURIRef\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x90\x01\x01R\x03val\"-\n\x0fStringNotURIRef\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x90\x01\x00R\x03val\"(\n\nStringUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x03val\"+\n\rStringNotUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x00R\x03val\")\n\x0bStringTUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x02\x01R\x03val\",\n\x0eStringNotTUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x02\x00R\x03val\"2\n\x14StringHttpHeaderName\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xc0\x01\x01R\x03val\"3\n\x15StringHttpHeaderValue\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xc0\x01\x02R\x03val\":\n\x19StringHttpHeaderNameLoose\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\x01\x01\xc8\x01\x00R\x03val\";\n\x1aStringHttpHeaderValueLoose\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\x01\x02\xc8\x01\x00R\x03val\"1\n\x10StringUUIDIgnore\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x03val\"7\n\rStringInOneof\x12\x1f\n\x03\x62\x61r\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06R\x01\x61R\x01\x62H\x00R\x03\x62\x61rB\x05\n\x03\x66oo\"/\n\x11StringHostAndPort\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x02\x01R\x03val\"\xa4\x01\n\x19StringHostAndOptionalPort\x12\x86\x01\n\x03val\x18\x01 \x01(\tBt\xbaHq\xba\x01n\n\"string.host_and_port.optional_port\x12-value must be a host and (optional) port pair\x1a\x19this.isHostAndPort(false)R\x03val\".\n\rStringExample\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\x92\x02\x03\x66ooR\x03valB\xce\x01\n\"com.buf.validate.conformance.casesB\x0cStringsProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n,buf/validate/conformance/cases/strings.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1e\n\nStringNone\x12\x10\n\x03val\x18\x01 \x01(\tR\x03val\"+\n\x0bStringConst\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05\n\x03\x66ooR\x03val\"-\n\x08StringIn\x12!\n\x03val\x18\x01 \x01(\tB\x0f\xbaH\x0cr\nR\x03\x62\x61rR\x03\x62\x61zR\x03val\"2\n\x0bStringNotIn\x12#\n\x03val\x18\x01 \x01(\tB\x11\xbaH\x0er\x0cZ\x04\x66izzZ\x04\x62uzzR\x03val\"\'\n\tStringLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x98\x01\x03R\x03val\")\n\x0cStringMinLen\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x03R\x03val\")\n\x0cStringMaxLen\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18\x05R\x03val\".\n\x0fStringMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x03\x18\x05R\x03val\"3\n\x14StringEqualMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x05\x18\x05R\x03val\",\n\x0eStringLenBytes\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xa0\x01\x04R\x03val\"+\n\x0eStringMinBytes\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02 \x04R\x03val\"+\n\x0eStringMaxBytes\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02(\x08R\x03val\"0\n\x11StringMinMaxBytes\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04 \x04(\x08R\x03val\"5\n\x16StringEqualMinMaxBytes\x12\x1b\n\x03val\x18\x01 \x01(\tB\t\xbaH\x06r\x04 \x04(\x04R\x03val\"9\n\rStringPattern\x12(\n\x03val\x18\x01 \x01(\tB\x16\xbaH\x13r\x11\x32\x0f(?i)^[a-z0-9]+$R\x03val\"9\n\x14StringPatternEscapes\x12!\n\x03val\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n2\x08\\* \\\\ \\wR\x03val\",\n\x0cStringPrefix\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05:\x03\x66ooR\x03val\".\n\x0eStringContains\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05J\x03\x62\x61rR\x03val\"2\n\x11StringNotContains\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xba\x01\x03\x62\x61rR\x03val\",\n\x0cStringSuffix\x12\x1c\n\x03val\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x42\x03\x62\x61zR\x03val\"(\n\x0bStringEmail\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x03val\"+\n\x0eStringNotEmail\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02`\x00R\x03val\"+\n\rStringAddress\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xa8\x01\x01R\x03val\".\n\x10StringNotAddress\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xa8\x01\x00R\x03val\"+\n\x0eStringHostname\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02h\x01R\x03val\".\n\x11StringNotHostname\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02h\x00R\x03val\"%\n\x08StringIP\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x03val\"(\n\x0bStringNotIP\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x00R\x03val\"\'\n\nStringIPv4\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02x\x01R\x03val\"*\n\rStringNotIPv4\x12\x19\n\x03val\x18\x01 \x01(\tB\x07\xbaH\x04r\x02x\x00R\x03val\"(\n\nStringIPv6\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x01\x01R\x03val\"+\n\rStringNotIPv6\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x01\x00R\x03val\"3\n\x15StringIPWithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd0\x01\x01R\x03val\"6\n\x18StringNotIPWithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd0\x01\x00R\x03val\"5\n\x17StringIPv4WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd8\x01\x01R\x03val\"8\n\x1aStringNotIPv4WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xd8\x01\x00R\x03val\"5\n\x17StringIPv6WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe0\x01\x01R\x03val\"8\n\x1aStringNotIPv6WithPrefixLen\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe0\x01\x00R\x03val\",\n\x0eStringIPPrefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe8\x01\x01R\x03val\"/\n\x11StringNotIPPrefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xe8\x01\x00R\x03val\".\n\x10StringIPv4Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf0\x01\x01R\x03val\"1\n\x13StringNotIPv4Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf0\x01\x00R\x03val\".\n\x10StringIPv6Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf8\x01\x01R\x03val\"1\n\x13StringNotIPv6Prefix\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xf8\x01\x00R\x03val\"\'\n\tStringURI\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01R\x03val\"*\n\x0cStringNotURI\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x00R\x03val\"*\n\x0cStringURIRef\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x90\x01\x01R\x03val\"-\n\x0fStringNotURIRef\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x90\x01\x00R\x03val\"(\n\nStringUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x03val\"+\n\rStringNotUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x00R\x03val\")\n\x0bStringTUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x02\x01R\x03val\",\n\x0eStringNotTUUID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x02\x00R\x03val\"(\n\nStringULID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x98\x02\x01R\x03val\"+\n\rStringNotULID\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x98\x02\x00R\x03val\"1\n\x10StringULIDIgnore\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\x98\x02\x01\xd8\x01\x01R\x03val\"2\n\x14StringHttpHeaderName\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xc0\x01\x01R\x03val\"3\n\x15StringHttpHeaderValue\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xc0\x01\x02R\x03val\":\n\x19StringHttpHeaderNameLoose\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\x01\x01\xc8\x01\x00R\x03val\";\n\x1aStringHttpHeaderValueLoose\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\x01\x02\xc8\x01\x00R\x03val\"1\n\x10StringUUIDIgnore\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x03val\"7\n\rStringInOneof\x12\x1f\n\x03\x62\x61r\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06R\x01\x61R\x01\x62H\x00R\x03\x62\x61rB\x05\n\x03\x66oo\"/\n\x11StringHostAndPort\x12\x1a\n\x03val\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x80\x02\x01R\x03val\"\xa4\x01\n\x19StringHostAndOptionalPort\x12\x86\x01\n\x03val\x18\x01 \x01(\tBt\xbaHq\xba\x01n\n\"string.host_and_port.optional_port\x12-value must be a host and (optional) port pair\x1a\x19this.isHostAndPort(false)R\x03val\".\n\rStringExample\x12\x1d\n\x03val\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\x92\x02\x03\x66ooR\x03valB\xce\x01\n\"com.buf.validate.conformance.casesB\x0cStringsProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -139,6 +139,12 @@ _globals['_STRINGTUUID'].fields_by_name['val']._serialized_options = b'\272H\005r\003\210\002\001' _globals['_STRINGNOTTUUID'].fields_by_name['val']._loaded_options = None _globals['_STRINGNOTTUUID'].fields_by_name['val']._serialized_options = b'\272H\005r\003\210\002\000' + _globals['_STRINGULID'].fields_by_name['val']._loaded_options = None + _globals['_STRINGULID'].fields_by_name['val']._serialized_options = b'\272H\005r\003\230\002\001' + _globals['_STRINGNOTULID'].fields_by_name['val']._loaded_options = None + _globals['_STRINGNOTULID'].fields_by_name['val']._serialized_options = b'\272H\005r\003\230\002\000' + _globals['_STRINGULIDIGNORE'].fields_by_name['val']._loaded_options = None + _globals['_STRINGULIDIGNORE'].fields_by_name['val']._serialized_options = b'\272H\010r\003\230\002\001\330\001\001' _globals['_STRINGHTTPHEADERNAME'].fields_by_name['val']._loaded_options = None _globals['_STRINGHTTPHEADERNAME'].fields_by_name['val']._serialized_options = b'\272H\005r\003\300\001\001' _globals['_STRINGHTTPHEADERVALUE'].fields_by_name['val']._loaded_options = None @@ -261,22 +267,28 @@ _globals['_STRINGTUUID']._serialized_end=2522 _globals['_STRINGNOTTUUID']._serialized_start=2524 _globals['_STRINGNOTTUUID']._serialized_end=2568 - _globals['_STRINGHTTPHEADERNAME']._serialized_start=2570 - _globals['_STRINGHTTPHEADERNAME']._serialized_end=2620 - _globals['_STRINGHTTPHEADERVALUE']._serialized_start=2622 - _globals['_STRINGHTTPHEADERVALUE']._serialized_end=2673 - _globals['_STRINGHTTPHEADERNAMELOOSE']._serialized_start=2675 - _globals['_STRINGHTTPHEADERNAMELOOSE']._serialized_end=2733 - _globals['_STRINGHTTPHEADERVALUELOOSE']._serialized_start=2735 - _globals['_STRINGHTTPHEADERVALUELOOSE']._serialized_end=2794 - _globals['_STRINGUUIDIGNORE']._serialized_start=2796 - _globals['_STRINGUUIDIGNORE']._serialized_end=2845 - _globals['_STRINGINONEOF']._serialized_start=2847 - _globals['_STRINGINONEOF']._serialized_end=2902 - _globals['_STRINGHOSTANDPORT']._serialized_start=2904 - _globals['_STRINGHOSTANDPORT']._serialized_end=2951 - _globals['_STRINGHOSTANDOPTIONALPORT']._serialized_start=2954 - _globals['_STRINGHOSTANDOPTIONALPORT']._serialized_end=3118 - _globals['_STRINGEXAMPLE']._serialized_start=3120 - _globals['_STRINGEXAMPLE']._serialized_end=3166 + _globals['_STRINGULID']._serialized_start=2570 + _globals['_STRINGULID']._serialized_end=2610 + _globals['_STRINGNOTULID']._serialized_start=2612 + _globals['_STRINGNOTULID']._serialized_end=2655 + _globals['_STRINGULIDIGNORE']._serialized_start=2657 + _globals['_STRINGULIDIGNORE']._serialized_end=2706 + _globals['_STRINGHTTPHEADERNAME']._serialized_start=2708 + _globals['_STRINGHTTPHEADERNAME']._serialized_end=2758 + _globals['_STRINGHTTPHEADERVALUE']._serialized_start=2760 + _globals['_STRINGHTTPHEADERVALUE']._serialized_end=2811 + _globals['_STRINGHTTPHEADERNAMELOOSE']._serialized_start=2813 + _globals['_STRINGHTTPHEADERNAMELOOSE']._serialized_end=2871 + _globals['_STRINGHTTPHEADERVALUELOOSE']._serialized_start=2873 + _globals['_STRINGHTTPHEADERVALUELOOSE']._serialized_end=2932 + _globals['_STRINGUUIDIGNORE']._serialized_start=2934 + _globals['_STRINGUUIDIGNORE']._serialized_end=2983 + _globals['_STRINGINONEOF']._serialized_start=2985 + _globals['_STRINGINONEOF']._serialized_end=3040 + _globals['_STRINGHOSTANDPORT']._serialized_start=3042 + _globals['_STRINGHOSTANDPORT']._serialized_end=3089 + _globals['_STRINGHOSTANDOPTIONALPORT']._serialized_start=3092 + _globals['_STRINGHOSTANDOPTIONALPORT']._serialized_end=3256 + _globals['_STRINGEXAMPLE']._serialized_start=3258 + _globals['_STRINGEXAMPLE']._serialized_end=3304 # @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/conformance/cases/strings_pb2.pyi b/gen/buf/validate/conformance/cases/strings_pb2.pyi index d4b37a5d..884c45b7 100644 --- a/gen/buf/validate/conformance/cases/strings_pb2.pyi +++ b/gen/buf/validate/conformance/cases/strings_pb2.pyi @@ -331,6 +331,24 @@ class StringNotTUUID(_message.Message): val: str def __init__(self, val: _Optional[str] = ...) -> None: ... +class StringULID(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: str + def __init__(self, val: _Optional[str] = ...) -> None: ... + +class StringNotULID(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: str + def __init__(self, val: _Optional[str] = ...) -> None: ... + +class StringULIDIgnore(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: str + def __init__(self, val: _Optional[str] = ...) -> None: ... + class StringHttpHeaderName(_message.Message): __slots__ = ("val",) VAL_FIELD_NUMBER: _ClassVar[int] diff --git a/gen/buf/validate/conformance/cases/wkt_field_mask_pb2.py b/gen/buf/validate/conformance/cases/wkt_field_mask_pb2.py new file mode 100644 index 00000000..5a4f6c62 --- /dev/null +++ b/gen/buf/validate/conformance/cases/wkt_field_mask_pb2.py @@ -0,0 +1,63 @@ +# Copyright 2023-2025 Buf Technologies, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: buf/validate/conformance/cases/wkt_field_mask.proto +# Protobuf Python Version: 5.26.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n3buf/validate/conformance/cases/wkt_field_mask.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\x1a google/protobuf/field_mask.proto\"=\n\rFieldMaskNone\x12,\n\x03val\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\x03val\"I\n\x11\x46ieldMaskRequired\x12\x34\n\x03val\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x06\xbaH\x03\xc8\x01\x01R\x03val\"K\n\x0e\x46ieldMaskConst\x12\x39\n\x03val\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x0b\xbaH\x08\xe2\x01\x05\n\x03\n\x01\x61R\x03val\"I\n\x0b\x46ieldMaskIn\x12:\n\x03val\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x0c\xbaH\t\xe2\x01\x06\x12\x01\x61\x12\x01\x62R\x03val\"L\n\x0e\x46ieldMaskNotIn\x12:\n\x03val\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x0c\xbaH\t\xe2\x01\x06\x1a\x01\x63\x1a\x01\x64R\x03val\"M\n\x10\x46ieldMaskExample\x12\x39\n\x03val\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x0b\xbaH\x08\xe2\x01\x05\"\x03\n\x01\x61R\x03valB\xd3\x01\n\"com.buf.validate.conformance.casesB\x11WktFieldMaskProtoP\x01\xa2\x02\x04\x42VCC\xaa\x02\x1e\x42uf.Validate.Conformance.Cases\xca\x02\x1e\x42uf\\Validate\\Conformance\\Cases\xe2\x02*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\xea\x02!Buf::Validate::Conformance::Casesb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.conformance.cases.wkt_field_mask_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\"com.buf.validate.conformance.casesB\021WktFieldMaskProtoP\001\242\002\004BVCC\252\002\036Buf.Validate.Conformance.Cases\312\002\036Buf\\Validate\\Conformance\\Cases\342\002*Buf\\Validate\\Conformance\\Cases\\GPBMetadata\352\002!Buf::Validate::Conformance::Cases' + _globals['_FIELDMASKREQUIRED'].fields_by_name['val']._loaded_options = None + _globals['_FIELDMASKREQUIRED'].fields_by_name['val']._serialized_options = b'\272H\003\310\001\001' + _globals['_FIELDMASKCONST'].fields_by_name['val']._loaded_options = None + _globals['_FIELDMASKCONST'].fields_by_name['val']._serialized_options = b'\272H\010\342\001\005\n\003\n\001a' + _globals['_FIELDMASKIN'].fields_by_name['val']._loaded_options = None + _globals['_FIELDMASKIN'].fields_by_name['val']._serialized_options = b'\272H\t\342\001\006\022\001a\022\001b' + _globals['_FIELDMASKNOTIN'].fields_by_name['val']._loaded_options = None + _globals['_FIELDMASKNOTIN'].fields_by_name['val']._serialized_options = b'\272H\t\342\001\006\032\001c\032\001d' + _globals['_FIELDMASKEXAMPLE'].fields_by_name['val']._loaded_options = None + _globals['_FIELDMASKEXAMPLE'].fields_by_name['val']._serialized_options = b'\272H\010\342\001\005\"\003\n\001a' + _globals['_FIELDMASKNONE']._serialized_start=150 + _globals['_FIELDMASKNONE']._serialized_end=211 + _globals['_FIELDMASKREQUIRED']._serialized_start=213 + _globals['_FIELDMASKREQUIRED']._serialized_end=286 + _globals['_FIELDMASKCONST']._serialized_start=288 + _globals['_FIELDMASKCONST']._serialized_end=363 + _globals['_FIELDMASKIN']._serialized_start=365 + _globals['_FIELDMASKIN']._serialized_end=438 + _globals['_FIELDMASKNOTIN']._serialized_start=440 + _globals['_FIELDMASKNOTIN']._serialized_end=516 + _globals['_FIELDMASKEXAMPLE']._serialized_start=518 + _globals['_FIELDMASKEXAMPLE']._serialized_end=595 +# @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/conformance/cases/wkt_field_mask_pb2.pyi b/gen/buf/validate/conformance/cases/wkt_field_mask_pb2.pyi new file mode 100644 index 00000000..8b7e9707 --- /dev/null +++ b/gen/buf/validate/conformance/cases/wkt_field_mask_pb2.pyi @@ -0,0 +1,57 @@ +# Copyright 2023-2025 Buf Technologies, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from buf.validate import validate_pb2 as _validate_pb2 +from google.protobuf import field_mask_pb2 as _field_mask_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class FieldMaskNone(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: _field_mask_pb2.FieldMask + def __init__(self, val: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... + +class FieldMaskRequired(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: _field_mask_pb2.FieldMask + def __init__(self, val: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... + +class FieldMaskConst(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: _field_mask_pb2.FieldMask + def __init__(self, val: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... + +class FieldMaskIn(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: _field_mask_pb2.FieldMask + def __init__(self, val: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... + +class FieldMaskNotIn(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: _field_mask_pb2.FieldMask + def __init__(self, val: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... + +class FieldMaskExample(_message.Message): + __slots__ = ("val",) + VAL_FIELD_NUMBER: _ClassVar[int] + val: _field_mask_pb2.FieldMask + def __init__(self, val: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... diff --git a/gen/buf/validate/validate_pb2.py b/gen/buf/validate/validate_pb2.py index dc97f9a9..17c36ae2 100644 --- a/gen/buf/validate/validate_pb2.py +++ b/gen/buf/validate/validate_pb2.py @@ -28,10 +28,11 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x62uf/validate/validate.proto\x12\x0c\x62uf.validate\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"P\n\x04Rule\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression\"z\n\x0cMessageRules\x12$\n\x03\x63\x65l\x18\x03 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x34\n\x05oneof\x18\x04 \x03(\x0b\x32\x1e.buf.validate.MessageOneofRuleR\x05oneofJ\x04\x08\x01\x10\x02R\x08\x64isabled\"F\n\x10MessageOneofRule\x12\x16\n\x06\x66ields\x18\x01 \x03(\tR\x06\x66ields\x12\x1a\n\x08required\x18\x02 \x01(\x08R\x08required\"(\n\nOneofRules\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\"\xfd\t\n\nFieldRules\x12$\n\x03\x63\x65l\x18\x17 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x1a\n\x08required\x18\x19 \x01(\x08R\x08required\x12,\n\x06ignore\x18\x1b \x01(\x0e\x32\x14.buf.validate.IgnoreR\x06ignore\x12\x30\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x18.buf.validate.FloatRulesH\x00R\x05\x66loat\x12\x33\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x19.buf.validate.DoubleRulesH\x00R\x06\x64ouble\x12\x30\n\x05int32\x18\x03 \x01(\x0b\x32\x18.buf.validate.Int32RulesH\x00R\x05int32\x12\x30\n\x05int64\x18\x04 \x01(\x0b\x32\x18.buf.validate.Int64RulesH\x00R\x05int64\x12\x33\n\x06uint32\x18\x05 \x01(\x0b\x32\x19.buf.validate.UInt32RulesH\x00R\x06uint32\x12\x33\n\x06uint64\x18\x06 \x01(\x0b\x32\x19.buf.validate.UInt64RulesH\x00R\x06uint64\x12\x33\n\x06sint32\x18\x07 \x01(\x0b\x32\x19.buf.validate.SInt32RulesH\x00R\x06sint32\x12\x33\n\x06sint64\x18\x08 \x01(\x0b\x32\x19.buf.validate.SInt64RulesH\x00R\x06sint64\x12\x36\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x1a.buf.validate.Fixed32RulesH\x00R\x07\x66ixed32\x12\x36\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x1a.buf.validate.Fixed64RulesH\x00R\x07\x66ixed64\x12\x39\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x1b.buf.validate.SFixed32RulesH\x00R\x08sfixed32\x12\x39\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x1b.buf.validate.SFixed64RulesH\x00R\x08sfixed64\x12-\n\x04\x62ool\x18\r \x01(\x0b\x32\x17.buf.validate.BoolRulesH\x00R\x04\x62ool\x12\x33\n\x06string\x18\x0e \x01(\x0b\x32\x19.buf.validate.StringRulesH\x00R\x06string\x12\x30\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x18.buf.validate.BytesRulesH\x00R\x05\x62ytes\x12-\n\x04\x65num\x18\x10 \x01(\x0b\x32\x17.buf.validate.EnumRulesH\x00R\x04\x65num\x12\x39\n\x08repeated\x18\x12 \x01(\x0b\x32\x1b.buf.validate.RepeatedRulesH\x00R\x08repeated\x12*\n\x03map\x18\x13 \x01(\x0b\x32\x16.buf.validate.MapRulesH\x00R\x03map\x12*\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x16.buf.validate.AnyRulesH\x00R\x03\x61ny\x12\x39\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x1b.buf.validate.DurationRulesH\x00R\x08\x64uration\x12<\n\ttimestamp\x18\x16 \x01(\x0b\x32\x1c.buf.validate.TimestampRulesH\x00R\ttimestampB\x06\n\x04typeJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"Z\n\x0fPredefinedRules\x12$\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65lJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"\x90\x18\n\nFloatRules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x02\x42t\xc2Hq\no\n\x0b\x66loat.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa3\x01\n\x02lt\x18\x02 \x01(\x02\x42\x90\x01\xc2H\x8c\x01\n\x89\x01\n\x08\x66loat.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb4\x01\n\x03lte\x18\x03 \x01(\x02\x42\x9f\x01\xc2H\x9b\x01\n\x98\x01\n\tfloat.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf3\x07\n\x02gt\x18\x04 \x01(\x02\x42\xe0\x07\xc2H\xdc\x07\n\x8d\x01\n\x08\x66loat.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc3\x01\n\x0b\x66loat.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xcd\x01\n\x15\x66loat.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd3\x01\n\x0c\x66loat.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xdd\x01\n\x16\x66loat.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xbf\x08\n\x03gte\x18\x05 \x01(\x02\x42\xaa\x08\xc2H\xa6\x08\n\x9b\x01\n\tfloat.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd2\x01\n\x0c\x66loat.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdc\x01\n\x16\x66loat.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe2\x01\n\rfloat.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xec\x01\n\x17\x66loat.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x02\x42s\xc2Hp\nn\n\x08\x66loat.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x02\x42\x66\xc2Hc\na\n\x0c\x66loat.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12}\n\x06\x66inite\x18\x08 \x01(\x08\x42\x65\xc2Hb\n`\n\x0c\x66loat.finite\x1aPrules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x34\n\x07\x65xample\x18\t \x03(\x02\x42\x1a\xc2H\x17\n\x15\n\rfloat.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xa2\x18\n\x0b\x44oubleRules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x01\x42u\xc2Hr\np\n\x0c\x64ouble.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa4\x01\n\x02lt\x18\x02 \x01(\x01\x42\x91\x01\xc2H\x8d\x01\n\x8a\x01\n\tdouble.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb5\x01\n\x03lte\x18\x03 \x01(\x01\x42\xa0\x01\xc2H\x9c\x01\n\x99\x01\n\ndouble.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf8\x07\n\x02gt\x18\x04 \x01(\x01\x42\xe5\x07\xc2H\xe1\x07\n\x8e\x01\n\tdouble.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc4\x01\n\x0c\x64ouble.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xce\x01\n\x16\x64ouble.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd4\x01\n\rdouble.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xde\x01\n\x17\x64ouble.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xc4\x08\n\x03gte\x18\x05 \x01(\x01\x42\xaf\x08\xc2H\xab\x08\n\x9c\x01\n\ndouble.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd3\x01\n\rdouble.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdd\x01\n\x17\x64ouble.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe3\x01\n\x0e\x64ouble.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xed\x01\n\x18\x64ouble.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x01\x42t\xc2Hq\no\n\tdouble.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x01\x42g\xc2Hd\nb\n\rdouble.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12~\n\x06\x66inite\x18\x08 \x01(\x08\x42\x66\xc2Hc\na\n\rdouble.finite\x1aPrules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x35\n\x07\x65xample\x18\t \x03(\x01\x42\x1b\xc2H\x18\n\x16\n\x0e\x64ouble.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xba\x15\n\nInt32Rules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42t\xc2Hq\no\n\x0bint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x05\x42|\xc2Hy\nw\n\x08int32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x05\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x05\x42\x88\x07\xc2H\x84\x07\nz\n\x08int32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x05\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x05\x42s\xc2Hp\nn\n\x08int32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x05\x42\x66\xc2Hc\na\n\x0cint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\x08 \x03(\x05\x42\x1a\xc2H\x17\n\x15\n\rint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xba\x15\n\nInt64Rules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x03\x42t\xc2Hq\no\n\x0bint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x03\x42|\xc2Hy\nw\n\x08int64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x03\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x03\x42\x88\x07\xc2H\x84\x07\nz\n\x08int64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x03\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x03\x42s\xc2Hp\nn\n\x08int64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x03\x42\x66\xc2Hc\na\n\x0cint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\t \x03(\x03\x42\x1a\xc2H\x17\n\x15\n\rint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bUInt32Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\rBu\xc2Hr\np\n\x0cuint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\rB}\xc2Hz\nx\n\tuint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\rB\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\rB\x8d\x07\xc2H\x89\x07\n{\n\tuint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\rB\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\rBt\xc2Hq\no\n\tuint32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\rBg\xc2Hd\nb\n\ruint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\rB\x1b\xc2H\x18\n\x16\n\x0euint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bUInt64Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x04\x42u\xc2Hr\np\n\x0cuint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x04\x42}\xc2Hz\nx\n\tuint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x04\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x04\x42\x8d\x07\xc2H\x89\x07\n{\n\tuint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x04\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x04\x42t\xc2Hq\no\n\tuint64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x04\x42g\xc2Hd\nb\n\ruint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x04\x42\x1b\xc2H\x18\n\x16\n\x0euint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bSInt32Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x11\x42u\xc2Hr\np\n\x0csint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x11\x42}\xc2Hz\nx\n\tsint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x11\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x11\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x11\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x11\x42t\xc2Hq\no\n\tsint32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x11\x42g\xc2Hd\nb\n\rsint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x11\x42\x1b\xc2H\x18\n\x16\n\x0esint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bSInt64Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x12\x42u\xc2Hr\np\n\x0csint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x12\x42}\xc2Hz\nx\n\tsint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x12\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x12\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x12\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x12\x42t\xc2Hq\no\n\tsint64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x12\x42g\xc2Hd\nb\n\rsint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x12\x42\x1b\xc2H\x18\n\x16\n\x0esint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xdc\x15\n\x0c\x46ixed32Rules\x12\x8c\x01\n\x05\x63onst\x18\x01 \x01(\x07\x42v\xc2Hs\nq\n\rfixed32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x90\x01\n\x02lt\x18\x02 \x01(\x07\x42~\xc2H{\ny\n\nfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x07\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x07\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x07\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x85\x01\n\x02in\x18\x06 \x03(\x07\x42u\xc2Hr\np\n\nfixed32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x07\x42h\xc2He\nc\n\x0e\x66ixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x07\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xdc\x15\n\x0c\x46ixed64Rules\x12\x8c\x01\n\x05\x63onst\x18\x01 \x01(\x06\x42v\xc2Hs\nq\n\rfixed64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x90\x01\n\x02lt\x18\x02 \x01(\x06\x42~\xc2H{\ny\n\nfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x06\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x06\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x06\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x85\x01\n\x02in\x18\x06 \x03(\x06\x42u\xc2Hr\np\n\nfixed64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x06\x42h\xc2He\nc\n\x0e\x66ixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x06\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xee\x15\n\rSFixed32Rules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\x0f\x42w\xc2Ht\nr\n\x0esfixed32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x91\x01\n\x02lt\x18\x02 \x01(\x0f\x42\x7f\xc2H|\nz\n\x0bsfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x0f\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x0f\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x0f\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x86\x01\n\x02in\x18\x06 \x03(\x0f\x42v\xc2Hs\nq\n\x0bsfixed32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x0f\x42i\xc2Hf\nd\n\x0fsfixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x0f\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xee\x15\n\rSFixed64Rules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\x10\x42w\xc2Ht\nr\n\x0esfixed64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x91\x01\n\x02lt\x18\x02 \x01(\x10\x42\x7f\xc2H|\nz\n\x0bsfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x10\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x10\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x10\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x86\x01\n\x02in\x18\x06 \x03(\x10\x42v\xc2Hs\nq\n\x0bsfixed64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x10\x42i\xc2Hf\nd\n\x0fsfixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x10\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xd7\x01\n\tBoolRules\x12\x89\x01\n\x05\x63onst\x18\x01 \x01(\x08\x42s\xc2Hp\nn\n\nbool.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x33\n\x07\x65xample\x18\x02 \x03(\x08\x42\x19\xc2H\x16\n\x14\n\x0c\x62ool.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xd1\x39\n\x0bStringRules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\tBw\xc2Ht\nr\n\x0cstring.const\x1a\x62this != getField(rules, \'const\') ? \'value must equal `%s`\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x83\x01\n\x03len\x18\x13 \x01(\x04\x42q\xc2Hn\nl\n\nstring.len\x1a^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'R\x03len\x12\xa1\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x0estring.min_len\x1anuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x9f\x01\n\x07max_len\x18\x03 \x01(\x04\x42\x85\x01\xc2H\x81\x01\n\x7f\n\x0estring.max_len\x1amuint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\xa5\x01\n\tlen_bytes\x18\x14 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x10string.len_bytes\x1aluint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'R\x08lenBytes\x12\xad\x01\n\tmin_bytes\x18\x04 \x01(\x04\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x10string.min_bytes\x1atuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'R\x08minBytes\x12\xac\x01\n\tmax_bytes\x18\x05 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x10string.max_bytes\x1asuint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'R\x08maxBytes\x12\x96\x01\n\x07pattern\x18\x06 \x01(\tB|\xc2Hy\nw\n\x0estring.pattern\x1a\x65!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x8c\x01\n\x06prefix\x18\x07 \x01(\tBt\xc2Hq\no\n\rstring.prefix\x1a^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x8a\x01\n\x06suffix\x18\x08 \x01(\tBr\xc2Ho\nm\n\rstring.suffix\x1a\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x9a\x01\n\x08\x63ontains\x18\t \x01(\tB~\xc2H{\ny\n\x0fstring.contains\x1a\x66!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\xa5\x01\n\x0cnot_contains\x18\x17 \x01(\tB\x81\x01\xc2H~\n|\n\x13string.not_contains\x1a\x65this.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'R\x0bnotContains\x12\x84\x01\n\x02in\x18\n \x03(\tBt\xc2Hq\no\n\tstring.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x0b \x03(\tBg\xc2Hd\nb\n\rstring.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xe6\x01\n\x05\x65mail\x18\x0c \x01(\x08\x42\xcd\x01\xc2H\xc9\x01\na\n\x0cstring.email\x12#value must be a valid email address\x1a,!rules.email || this == \'\' || this.isEmail()\nd\n\x12string.email_empty\x12\x32value is empty, which is not a valid email address\x1a\x1a!rules.email || this != \'\'H\x00R\x05\x65mail\x12\xf1\x01\n\x08hostname\x18\r \x01(\x08\x42\xd2\x01\xc2H\xce\x01\ne\n\x0fstring.hostname\x12\x1evalue must be a valid hostname\x1a\x32!rules.hostname || this == \'\' || this.isHostname()\ne\n\x15string.hostname_empty\x12-value is empty, which is not a valid hostname\x1a\x1d!rules.hostname || this != \'\'H\x00R\x08hostname\x12\xcb\x01\n\x02ip\x18\x0e \x01(\x08\x42\xb8\x01\xc2H\xb4\x01\nU\n\tstring.ip\x12 value must be a valid IP address\x1a&!rules.ip || this == \'\' || this.isIp()\n[\n\x0fstring.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x17!rules.ip || this != \'\'H\x00R\x02ip\x12\xdc\x01\n\x04ipv4\x18\x0f \x01(\x08\x42\xc5\x01\xc2H\xc1\x01\n\\\n\x0bstring.ipv4\x12\"value must be a valid IPv4 address\x1a)!rules.ipv4 || this == \'\' || this.isIp(4)\na\n\x11string.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x19!rules.ipv4 || this != \'\'H\x00R\x04ipv4\x12\xdc\x01\n\x04ipv6\x18\x10 \x01(\x08\x42\xc5\x01\xc2H\xc1\x01\n\\\n\x0bstring.ipv6\x12\"value must be a valid IPv6 address\x1a)!rules.ipv6 || this == \'\' || this.isIp(6)\na\n\x11string.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x19!rules.ipv6 || this != \'\'H\x00R\x04ipv6\x12\xc4\x01\n\x03uri\x18\x11 \x01(\x08\x42\xaf\x01\xc2H\xab\x01\nQ\n\nstring.uri\x12\x19value must be a valid URI\x1a(!rules.uri || this == \'\' || this.isUri()\nV\n\x10string.uri_empty\x12(value is empty, which is not a valid URI\x1a\x18!rules.uri || this != \'\'H\x00R\x03uri\x12x\n\x07uri_ref\x18\x12 \x01(\x08\x42]\xc2HZ\nX\n\x0estring.uri_ref\x12#value must be a valid URI Reference\x1a!!rules.uri_ref || this.isUriRef()H\x00R\x06uriRef\x12\x99\x02\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08\x42\xfc\x01\xc2H\xf8\x01\n\x81\x01\n\x0estring.address\x12-value must be a valid hostname, or ip address\x1a@!rules.address || this == \'\' || this.isHostname() || this.isIp()\nr\n\x14string.address_empty\x12!rules.ipv4_with_prefixlen || this == \'\' || this.isIpPrefix(4)\n\x92\x01\n string.ipv4_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv4 address with prefix length\x1a(!rules.ipv4_with_prefixlen || this != \'\'H\x00R\x11ipv4WithPrefixlen\x12\xe2\x02\n\x13ipv6_with_prefixlen\x18\x1c \x01(\x08\x42\xaf\x02\xc2H\xab\x02\n\x93\x01\n\x1astring.ipv6_with_prefixlen\x12\x35value must be a valid IPv6 address with prefix length\x1a>!rules.ipv6_with_prefixlen || this == \'\' || this.isIpPrefix(6)\n\x92\x01\n string.ipv6_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv6 address with prefix length\x1a(!rules.ipv6_with_prefixlen || this != \'\'H\x00R\x11ipv6WithPrefixlen\x12\xfc\x01\n\tip_prefix\x18\x1d \x01(\x08\x42\xdc\x01\xc2H\xd8\x01\nl\n\x10string.ip_prefix\x12\x1fvalue must be a valid IP prefix\x1a\x37!rules.ip_prefix || this == \'\' || this.isIpPrefix(true)\nh\n\x16string.ip_prefix_empty\x12.value is empty, which is not a valid IP prefix\x1a\x1e!rules.ip_prefix || this != \'\'H\x00R\x08ipPrefix\x12\x8f\x02\n\x0bipv4_prefix\x18\x1e \x01(\x08\x42\xeb\x01\xc2H\xe7\x01\nu\n\x12string.ipv4_prefix\x12!value must be a valid IPv4 prefix\x1a!rules.host_and_port || this == \'\' || this.isHostAndPort(true)\ny\n\x1astring.host_and_port_empty\x12\x37value is empty, which is not a valid host and port pair\x1a\"!rules.host_and_port || this != \'\'H\x00R\x0bhostAndPort\x12\xb8\x05\n\x10well_known_regex\x18\x18 \x01(\x0e\x32\x18.buf.validate.KnownRegexB\xf1\x04\xc2H\xed\x04\n\xf0\x01\n#string.well_known_regex.header_name\x12&value must be a valid HTTP header name\x1a\xa0\x01rules.well_known_regex != 1 || this == \'\' || this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\')\n\x8d\x01\n)string.well_known_regex.header_name_empty\x12\x35value is empty, which is not a valid HTTP header name\x1a)rules.well_known_regex != 1 || this != \'\'\n\xe7\x01\n$string.well_known_regex.header_value\x12\'value must be a valid HTTP header value\x1a\x95\x01rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\')H\x00R\x0ewellKnownRegex\x12\x16\n\x06strict\x18\x19 \x01(\x08R\x06strict\x12\x35\n\x07\x65xample\x18\" \x03(\tB\x1b\xc2H\x18\n\x16\n\x0estring.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xce\x11\n\nBytesRules\x12\x87\x01\n\x05\x63onst\x18\x01 \x01(\x0c\x42q\xc2Hn\nl\n\x0b\x62ytes.const\x1a]this != getField(rules, \'const\') ? \'value must be %x\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12}\n\x03len\x18\r \x01(\x04\x42k\xc2Hh\nf\n\tbytes.len\x1aYuint(this.size()) != rules.len ? \'value length must be %s bytes\'.format([rules.len]) : \'\'R\x03len\x12\x98\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x7f\xc2H|\nz\n\rbytes.min_len\x1aiuint(this.size()) < rules.min_len ? \'value length must be at least %s bytes\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x90\x01\n\x07max_len\x18\x03 \x01(\x04\x42w\xc2Ht\nr\n\rbytes.max_len\x1a\x61uint(this.size()) > rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\x99\x01\n\x07pattern\x18\x04 \x01(\tB\x7f\xc2H|\nz\n\rbytes.pattern\x1ai!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x89\x01\n\x06prefix\x18\x05 \x01(\x0c\x42q\xc2Hn\nl\n\x0c\x62ytes.prefix\x1a\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x87\x01\n\x06suffix\x18\x06 \x01(\x0c\x42o\xc2Hl\nj\n\x0c\x62ytes.suffix\x1aZ!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x8d\x01\n\x08\x63ontains\x18\x07 \x01(\x0c\x42q\xc2Hn\nl\n\x0e\x62ytes.contains\x1aZ!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\xab\x01\n\x02in\x18\x08 \x03(\x0c\x42\x9a\x01\xc2H\x96\x01\n\x93\x01\n\x08\x62ytes.in\x1a\x86\x01getField(rules, \'in\').size() > 0 && !(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\t \x03(\x0c\x42\x66\xc2Hc\na\n\x0c\x62ytes.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xef\x01\n\x02ip\x18\n \x01(\x08\x42\xdc\x01\xc2H\xd8\x01\nt\n\x08\x62ytes.ip\x12 value must be a valid IP address\x1a\x46!rules.ip || this.size() == 0 || this.size() == 4 || this.size() == 16\n`\n\x0e\x62ytes.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x1d!rules.ip || this.size() != 0H\x00R\x02ip\x12\xea\x01\n\x04ipv4\x18\x0b \x01(\x08\x42\xd3\x01\xc2H\xcf\x01\ne\n\nbytes.ipv4\x12\"value must be a valid IPv4 address\x1a\x33!rules.ipv4 || this.size() == 0 || this.size() == 4\nf\n\x10\x62ytes.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x1f!rules.ipv4 || this.size() != 0H\x00R\x04ipv4\x12\xeb\x01\n\x04ipv6\x18\x0c \x01(\x08\x42\xd4\x01\xc2H\xd0\x01\nf\n\nbytes.ipv6\x12\"value must be a valid IPv6 address\x1a\x34!rules.ipv6 || this.size() == 0 || this.size() == 16\nf\n\x10\x62ytes.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x1f!rules.ipv6 || this.size() != 0H\x00R\x04ipv6\x12\x34\n\x07\x65xample\x18\x0e \x03(\x0c\x42\x1a\xc2H\x17\n\x15\n\rbytes.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xfd\x03\n\tEnumRules\x12\x89\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42s\xc2Hp\nn\n\nenum.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12!\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08R\x0b\x64\x65\x66inedOnly\x12\x82\x01\n\x02in\x18\x03 \x03(\x05\x42r\xc2Ho\nm\n\x07\x65num.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12|\n\x06not_in\x18\x04 \x03(\x05\x42\x65\xc2Hb\n`\n\x0b\x65num.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x33\n\x07\x65xample\x18\x05 \x03(\x05\x42\x19\xc2H\x16\n\x14\n\x0c\x65num.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\x9e\x04\n\rRepeatedRules\x12\xa8\x01\n\tmin_items\x18\x01 \x01(\x04\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x12repeated.min_items\x1amuint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'R\x08minItems\x12\xac\x01\n\tmax_items\x18\x02 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x12repeated.max_items\x1aquint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'R\x08maxItems\x12x\n\x06unique\x18\x03 \x01(\x08\x42`\xc2H]\n[\n\x0frepeated.unique\x12(repeated value must contain unique items\x1a\x1e!rules.unique || this.unique()R\x06unique\x12.\n\x05items\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05items*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xac\x03\n\x08MapRules\x12\x99\x01\n\tmin_pairs\x18\x01 \x01(\x04\x42|\xc2Hy\nw\n\rmap.min_pairs\x1a\x66uint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'R\x08minPairs\x12\x98\x01\n\tmax_pairs\x18\x02 \x01(\x04\x42{\xc2Hx\nv\n\rmap.max_pairs\x1a\x65uint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'R\x08maxPairs\x12,\n\x04keys\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x04keys\x12\x30\n\x06values\x18\x05 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x06values*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"1\n\x08\x41nyRules\x12\x0e\n\x02in\x18\x02 \x03(\tR\x02in\x12\x15\n\x06not_in\x18\x03 \x03(\tR\x05notIn\"\xc6\x17\n\rDurationRules\x12\xa8\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationBw\xc2Ht\nr\n\x0e\x64uration.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xac\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x7f\xc2H|\nz\n\x0b\x64uration.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xbf\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationB\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0c\x64uration.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xc5\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationB\x97\x07\xc2H\x93\x07\n}\n\x0b\x64uration.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0e\x64uration.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18\x64uration.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0f\x64uration.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19\x64uration.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x92\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0c\x64uration.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0f\x64uration.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19\x64uration.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10\x64uration.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1a\x64uration.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\xa1\x01\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.DurationBv\xc2Hs\nq\n\x0b\x64uration.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x9b\x01\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.DurationBi\xc2Hf\nd\n\x0f\x64uration.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12R\n\x07\x65xample\x18\t \x03(\x0b\x32\x19.google.protobuf.DurationB\x1d\xc2H\x1a\n\x18\n\x10\x64uration.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xca\x18\n\x0eTimestampRules\x12\xaa\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBx\xc2Hu\ns\n\x0ftimestamp.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xaf\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x80\x01\xc2H}\n{\n\x0ctimestamp.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xc1\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x90\x01\xc2H\x8c\x01\n\x89\x01\n\rtimestamp.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12s\n\x06lt_now\x18\x07 \x01(\x08\x42Z\xc2HW\nU\n\x10timestamp.lt_now\x1a\x41(rules.lt_now && this > now) ? \'value must be less than now\' : \'\'H\x00R\x05ltNow\x12\xcb\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x9c\x07\xc2H\x98\x07\n~\n\x0ctimestamp.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb7\x01\n\x0ftimestamp.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x19timestamp.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc7\x01\n\x10timestamp.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcf\x01\n\x1atimestamp.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x98\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe7\x07\xc2H\xe3\x07\n\x8c\x01\n\rtimestamp.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc6\x01\n\x10timestamp.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x1atimestamp.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd6\x01\n\x11timestamp.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xde\x01\n\x1btimestamp.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12v\n\x06gt_now\x18\x08 \x01(\x08\x42]\xc2HZ\nX\n\x10timestamp.gt_now\x1a\x44(rules.gt_now && this < now) ? \'value must be greater than now\' : \'\'H\x01R\x05gtNow\x12\xc0\x01\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x8c\x01\xc2H\x88\x01\n\x85\x01\n\x10timestamp.within\x1aqthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'R\x06within\x12T\n\x07\x65xample\x18\n \x03(\x0b\x32\x1a.google.protobuf.TimestampB\x1e\xc2H\x1b\n\x19\n\x11timestamp.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"E\n\nViolations\x12\x37\n\nviolations\x18\x01 \x03(\x0b\x32\x17.buf.validate.ViolationR\nviolations\"\xc5\x01\n\tViolation\x12-\n\x05\x66ield\x18\x05 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x05\x66ield\x12+\n\x04rule\x18\x06 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x04rule\x12\x17\n\x07rule_id\x18\x02 \x01(\tR\x06ruleId\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x17\n\x07\x66or_key\x18\x04 \x01(\x08R\x06\x66orKeyJ\x04\x08\x01\x10\x02R\nfield_path\"G\n\tFieldPath\x12:\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x1e.buf.validate.FieldPathElementR\x08\x65lements\"\xcc\x03\n\x10\x46ieldPathElement\x12!\n\x0c\x66ield_number\x18\x01 \x01(\x05R\x0b\x66ieldNumber\x12\x1d\n\nfield_name\x18\x02 \x01(\tR\tfieldName\x12I\n\nfield_type\x18\x03 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tfieldType\x12\x45\n\x08key_type\x18\x04 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\x07keyType\x12I\n\nvalue_type\x18\x05 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tvalueType\x12\x16\n\x05index\x18\x06 \x01(\x04H\x00R\x05index\x12\x1b\n\x08\x62ool_key\x18\x07 \x01(\x08H\x00R\x07\x62oolKey\x12\x19\n\x07int_key\x18\x08 \x01(\x03H\x00R\x06intKey\x12\x1b\n\x08uint_key\x18\t \x01(\x04H\x00R\x07uintKey\x12\x1f\n\nstring_key\x18\n \x01(\tH\x00R\tstringKeyB\x0b\n\tsubscript*\xa1\x01\n\x06Ignore\x12\x16\n\x12IGNORE_UNSPECIFIED\x10\x00\x12\x18\n\x14IGNORE_IF_ZERO_VALUE\x10\x01\x12\x11\n\rIGNORE_ALWAYS\x10\x03\"\x04\x08\x02\x10\x02*\x0cIGNORE_EMPTY*\x0eIGNORE_DEFAULT*\x17IGNORE_IF_DEFAULT_VALUE*\x15IGNORE_IF_UNPOPULATED*n\n\nKnownRegex\x12\x1b\n\x17KNOWN_REGEX_UNSPECIFIED\x10\x00\x12 \n\x1cKNOWN_REGEX_HTTP_HEADER_NAME\x10\x01\x12!\n\x1dKNOWN_REGEX_HTTP_HEADER_VALUE\x10\x02:V\n\x07message\x12\x1f.google.protobuf.MessageOptions\x18\x87\t \x01(\x0b\x32\x1a.buf.validate.MessageRulesR\x07message:N\n\x05oneof\x12\x1d.google.protobuf.OneofOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.OneofRulesR\x05oneof:N\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05\x66ield:]\n\npredefined\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32\x1d.buf.validate.PredefinedRulesR\npredefinedB\xbb\x01\n\x10\x63om.buf.validateB\rValidateProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\xa2\x02\x03\x42VX\xaa\x02\x0c\x42uf.Validate\xca\x02\x0c\x42uf\\Validate\xe2\x02\x18\x42uf\\Validate\\GPBMetadata\xea\x02\rBuf::Validate') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x62uf/validate/validate.proto\x12\x0c\x62uf.validate\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"P\n\x04Rule\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression\"\xa1\x01\n\x0cMessageRules\x12%\n\x0e\x63\x65l_expression\x18\x05 \x03(\tR\rcelExpression\x12$\n\x03\x63\x65l\x18\x03 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x34\n\x05oneof\x18\x04 \x03(\x0b\x32\x1e.buf.validate.MessageOneofRuleR\x05oneofJ\x04\x08\x01\x10\x02R\x08\x64isabled\"F\n\x10MessageOneofRule\x12\x16\n\x06\x66ields\x18\x01 \x03(\tR\x06\x66ields\x12\x1a\n\x08required\x18\x02 \x01(\x08R\x08required\"(\n\nOneofRules\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\"\xe3\n\n\nFieldRules\x12%\n\x0e\x63\x65l_expression\x18\x1d \x03(\tR\rcelExpression\x12$\n\x03\x63\x65l\x18\x17 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x1a\n\x08required\x18\x19 \x01(\x08R\x08required\x12,\n\x06ignore\x18\x1b \x01(\x0e\x32\x14.buf.validate.IgnoreR\x06ignore\x12\x30\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x18.buf.validate.FloatRulesH\x00R\x05\x66loat\x12\x33\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x19.buf.validate.DoubleRulesH\x00R\x06\x64ouble\x12\x30\n\x05int32\x18\x03 \x01(\x0b\x32\x18.buf.validate.Int32RulesH\x00R\x05int32\x12\x30\n\x05int64\x18\x04 \x01(\x0b\x32\x18.buf.validate.Int64RulesH\x00R\x05int64\x12\x33\n\x06uint32\x18\x05 \x01(\x0b\x32\x19.buf.validate.UInt32RulesH\x00R\x06uint32\x12\x33\n\x06uint64\x18\x06 \x01(\x0b\x32\x19.buf.validate.UInt64RulesH\x00R\x06uint64\x12\x33\n\x06sint32\x18\x07 \x01(\x0b\x32\x19.buf.validate.SInt32RulesH\x00R\x06sint32\x12\x33\n\x06sint64\x18\x08 \x01(\x0b\x32\x19.buf.validate.SInt64RulesH\x00R\x06sint64\x12\x36\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x1a.buf.validate.Fixed32RulesH\x00R\x07\x66ixed32\x12\x36\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x1a.buf.validate.Fixed64RulesH\x00R\x07\x66ixed64\x12\x39\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x1b.buf.validate.SFixed32RulesH\x00R\x08sfixed32\x12\x39\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x1b.buf.validate.SFixed64RulesH\x00R\x08sfixed64\x12-\n\x04\x62ool\x18\r \x01(\x0b\x32\x17.buf.validate.BoolRulesH\x00R\x04\x62ool\x12\x33\n\x06string\x18\x0e \x01(\x0b\x32\x19.buf.validate.StringRulesH\x00R\x06string\x12\x30\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x18.buf.validate.BytesRulesH\x00R\x05\x62ytes\x12-\n\x04\x65num\x18\x10 \x01(\x0b\x32\x17.buf.validate.EnumRulesH\x00R\x04\x65num\x12\x39\n\x08repeated\x18\x12 \x01(\x0b\x32\x1b.buf.validate.RepeatedRulesH\x00R\x08repeated\x12*\n\x03map\x18\x13 \x01(\x0b\x32\x16.buf.validate.MapRulesH\x00R\x03map\x12*\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x16.buf.validate.AnyRulesH\x00R\x03\x61ny\x12\x39\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x1b.buf.validate.DurationRulesH\x00R\x08\x64uration\x12=\n\nfield_mask\x18\x1c \x01(\x0b\x32\x1c.buf.validate.FieldMaskRulesH\x00R\tfieldMask\x12<\n\ttimestamp\x18\x16 \x01(\x0b\x32\x1c.buf.validate.TimestampRulesH\x00R\ttimestampB\x06\n\x04typeJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"Z\n\x0fPredefinedRules\x12$\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65lJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"\x90\x18\n\nFloatRules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x02\x42t\xc2Hq\no\n\x0b\x66loat.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa3\x01\n\x02lt\x18\x02 \x01(\x02\x42\x90\x01\xc2H\x8c\x01\n\x89\x01\n\x08\x66loat.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb4\x01\n\x03lte\x18\x03 \x01(\x02\x42\x9f\x01\xc2H\x9b\x01\n\x98\x01\n\tfloat.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf3\x07\n\x02gt\x18\x04 \x01(\x02\x42\xe0\x07\xc2H\xdc\x07\n\x8d\x01\n\x08\x66loat.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc3\x01\n\x0b\x66loat.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xcd\x01\n\x15\x66loat.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd3\x01\n\x0c\x66loat.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xdd\x01\n\x16\x66loat.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xbf\x08\n\x03gte\x18\x05 \x01(\x02\x42\xaa\x08\xc2H\xa6\x08\n\x9b\x01\n\tfloat.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd2\x01\n\x0c\x66loat.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdc\x01\n\x16\x66loat.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe2\x01\n\rfloat.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xec\x01\n\x17\x66loat.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x02\x42s\xc2Hp\nn\n\x08\x66loat.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x02\x42\x66\xc2Hc\na\n\x0c\x66loat.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12}\n\x06\x66inite\x18\x08 \x01(\x08\x42\x65\xc2Hb\n`\n\x0c\x66loat.finite\x1aPrules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x34\n\x07\x65xample\x18\t \x03(\x02\x42\x1a\xc2H\x17\n\x15\n\rfloat.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xa2\x18\n\x0b\x44oubleRules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x01\x42u\xc2Hr\np\n\x0c\x64ouble.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa4\x01\n\x02lt\x18\x02 \x01(\x01\x42\x91\x01\xc2H\x8d\x01\n\x8a\x01\n\tdouble.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb5\x01\n\x03lte\x18\x03 \x01(\x01\x42\xa0\x01\xc2H\x9c\x01\n\x99\x01\n\ndouble.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf8\x07\n\x02gt\x18\x04 \x01(\x01\x42\xe5\x07\xc2H\xe1\x07\n\x8e\x01\n\tdouble.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc4\x01\n\x0c\x64ouble.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xce\x01\n\x16\x64ouble.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd4\x01\n\rdouble.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xde\x01\n\x17\x64ouble.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xc4\x08\n\x03gte\x18\x05 \x01(\x01\x42\xaf\x08\xc2H\xab\x08\n\x9c\x01\n\ndouble.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd3\x01\n\rdouble.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdd\x01\n\x17\x64ouble.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe3\x01\n\x0e\x64ouble.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xed\x01\n\x18\x64ouble.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x01\x42t\xc2Hq\no\n\tdouble.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x01\x42g\xc2Hd\nb\n\rdouble.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12~\n\x06\x66inite\x18\x08 \x01(\x08\x42\x66\xc2Hc\na\n\rdouble.finite\x1aPrules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x35\n\x07\x65xample\x18\t \x03(\x01\x42\x1b\xc2H\x18\n\x16\n\x0e\x64ouble.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xba\x15\n\nInt32Rules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42t\xc2Hq\no\n\x0bint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x05\x42|\xc2Hy\nw\n\x08int32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x05\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x05\x42\x88\x07\xc2H\x84\x07\nz\n\x08int32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x05\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x05\x42s\xc2Hp\nn\n\x08int32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x05\x42\x66\xc2Hc\na\n\x0cint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\x08 \x03(\x05\x42\x1a\xc2H\x17\n\x15\n\rint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xba\x15\n\nInt64Rules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x03\x42t\xc2Hq\no\n\x0bint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x03\x42|\xc2Hy\nw\n\x08int64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x03\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x03\x42\x88\x07\xc2H\x84\x07\nz\n\x08int64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x03\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x03\x42s\xc2Hp\nn\n\x08int64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x03\x42\x66\xc2Hc\na\n\x0cint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\t \x03(\x03\x42\x1a\xc2H\x17\n\x15\n\rint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bUInt32Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\rBu\xc2Hr\np\n\x0cuint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\rB}\xc2Hz\nx\n\tuint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\rB\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\rB\x8d\x07\xc2H\x89\x07\n{\n\tuint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\rB\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\rBt\xc2Hq\no\n\tuint32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\rBg\xc2Hd\nb\n\ruint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\rB\x1b\xc2H\x18\n\x16\n\x0euint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bUInt64Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x04\x42u\xc2Hr\np\n\x0cuint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x04\x42}\xc2Hz\nx\n\tuint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x04\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x04\x42\x8d\x07\xc2H\x89\x07\n{\n\tuint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x04\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x04\x42t\xc2Hq\no\n\tuint64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x04\x42g\xc2Hd\nb\n\ruint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x04\x42\x1b\xc2H\x18\n\x16\n\x0euint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bSInt32Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x11\x42u\xc2Hr\np\n\x0csint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x11\x42}\xc2Hz\nx\n\tsint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x11\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x11\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x11\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x11\x42t\xc2Hq\no\n\tsint32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x11\x42g\xc2Hd\nb\n\rsint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x11\x42\x1b\xc2H\x18\n\x16\n\x0esint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bSInt64Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x12\x42u\xc2Hr\np\n\x0csint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x12\x42}\xc2Hz\nx\n\tsint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x12\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x12\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x12\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x12\x42t\xc2Hq\no\n\tsint64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x12\x42g\xc2Hd\nb\n\rsint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x12\x42\x1b\xc2H\x18\n\x16\n\x0esint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xdc\x15\n\x0c\x46ixed32Rules\x12\x8c\x01\n\x05\x63onst\x18\x01 \x01(\x07\x42v\xc2Hs\nq\n\rfixed32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x90\x01\n\x02lt\x18\x02 \x01(\x07\x42~\xc2H{\ny\n\nfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x07\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x07\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x07\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x85\x01\n\x02in\x18\x06 \x03(\x07\x42u\xc2Hr\np\n\nfixed32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x07\x42h\xc2He\nc\n\x0e\x66ixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x07\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xdc\x15\n\x0c\x46ixed64Rules\x12\x8c\x01\n\x05\x63onst\x18\x01 \x01(\x06\x42v\xc2Hs\nq\n\rfixed64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x90\x01\n\x02lt\x18\x02 \x01(\x06\x42~\xc2H{\ny\n\nfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x06\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x06\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x06\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x85\x01\n\x02in\x18\x06 \x03(\x06\x42u\xc2Hr\np\n\nfixed64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x06\x42h\xc2He\nc\n\x0e\x66ixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x06\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xee\x15\n\rSFixed32Rules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\x0f\x42w\xc2Ht\nr\n\x0esfixed32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x91\x01\n\x02lt\x18\x02 \x01(\x0f\x42\x7f\xc2H|\nz\n\x0bsfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x0f\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x0f\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x0f\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x86\x01\n\x02in\x18\x06 \x03(\x0f\x42v\xc2Hs\nq\n\x0bsfixed32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x0f\x42i\xc2Hf\nd\n\x0fsfixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x0f\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xee\x15\n\rSFixed64Rules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\x10\x42w\xc2Ht\nr\n\x0esfixed64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x91\x01\n\x02lt\x18\x02 \x01(\x10\x42\x7f\xc2H|\nz\n\x0bsfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x10\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x10\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x10\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x86\x01\n\x02in\x18\x06 \x03(\x10\x42v\xc2Hs\nq\n\x0bsfixed64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x10\x42i\xc2Hf\nd\n\x0fsfixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x10\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xd7\x01\n\tBoolRules\x12\x89\x01\n\x05\x63onst\x18\x01 \x01(\x08\x42s\xc2Hp\nn\n\nbool.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x33\n\x07\x65xample\x18\x02 \x03(\x08\x42\x19\xc2H\x16\n\x14\n\x0c\x62ool.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xcf;\n\x0bStringRules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\tBw\xc2Ht\nr\n\x0cstring.const\x1a\x62this != getField(rules, \'const\') ? \'value must equal `%s`\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x83\x01\n\x03len\x18\x13 \x01(\x04\x42q\xc2Hn\nl\n\nstring.len\x1a^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'R\x03len\x12\xa1\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x0estring.min_len\x1anuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x9f\x01\n\x07max_len\x18\x03 \x01(\x04\x42\x85\x01\xc2H\x81\x01\n\x7f\n\x0estring.max_len\x1amuint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\xa5\x01\n\tlen_bytes\x18\x14 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x10string.len_bytes\x1aluint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'R\x08lenBytes\x12\xad\x01\n\tmin_bytes\x18\x04 \x01(\x04\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x10string.min_bytes\x1atuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'R\x08minBytes\x12\xac\x01\n\tmax_bytes\x18\x05 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x10string.max_bytes\x1asuint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'R\x08maxBytes\x12\x96\x01\n\x07pattern\x18\x06 \x01(\tB|\xc2Hy\nw\n\x0estring.pattern\x1a\x65!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x8c\x01\n\x06prefix\x18\x07 \x01(\tBt\xc2Hq\no\n\rstring.prefix\x1a^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x8a\x01\n\x06suffix\x18\x08 \x01(\tBr\xc2Ho\nm\n\rstring.suffix\x1a\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x9a\x01\n\x08\x63ontains\x18\t \x01(\tB~\xc2H{\ny\n\x0fstring.contains\x1a\x66!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\xa5\x01\n\x0cnot_contains\x18\x17 \x01(\tB\x81\x01\xc2H~\n|\n\x13string.not_contains\x1a\x65this.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'R\x0bnotContains\x12\x84\x01\n\x02in\x18\n \x03(\tBt\xc2Hq\no\n\tstring.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x0b \x03(\tBg\xc2Hd\nb\n\rstring.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xe6\x01\n\x05\x65mail\x18\x0c \x01(\x08\x42\xcd\x01\xc2H\xc9\x01\na\n\x0cstring.email\x12#value must be a valid email address\x1a,!rules.email || this == \'\' || this.isEmail()\nd\n\x12string.email_empty\x12\x32value is empty, which is not a valid email address\x1a\x1a!rules.email || this != \'\'H\x00R\x05\x65mail\x12\xf1\x01\n\x08hostname\x18\r \x01(\x08\x42\xd2\x01\xc2H\xce\x01\ne\n\x0fstring.hostname\x12\x1evalue must be a valid hostname\x1a\x32!rules.hostname || this == \'\' || this.isHostname()\ne\n\x15string.hostname_empty\x12-value is empty, which is not a valid hostname\x1a\x1d!rules.hostname || this != \'\'H\x00R\x08hostname\x12\xcb\x01\n\x02ip\x18\x0e \x01(\x08\x42\xb8\x01\xc2H\xb4\x01\nU\n\tstring.ip\x12 value must be a valid IP address\x1a&!rules.ip || this == \'\' || this.isIp()\n[\n\x0fstring.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x17!rules.ip || this != \'\'H\x00R\x02ip\x12\xdc\x01\n\x04ipv4\x18\x0f \x01(\x08\x42\xc5\x01\xc2H\xc1\x01\n\\\n\x0bstring.ipv4\x12\"value must be a valid IPv4 address\x1a)!rules.ipv4 || this == \'\' || this.isIp(4)\na\n\x11string.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x19!rules.ipv4 || this != \'\'H\x00R\x04ipv4\x12\xdc\x01\n\x04ipv6\x18\x10 \x01(\x08\x42\xc5\x01\xc2H\xc1\x01\n\\\n\x0bstring.ipv6\x12\"value must be a valid IPv6 address\x1a)!rules.ipv6 || this == \'\' || this.isIp(6)\na\n\x11string.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x19!rules.ipv6 || this != \'\'H\x00R\x04ipv6\x12\xc4\x01\n\x03uri\x18\x11 \x01(\x08\x42\xaf\x01\xc2H\xab\x01\nQ\n\nstring.uri\x12\x19value must be a valid URI\x1a(!rules.uri || this == \'\' || this.isUri()\nV\n\x10string.uri_empty\x12(value is empty, which is not a valid URI\x1a\x18!rules.uri || this != \'\'H\x00R\x03uri\x12x\n\x07uri_ref\x18\x12 \x01(\x08\x42]\xc2HZ\nX\n\x0estring.uri_ref\x12#value must be a valid URI Reference\x1a!!rules.uri_ref || this.isUriRef()H\x00R\x06uriRef\x12\x99\x02\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08\x42\xfc\x01\xc2H\xf8\x01\n\x81\x01\n\x0estring.address\x12-value must be a valid hostname, or ip address\x1a@!rules.address || this == \'\' || this.isHostname() || this.isIp()\nr\n\x14string.address_empty\x12!rules.ipv4_with_prefixlen || this == \'\' || this.isIpPrefix(4)\n\x92\x01\n string.ipv4_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv4 address with prefix length\x1a(!rules.ipv4_with_prefixlen || this != \'\'H\x00R\x11ipv4WithPrefixlen\x12\xe2\x02\n\x13ipv6_with_prefixlen\x18\x1c \x01(\x08\x42\xaf\x02\xc2H\xab\x02\n\x93\x01\n\x1astring.ipv6_with_prefixlen\x12\x35value must be a valid IPv6 address with prefix length\x1a>!rules.ipv6_with_prefixlen || this == \'\' || this.isIpPrefix(6)\n\x92\x01\n string.ipv6_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv6 address with prefix length\x1a(!rules.ipv6_with_prefixlen || this != \'\'H\x00R\x11ipv6WithPrefixlen\x12\xfc\x01\n\tip_prefix\x18\x1d \x01(\x08\x42\xdc\x01\xc2H\xd8\x01\nl\n\x10string.ip_prefix\x12\x1fvalue must be a valid IP prefix\x1a\x37!rules.ip_prefix || this == \'\' || this.isIpPrefix(true)\nh\n\x16string.ip_prefix_empty\x12.value is empty, which is not a valid IP prefix\x1a\x1e!rules.ip_prefix || this != \'\'H\x00R\x08ipPrefix\x12\x8f\x02\n\x0bipv4_prefix\x18\x1e \x01(\x08\x42\xeb\x01\xc2H\xe7\x01\nu\n\x12string.ipv4_prefix\x12!value must be a valid IPv4 prefix\x1a!rules.host_and_port || this == \'\' || this.isHostAndPort(true)\ny\n\x1astring.host_and_port_empty\x12\x37value is empty, which is not a valid host and port pair\x1a\"!rules.host_and_port || this != \'\'H\x00R\x0bhostAndPort\x12\xfb\x01\n\x04ulid\x18# \x01(\x08\x42\xe4\x01\xc2H\xe0\x01\n\x82\x01\n\x0bstring.ulid\x12\x1avalue must be a valid ULID\x1aW!rules.ulid || this == \'\' || this.matches(\'^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$\')\nY\n\x11string.ulid_empty\x12)value is empty, which is not a valid ULID\x1a\x19!rules.ulid || this != \'\'H\x00R\x04ulid\x12\xb8\x05\n\x10well_known_regex\x18\x18 \x01(\x0e\x32\x18.buf.validate.KnownRegexB\xf1\x04\xc2H\xed\x04\n\xf0\x01\n#string.well_known_regex.header_name\x12&value must be a valid HTTP header name\x1a\xa0\x01rules.well_known_regex != 1 || this == \'\' || this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\')\n\x8d\x01\n)string.well_known_regex.header_name_empty\x12\x35value is empty, which is not a valid HTTP header name\x1a)rules.well_known_regex != 1 || this != \'\'\n\xe7\x01\n$string.well_known_regex.header_value\x12\'value must be a valid HTTP header value\x1a\x95\x01rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\')H\x00R\x0ewellKnownRegex\x12\x16\n\x06strict\x18\x19 \x01(\x08R\x06strict\x12\x35\n\x07\x65xample\x18\" \x03(\tB\x1b\xc2H\x18\n\x16\n\x0estring.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xac\x13\n\nBytesRules\x12\x87\x01\n\x05\x63onst\x18\x01 \x01(\x0c\x42q\xc2Hn\nl\n\x0b\x62ytes.const\x1a]this != getField(rules, \'const\') ? \'value must be %x\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12}\n\x03len\x18\r \x01(\x04\x42k\xc2Hh\nf\n\tbytes.len\x1aYuint(this.size()) != rules.len ? \'value length must be %s bytes\'.format([rules.len]) : \'\'R\x03len\x12\x98\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x7f\xc2H|\nz\n\rbytes.min_len\x1aiuint(this.size()) < rules.min_len ? \'value length must be at least %s bytes\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x90\x01\n\x07max_len\x18\x03 \x01(\x04\x42w\xc2Ht\nr\n\rbytes.max_len\x1a\x61uint(this.size()) > rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\x99\x01\n\x07pattern\x18\x04 \x01(\tB\x7f\xc2H|\nz\n\rbytes.pattern\x1ai!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x89\x01\n\x06prefix\x18\x05 \x01(\x0c\x42q\xc2Hn\nl\n\x0c\x62ytes.prefix\x1a\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x87\x01\n\x06suffix\x18\x06 \x01(\x0c\x42o\xc2Hl\nj\n\x0c\x62ytes.suffix\x1aZ!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x8d\x01\n\x08\x63ontains\x18\x07 \x01(\x0c\x42q\xc2Hn\nl\n\x0e\x62ytes.contains\x1aZ!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\xab\x01\n\x02in\x18\x08 \x03(\x0c\x42\x9a\x01\xc2H\x96\x01\n\x93\x01\n\x08\x62ytes.in\x1a\x86\x01getField(rules, \'in\').size() > 0 && !(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\t \x03(\x0c\x42\x66\xc2Hc\na\n\x0c\x62ytes.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xef\x01\n\x02ip\x18\n \x01(\x08\x42\xdc\x01\xc2H\xd8\x01\nt\n\x08\x62ytes.ip\x12 value must be a valid IP address\x1a\x46!rules.ip || this.size() == 0 || this.size() == 4 || this.size() == 16\n`\n\x0e\x62ytes.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x1d!rules.ip || this.size() != 0H\x00R\x02ip\x12\xea\x01\n\x04ipv4\x18\x0b \x01(\x08\x42\xd3\x01\xc2H\xcf\x01\ne\n\nbytes.ipv4\x12\"value must be a valid IPv4 address\x1a\x33!rules.ipv4 || this.size() == 0 || this.size() == 4\nf\n\x10\x62ytes.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x1f!rules.ipv4 || this.size() != 0H\x00R\x04ipv4\x12\xeb\x01\n\x04ipv6\x18\x0c \x01(\x08\x42\xd4\x01\xc2H\xd0\x01\nf\n\nbytes.ipv6\x12\"value must be a valid IPv6 address\x1a\x34!rules.ipv6 || this.size() == 0 || this.size() == 16\nf\n\x10\x62ytes.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x1f!rules.ipv6 || this.size() != 0H\x00R\x04ipv6\x12\xdb\x01\n\x04uuid\x18\x0f \x01(\x08\x42\xc4\x01\xc2H\xc0\x01\n^\n\nbytes.uuid\x12\x1avalue must be a valid UUID\x1a\x34!rules.uuid || this.size() == 0 || this.size() == 16\n^\n\x10\x62ytes.uuid_empty\x12)value is empty, which is not a valid UUID\x1a\x1f!rules.uuid || this.size() != 0H\x00R\x04uuid\x12\x34\n\x07\x65xample\x18\x0e \x03(\x0c\x42\x1a\xc2H\x17\n\x15\n\rbytes.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xfd\x03\n\tEnumRules\x12\x89\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42s\xc2Hp\nn\n\nenum.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12!\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08R\x0b\x64\x65\x66inedOnly\x12\x82\x01\n\x02in\x18\x03 \x03(\x05\x42r\xc2Ho\nm\n\x07\x65num.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12|\n\x06not_in\x18\x04 \x03(\x05\x42\x65\xc2Hb\n`\n\x0b\x65num.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x33\n\x07\x65xample\x18\x05 \x03(\x05\x42\x19\xc2H\x16\n\x14\n\x0c\x65num.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\x9e\x04\n\rRepeatedRules\x12\xa8\x01\n\tmin_items\x18\x01 \x01(\x04\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x12repeated.min_items\x1amuint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'R\x08minItems\x12\xac\x01\n\tmax_items\x18\x02 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x12repeated.max_items\x1aquint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'R\x08maxItems\x12x\n\x06unique\x18\x03 \x01(\x08\x42`\xc2H]\n[\n\x0frepeated.unique\x12(repeated value must contain unique items\x1a\x1e!rules.unique || this.unique()R\x06unique\x12.\n\x05items\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05items*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xac\x03\n\x08MapRules\x12\x99\x01\n\tmin_pairs\x18\x01 \x01(\x04\x42|\xc2Hy\nw\n\rmap.min_pairs\x1a\x66uint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'R\x08minPairs\x12\x98\x01\n\tmax_pairs\x18\x02 \x01(\x04\x42{\xc2Hx\nv\n\rmap.max_pairs\x1a\x65uint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'R\x08maxPairs\x12,\n\x04keys\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x04keys\x12\x30\n\x06values\x18\x05 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x06values*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"1\n\x08\x41nyRules\x12\x0e\n\x02in\x18\x02 \x03(\tR\x02in\x12\x15\n\x06not_in\x18\x03 \x03(\tR\x05notIn\"\xc6\x17\n\rDurationRules\x12\xa8\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationBw\xc2Ht\nr\n\x0e\x64uration.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xac\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x7f\xc2H|\nz\n\x0b\x64uration.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xbf\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationB\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0c\x64uration.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xc5\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationB\x97\x07\xc2H\x93\x07\n}\n\x0b\x64uration.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0e\x64uration.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18\x64uration.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0f\x64uration.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19\x64uration.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x92\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0c\x64uration.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0f\x64uration.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19\x64uration.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10\x64uration.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1a\x64uration.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\xa1\x01\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.DurationBv\xc2Hs\nq\n\x0b\x64uration.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x9b\x01\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.DurationBi\xc2Hf\nd\n\x0f\x64uration.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12R\n\x07\x65xample\x18\t \x03(\x0b\x32\x19.google.protobuf.DurationB\x1d\xc2H\x1a\n\x18\n\x10\x64uration.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\x98\x06\n\x0e\x46ieldMaskRules\x12\xc6\x01\n\x05\x63onst\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x93\x01\xc2H\x8f\x01\n\x8c\x01\n\x10\x66ield_mask.const\x1axthis.paths != getField(rules, \'const\').paths ? \'value must equal paths %s\'.format([getField(rules, \'const\').paths]) : \'\'R\x05\x63onst\x12\xdd\x01\n\x02in\x18\x02 \x03(\tB\xcc\x01\xc2H\xc8\x01\n\xc5\x01\n\rfield_mask.in\x1a\xb3\x01!this.paths.all(p, p in getField(rules, \'in\') || getField(rules, \'in\').exists(f, p.startsWith(f+\'.\'))) ? \'value must only contain paths in %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\xfa\x01\n\x06not_in\x18\x03 \x03(\tB\xe2\x01\xc2H\xde\x01\n\xdb\x01\n\x11\x66ield_mask.not_in\x1a\xc5\x01!this.paths.all(p, !(p in getField(rules, \'not_in\') || getField(rules, \'not_in\').exists(f, p.startsWith(f+\'.\')))) ? \'value must not contain any paths in %s\'.format([getField(rules, \'not_in\')]) : \'\'R\x05notIn\x12U\n\x07\x65xample\x18\x04 \x03(\x0b\x32\x1a.google.protobuf.FieldMaskB\x1f\xc2H\x1c\n\x1a\n\x12\x66ield_mask.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xca\x18\n\x0eTimestampRules\x12\xaa\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBx\xc2Hu\ns\n\x0ftimestamp.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xaf\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x80\x01\xc2H}\n{\n\x0ctimestamp.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xc1\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x90\x01\xc2H\x8c\x01\n\x89\x01\n\rtimestamp.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12s\n\x06lt_now\x18\x07 \x01(\x08\x42Z\xc2HW\nU\n\x10timestamp.lt_now\x1a\x41(rules.lt_now && this > now) ? \'value must be less than now\' : \'\'H\x00R\x05ltNow\x12\xcb\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x9c\x07\xc2H\x98\x07\n~\n\x0ctimestamp.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb7\x01\n\x0ftimestamp.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x19timestamp.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc7\x01\n\x10timestamp.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcf\x01\n\x1atimestamp.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x98\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe7\x07\xc2H\xe3\x07\n\x8c\x01\n\rtimestamp.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc6\x01\n\x10timestamp.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x1atimestamp.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd6\x01\n\x11timestamp.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xde\x01\n\x1btimestamp.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12v\n\x06gt_now\x18\x08 \x01(\x08\x42]\xc2HZ\nX\n\x10timestamp.gt_now\x1a\x44(rules.gt_now && this < now) ? \'value must be greater than now\' : \'\'H\x01R\x05gtNow\x12\xc0\x01\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x8c\x01\xc2H\x88\x01\n\x85\x01\n\x10timestamp.within\x1aqthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'R\x06within\x12T\n\x07\x65xample\x18\n \x03(\x0b\x32\x1a.google.protobuf.TimestampB\x1e\xc2H\x1b\n\x19\n\x11timestamp.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"E\n\nViolations\x12\x37\n\nviolations\x18\x01 \x03(\x0b\x32\x17.buf.validate.ViolationR\nviolations\"\xc5\x01\n\tViolation\x12-\n\x05\x66ield\x18\x05 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x05\x66ield\x12+\n\x04rule\x18\x06 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x04rule\x12\x17\n\x07rule_id\x18\x02 \x01(\tR\x06ruleId\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x17\n\x07\x66or_key\x18\x04 \x01(\x08R\x06\x66orKeyJ\x04\x08\x01\x10\x02R\nfield_path\"G\n\tFieldPath\x12:\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x1e.buf.validate.FieldPathElementR\x08\x65lements\"\xcc\x03\n\x10\x46ieldPathElement\x12!\n\x0c\x66ield_number\x18\x01 \x01(\x05R\x0b\x66ieldNumber\x12\x1d\n\nfield_name\x18\x02 \x01(\tR\tfieldName\x12I\n\nfield_type\x18\x03 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tfieldType\x12\x45\n\x08key_type\x18\x04 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\x07keyType\x12I\n\nvalue_type\x18\x05 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tvalueType\x12\x16\n\x05index\x18\x06 \x01(\x04H\x00R\x05index\x12\x1b\n\x08\x62ool_key\x18\x07 \x01(\x08H\x00R\x07\x62oolKey\x12\x19\n\x07int_key\x18\x08 \x01(\x03H\x00R\x06intKey\x12\x1b\n\x08uint_key\x18\t \x01(\x04H\x00R\x07uintKey\x12\x1f\n\nstring_key\x18\n \x01(\tH\x00R\tstringKeyB\x0b\n\tsubscript*\xa1\x01\n\x06Ignore\x12\x16\n\x12IGNORE_UNSPECIFIED\x10\x00\x12\x18\n\x14IGNORE_IF_ZERO_VALUE\x10\x01\x12\x11\n\rIGNORE_ALWAYS\x10\x03\"\x04\x08\x02\x10\x02*\x0cIGNORE_EMPTY*\x0eIGNORE_DEFAULT*\x17IGNORE_IF_DEFAULT_VALUE*\x15IGNORE_IF_UNPOPULATED*n\n\nKnownRegex\x12\x1b\n\x17KNOWN_REGEX_UNSPECIFIED\x10\x00\x12 \n\x1cKNOWN_REGEX_HTTP_HEADER_NAME\x10\x01\x12!\n\x1dKNOWN_REGEX_HTTP_HEADER_VALUE\x10\x02:V\n\x07message\x12\x1f.google.protobuf.MessageOptions\x18\x87\t \x01(\x0b\x32\x1a.buf.validate.MessageRulesR\x07message:N\n\x05oneof\x12\x1d.google.protobuf.OneofOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.OneofRulesR\x05oneof:N\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05\x66ield:]\n\npredefined\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32\x1d.buf.validate.PredefinedRulesR\npredefinedB\xbb\x01\n\x10\x63om.buf.validateB\rValidateProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\xa2\x02\x03\x42VX\xaa\x02\x0c\x42uf.Validate\xca\x02\x0c\x42uf\\Validate\xe2\x02\x18\x42uf\\Validate\\GPBMetadata\xea\x02\rBuf::Validate') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -301,6 +302,8 @@ _globals['_STRINGRULES'].fields_by_name['ipv6_prefix']._serialized_options = b'\302H\347\001\nu\n\022string.ipv6_prefix\022!value must be a valid IPv6 prefix\032!rules.host_and_port || this == \'\' || this.isHostAndPort(true)\ny\n\032string.host_and_port_empty\0227value is empty, which is not a valid host and port pair\032\"!rules.host_and_port || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ulid']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ulid']._serialized_options = b'\302H\340\001\n\202\001\n\013string.ulid\022\032value must be a valid ULID\032W!rules.ulid || this == \'\' || this.matches(\'^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$\')\nY\n\021string.ulid_empty\022)value is empty, which is not a valid ULID\032\031!rules.ulid || this != \'\'' _globals['_STRINGRULES'].fields_by_name['well_known_regex']._loaded_options = None _globals['_STRINGRULES'].fields_by_name['well_known_regex']._serialized_options = b'\302H\355\004\n\360\001\n#string.well_known_regex.header_name\022&value must be a valid HTTP header name\032\240\001rules.well_known_regex != 1 || this == \'\' || this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\')\n\215\001\n)string.well_known_regex.header_name_empty\0225value is empty, which is not a valid HTTP header name\032)rules.well_known_regex != 1 || this != \'\'\n\347\001\n$string.well_known_regex.header_value\022\'value must be a valid HTTP header value\032\225\001rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\')' _globals['_STRINGRULES'].fields_by_name['example']._loaded_options = None @@ -331,6 +334,8 @@ _globals['_BYTESRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\317\001\ne\n\nbytes.ipv4\022\"value must be a valid IPv4 address\0323!rules.ipv4 || this.size() == 0 || this.size() == 4\nf\n\020bytes.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\037!rules.ipv4 || this.size() != 0' _globals['_BYTESRULES'].fields_by_name['ipv6']._loaded_options = None _globals['_BYTESRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\320\001\nf\n\nbytes.ipv6\022\"value must be a valid IPv6 address\0324!rules.ipv6 || this.size() == 0 || this.size() == 16\nf\n\020bytes.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\037!rules.ipv6 || this.size() != 0' + _globals['_BYTESRULES'].fields_by_name['uuid']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['uuid']._serialized_options = b'\302H\300\001\n^\n\nbytes.uuid\022\032value must be a valid UUID\0324!rules.uuid || this.size() == 0 || this.size() == 16\n^\n\020bytes.uuid_empty\022)value is empty, which is not a valid UUID\032\037!rules.uuid || this.size() != 0' _globals['_BYTESRULES'].fields_by_name['example']._loaded_options = None _globals['_BYTESRULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rbytes.example\032\004true' _globals['_ENUMRULES'].fields_by_name['const']._loaded_options = None @@ -367,6 +372,14 @@ _globals['_DURATIONRULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017duration.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' _globals['_DURATIONRULES'].fields_by_name['example']._loaded_options = None _globals['_DURATIONRULES'].fields_by_name['example']._serialized_options = b'\302H\032\n\030\n\020duration.example\032\004true' + _globals['_FIELDMASKRULES'].fields_by_name['const']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['const']._serialized_options = b'\302H\217\001\n\214\001\n\020field_mask.const\032xthis.paths != getField(rules, \'const\').paths ? \'value must equal paths %s\'.format([getField(rules, \'const\').paths]) : \'\'' + _globals['_FIELDMASKRULES'].fields_by_name['in']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['in']._serialized_options = b'\302H\310\001\n\305\001\n\rfield_mask.in\032\263\001!this.paths.all(p, p in getField(rules, \'in\') || getField(rules, \'in\').exists(f, p.startsWith(f+\'.\'))) ? \'value must only contain paths in %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_FIELDMASKRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['not_in']._serialized_options = b'\302H\336\001\n\333\001\n\021field_mask.not_in\032\305\001!this.paths.all(p, !(p in getField(rules, \'not_in\') || getField(rules, \'not_in\').exists(f, p.startsWith(f+\'.\')))) ? \'value must not contain any paths in %s\'.format([getField(rules, \'not_in\')]) : \'\'' + _globals['_FIELDMASKRULES'].fields_by_name['example']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['example']._serialized_options = b'\302H\034\n\032\n\022field_mask.example\032\004true' _globals['_TIMESTAMPRULES'].fields_by_name['const']._loaded_options = None _globals['_TIMESTAMPRULES'].fields_by_name['const']._serialized_options = b'\302Hu\ns\n\017timestamp.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' _globals['_TIMESTAMPRULES'].fields_by_name['lt']._loaded_options = None @@ -385,70 +398,72 @@ _globals['_TIMESTAMPRULES'].fields_by_name['within']._serialized_options = b'\302H\210\001\n\205\001\n\020timestamp.within\032qthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'' _globals['_TIMESTAMPRULES'].fields_by_name['example']._loaded_options = None _globals['_TIMESTAMPRULES'].fields_by_name['example']._serialized_options = b'\302H\033\n\031\n\021timestamp.example\032\004true' - _globals['_IGNORE']._serialized_start=54134 - _globals['_IGNORE']._serialized_end=54295 - _globals['_KNOWNREGEX']._serialized_start=54297 - _globals['_KNOWNREGEX']._serialized_end=54407 - _globals['_RULE']._serialized_start=144 - _globals['_RULE']._serialized_end=224 - _globals['_MESSAGERULES']._serialized_start=226 - _globals['_MESSAGERULES']._serialized_end=348 - _globals['_MESSAGEONEOFRULE']._serialized_start=350 - _globals['_MESSAGEONEOFRULE']._serialized_end=420 - _globals['_ONEOFRULES']._serialized_start=422 - _globals['_ONEOFRULES']._serialized_end=462 - _globals['_FIELDRULES']._serialized_start=465 - _globals['_FIELDRULES']._serialized_end=1742 - _globals['_PREDEFINEDRULES']._serialized_start=1744 - _globals['_PREDEFINEDRULES']._serialized_end=1834 - _globals['_FLOATRULES']._serialized_start=1837 - _globals['_FLOATRULES']._serialized_end=4925 - _globals['_DOUBLERULES']._serialized_start=4928 - _globals['_DOUBLERULES']._serialized_end=8034 - _globals['_INT32RULES']._serialized_start=8037 - _globals['_INT32RULES']._serialized_end=10783 - _globals['_INT64RULES']._serialized_start=10786 - _globals['_INT64RULES']._serialized_end=13532 - _globals['_UINT32RULES']._serialized_start=13535 - _globals['_UINT32RULES']._serialized_end=16298 - _globals['_UINT64RULES']._serialized_start=16301 - _globals['_UINT64RULES']._serialized_end=19064 - _globals['_SINT32RULES']._serialized_start=19067 - _globals['_SINT32RULES']._serialized_end=21830 - _globals['_SINT64RULES']._serialized_start=21833 - _globals['_SINT64RULES']._serialized_end=24596 - _globals['_FIXED32RULES']._serialized_start=24599 - _globals['_FIXED32RULES']._serialized_end=27379 - _globals['_FIXED64RULES']._serialized_start=27382 - _globals['_FIXED64RULES']._serialized_end=30162 - _globals['_SFIXED32RULES']._serialized_start=30165 - _globals['_SFIXED32RULES']._serialized_end=32963 - _globals['_SFIXED64RULES']._serialized_start=32966 - _globals['_SFIXED64RULES']._serialized_end=35764 - _globals['_BOOLRULES']._serialized_start=35767 - _globals['_BOOLRULES']._serialized_end=35982 - _globals['_STRINGRULES']._serialized_start=35985 - _globals['_STRINGRULES']._serialized_end=43362 - _globals['_BYTESRULES']._serialized_start=43365 - _globals['_BYTESRULES']._serialized_end=45619 - _globals['_ENUMRULES']._serialized_start=45622 - _globals['_ENUMRULES']._serialized_end=46131 - _globals['_REPEATEDRULES']._serialized_start=46134 - _globals['_REPEATEDRULES']._serialized_end=46676 - _globals['_MAPRULES']._serialized_start=46679 - _globals['_MAPRULES']._serialized_end=47107 - _globals['_ANYRULES']._serialized_start=47109 - _globals['_ANYRULES']._serialized_end=47158 - _globals['_DURATIONRULES']._serialized_start=47161 - _globals['_DURATIONRULES']._serialized_end=50175 - _globals['_TIMESTAMPRULES']._serialized_start=50178 - _globals['_TIMESTAMPRULES']._serialized_end=53324 - _globals['_VIOLATIONS']._serialized_start=53326 - _globals['_VIOLATIONS']._serialized_end=53395 - _globals['_VIOLATION']._serialized_start=53398 - _globals['_VIOLATION']._serialized_end=53595 - _globals['_FIELDPATH']._serialized_start=53597 - _globals['_FIELDPATH']._serialized_end=53668 - _globals['_FIELDPATHELEMENT']._serialized_start=53671 - _globals['_FIELDPATHELEMENT']._serialized_end=54131 + _globals['_IGNORE']._serialized_start=55581 + _globals['_IGNORE']._serialized_end=55742 + _globals['_KNOWNREGEX']._serialized_start=55744 + _globals['_KNOWNREGEX']._serialized_end=55854 + _globals['_RULE']._serialized_start=178 + _globals['_RULE']._serialized_end=258 + _globals['_MESSAGERULES']._serialized_start=261 + _globals['_MESSAGERULES']._serialized_end=422 + _globals['_MESSAGEONEOFRULE']._serialized_start=424 + _globals['_MESSAGEONEOFRULE']._serialized_end=494 + _globals['_ONEOFRULES']._serialized_start=496 + _globals['_ONEOFRULES']._serialized_end=536 + _globals['_FIELDRULES']._serialized_start=539 + _globals['_FIELDRULES']._serialized_end=1918 + _globals['_PREDEFINEDRULES']._serialized_start=1920 + _globals['_PREDEFINEDRULES']._serialized_end=2010 + _globals['_FLOATRULES']._serialized_start=2013 + _globals['_FLOATRULES']._serialized_end=5101 + _globals['_DOUBLERULES']._serialized_start=5104 + _globals['_DOUBLERULES']._serialized_end=8210 + _globals['_INT32RULES']._serialized_start=8213 + _globals['_INT32RULES']._serialized_end=10959 + _globals['_INT64RULES']._serialized_start=10962 + _globals['_INT64RULES']._serialized_end=13708 + _globals['_UINT32RULES']._serialized_start=13711 + _globals['_UINT32RULES']._serialized_end=16474 + _globals['_UINT64RULES']._serialized_start=16477 + _globals['_UINT64RULES']._serialized_end=19240 + _globals['_SINT32RULES']._serialized_start=19243 + _globals['_SINT32RULES']._serialized_end=22006 + _globals['_SINT64RULES']._serialized_start=22009 + _globals['_SINT64RULES']._serialized_end=24772 + _globals['_FIXED32RULES']._serialized_start=24775 + _globals['_FIXED32RULES']._serialized_end=27555 + _globals['_FIXED64RULES']._serialized_start=27558 + _globals['_FIXED64RULES']._serialized_end=30338 + _globals['_SFIXED32RULES']._serialized_start=30341 + _globals['_SFIXED32RULES']._serialized_end=33139 + _globals['_SFIXED64RULES']._serialized_start=33142 + _globals['_SFIXED64RULES']._serialized_end=35940 + _globals['_BOOLRULES']._serialized_start=35943 + _globals['_BOOLRULES']._serialized_end=36158 + _globals['_STRINGRULES']._serialized_start=36161 + _globals['_STRINGRULES']._serialized_end=43792 + _globals['_BYTESRULES']._serialized_start=43795 + _globals['_BYTESRULES']._serialized_end=46271 + _globals['_ENUMRULES']._serialized_start=46274 + _globals['_ENUMRULES']._serialized_end=46783 + _globals['_REPEATEDRULES']._serialized_start=46786 + _globals['_REPEATEDRULES']._serialized_end=47328 + _globals['_MAPRULES']._serialized_start=47331 + _globals['_MAPRULES']._serialized_end=47759 + _globals['_ANYRULES']._serialized_start=47761 + _globals['_ANYRULES']._serialized_end=47810 + _globals['_DURATIONRULES']._serialized_start=47813 + _globals['_DURATIONRULES']._serialized_end=50827 + _globals['_FIELDMASKRULES']._serialized_start=50830 + _globals['_FIELDMASKRULES']._serialized_end=51622 + _globals['_TIMESTAMPRULES']._serialized_start=51625 + _globals['_TIMESTAMPRULES']._serialized_end=54771 + _globals['_VIOLATIONS']._serialized_start=54773 + _globals['_VIOLATIONS']._serialized_end=54842 + _globals['_VIOLATION']._serialized_start=54845 + _globals['_VIOLATION']._serialized_end=55042 + _globals['_FIELDPATH']._serialized_start=55044 + _globals['_FIELDPATH']._serialized_end=55115 + _globals['_FIELDPATHELEMENT']._serialized_start=55118 + _globals['_FIELDPATHELEMENT']._serialized_end=55578 # @@protoc_insertion_point(module_scope) diff --git a/gen/buf/validate/validate_pb2.pyi b/gen/buf/validate/validate_pb2.pyi index c3898125..9df1862f 100644 --- a/gen/buf/validate/validate_pb2.pyi +++ b/gen/buf/validate/validate_pb2.pyi @@ -14,6 +14,7 @@ from google.protobuf import descriptor_pb2 as _descriptor_pb2 from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import field_mask_pb2 as _field_mask_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper @@ -61,12 +62,14 @@ class Rule(_message.Message): def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ... class MessageRules(_message.Message): - __slots__ = ("cel", "oneof") + __slots__ = ("cel_expression", "cel", "oneof") + CEL_EXPRESSION_FIELD_NUMBER: _ClassVar[int] CEL_FIELD_NUMBER: _ClassVar[int] ONEOF_FIELD_NUMBER: _ClassVar[int] + cel_expression: _containers.RepeatedScalarFieldContainer[str] cel: _containers.RepeatedCompositeFieldContainer[Rule] oneof: _containers.RepeatedCompositeFieldContainer[MessageOneofRule] - def __init__(self, cel: _Optional[_Iterable[_Union[Rule, _Mapping]]] = ..., oneof: _Optional[_Iterable[_Union[MessageOneofRule, _Mapping]]] = ...) -> None: ... + def __init__(self, cel_expression: _Optional[_Iterable[str]] = ..., cel: _Optional[_Iterable[_Union[Rule, _Mapping]]] = ..., oneof: _Optional[_Iterable[_Union[MessageOneofRule, _Mapping]]] = ...) -> None: ... class MessageOneofRule(_message.Message): __slots__ = ("fields", "required") @@ -83,7 +86,8 @@ class OneofRules(_message.Message): def __init__(self, required: bool = ...) -> None: ... class FieldRules(_message.Message): - __slots__ = ("cel", "required", "ignore", "float", "double", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "bool", "string", "bytes", "enum", "repeated", "map", "any", "duration", "timestamp") + __slots__ = ("cel_expression", "cel", "required", "ignore", "float", "double", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "bool", "string", "bytes", "enum", "repeated", "map", "any", "duration", "field_mask", "timestamp") + CEL_EXPRESSION_FIELD_NUMBER: _ClassVar[int] CEL_FIELD_NUMBER: _ClassVar[int] REQUIRED_FIELD_NUMBER: _ClassVar[int] IGNORE_FIELD_NUMBER: _ClassVar[int] @@ -107,7 +111,9 @@ class FieldRules(_message.Message): MAP_FIELD_NUMBER: _ClassVar[int] ANY_FIELD_NUMBER: _ClassVar[int] DURATION_FIELD_NUMBER: _ClassVar[int] + FIELD_MASK_FIELD_NUMBER: _ClassVar[int] TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + cel_expression: _containers.RepeatedScalarFieldContainer[str] cel: _containers.RepeatedCompositeFieldContainer[Rule] required: bool ignore: Ignore @@ -131,8 +137,9 @@ class FieldRules(_message.Message): map: MapRules any: AnyRules duration: DurationRules + field_mask: FieldMaskRules timestamp: TimestampRules - def __init__(self, cel: _Optional[_Iterable[_Union[Rule, _Mapping]]] = ..., required: bool = ..., ignore: _Optional[_Union[Ignore, str]] = ..., float: _Optional[_Union[FloatRules, _Mapping]] = ..., double: _Optional[_Union[DoubleRules, _Mapping]] = ..., int32: _Optional[_Union[Int32Rules, _Mapping]] = ..., int64: _Optional[_Union[Int64Rules, _Mapping]] = ..., uint32: _Optional[_Union[UInt32Rules, _Mapping]] = ..., uint64: _Optional[_Union[UInt64Rules, _Mapping]] = ..., sint32: _Optional[_Union[SInt32Rules, _Mapping]] = ..., sint64: _Optional[_Union[SInt64Rules, _Mapping]] = ..., fixed32: _Optional[_Union[Fixed32Rules, _Mapping]] = ..., fixed64: _Optional[_Union[Fixed64Rules, _Mapping]] = ..., sfixed32: _Optional[_Union[SFixed32Rules, _Mapping]] = ..., sfixed64: _Optional[_Union[SFixed64Rules, _Mapping]] = ..., bool: _Optional[_Union[BoolRules, _Mapping]] = ..., string: _Optional[_Union[StringRules, _Mapping]] = ..., bytes: _Optional[_Union[BytesRules, _Mapping]] = ..., enum: _Optional[_Union[EnumRules, _Mapping]] = ..., repeated: _Optional[_Union[RepeatedRules, _Mapping]] = ..., map: _Optional[_Union[MapRules, _Mapping]] = ..., any: _Optional[_Union[AnyRules, _Mapping]] = ..., duration: _Optional[_Union[DurationRules, _Mapping]] = ..., timestamp: _Optional[_Union[TimestampRules, _Mapping]] = ...) -> None: ... + def __init__(self, cel_expression: _Optional[_Iterable[str]] = ..., cel: _Optional[_Iterable[_Union[Rule, _Mapping]]] = ..., required: bool = ..., ignore: _Optional[_Union[Ignore, str]] = ..., float: _Optional[_Union[FloatRules, _Mapping]] = ..., double: _Optional[_Union[DoubleRules, _Mapping]] = ..., int32: _Optional[_Union[Int32Rules, _Mapping]] = ..., int64: _Optional[_Union[Int64Rules, _Mapping]] = ..., uint32: _Optional[_Union[UInt32Rules, _Mapping]] = ..., uint64: _Optional[_Union[UInt64Rules, _Mapping]] = ..., sint32: _Optional[_Union[SInt32Rules, _Mapping]] = ..., sint64: _Optional[_Union[SInt64Rules, _Mapping]] = ..., fixed32: _Optional[_Union[Fixed32Rules, _Mapping]] = ..., fixed64: _Optional[_Union[Fixed64Rules, _Mapping]] = ..., sfixed32: _Optional[_Union[SFixed32Rules, _Mapping]] = ..., sfixed64: _Optional[_Union[SFixed64Rules, _Mapping]] = ..., bool: _Optional[_Union[BoolRules, _Mapping]] = ..., string: _Optional[_Union[StringRules, _Mapping]] = ..., bytes: _Optional[_Union[BytesRules, _Mapping]] = ..., enum: _Optional[_Union[EnumRules, _Mapping]] = ..., repeated: _Optional[_Union[RepeatedRules, _Mapping]] = ..., map: _Optional[_Union[MapRules, _Mapping]] = ..., any: _Optional[_Union[AnyRules, _Mapping]] = ..., duration: _Optional[_Union[DurationRules, _Mapping]] = ..., field_mask: _Optional[_Union[FieldMaskRules, _Mapping]] = ..., timestamp: _Optional[_Union[TimestampRules, _Mapping]] = ...) -> None: ... class PredefinedRules(_message.Message): __slots__ = ("cel",) @@ -394,7 +401,7 @@ class BoolRules(_message.Message): def __init__(self, const: bool = ..., example: _Optional[_Iterable[bool]] = ...) -> None: ... class StringRules(_message.Message): - __slots__ = ("const", "len", "min_len", "max_len", "len_bytes", "min_bytes", "max_bytes", "pattern", "prefix", "suffix", "contains", "not_contains", "not_in", "email", "hostname", "ip", "ipv4", "ipv6", "uri", "uri_ref", "address", "uuid", "tuuid", "ip_with_prefixlen", "ipv4_with_prefixlen", "ipv6_with_prefixlen", "ip_prefix", "ipv4_prefix", "ipv6_prefix", "host_and_port", "well_known_regex", "strict", "example") + __slots__ = ("const", "len", "min_len", "max_len", "len_bytes", "min_bytes", "max_bytes", "pattern", "prefix", "suffix", "contains", "not_contains", "not_in", "email", "hostname", "ip", "ipv4", "ipv6", "uri", "uri_ref", "address", "uuid", "tuuid", "ip_with_prefixlen", "ipv4_with_prefixlen", "ipv6_with_prefixlen", "ip_prefix", "ipv4_prefix", "ipv6_prefix", "host_and_port", "ulid", "well_known_regex", "strict", "example") Extensions: _python_message._ExtensionDict CONST_FIELD_NUMBER: _ClassVar[int] LEN_FIELD_NUMBER: _ClassVar[int] @@ -427,6 +434,7 @@ class StringRules(_message.Message): IPV4_PREFIX_FIELD_NUMBER: _ClassVar[int] IPV6_PREFIX_FIELD_NUMBER: _ClassVar[int] HOST_AND_PORT_FIELD_NUMBER: _ClassVar[int] + ULID_FIELD_NUMBER: _ClassVar[int] WELL_KNOWN_REGEX_FIELD_NUMBER: _ClassVar[int] STRICT_FIELD_NUMBER: _ClassVar[int] EXAMPLE_FIELD_NUMBER: _ClassVar[int] @@ -460,13 +468,14 @@ class StringRules(_message.Message): ipv4_prefix: bool ipv6_prefix: bool host_and_port: bool + ulid: bool well_known_regex: KnownRegex strict: bool example: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, const: _Optional[str] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., len_bytes: _Optional[int] = ..., min_bytes: _Optional[int] = ..., max_bytes: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[str] = ..., suffix: _Optional[str] = ..., contains: _Optional[str] = ..., not_contains: _Optional[str] = ..., not_in: _Optional[_Iterable[str]] = ..., email: bool = ..., hostname: bool = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., uri: bool = ..., uri_ref: bool = ..., address: bool = ..., uuid: bool = ..., tuuid: bool = ..., ip_with_prefixlen: bool = ..., ipv4_with_prefixlen: bool = ..., ipv6_with_prefixlen: bool = ..., ip_prefix: bool = ..., ipv4_prefix: bool = ..., ipv6_prefix: bool = ..., host_and_port: bool = ..., well_known_regex: _Optional[_Union[KnownRegex, str]] = ..., strict: bool = ..., example: _Optional[_Iterable[str]] = ..., **kwargs) -> None: ... + def __init__(self, const: _Optional[str] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., len_bytes: _Optional[int] = ..., min_bytes: _Optional[int] = ..., max_bytes: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[str] = ..., suffix: _Optional[str] = ..., contains: _Optional[str] = ..., not_contains: _Optional[str] = ..., not_in: _Optional[_Iterable[str]] = ..., email: bool = ..., hostname: bool = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., uri: bool = ..., uri_ref: bool = ..., address: bool = ..., uuid: bool = ..., tuuid: bool = ..., ip_with_prefixlen: bool = ..., ipv4_with_prefixlen: bool = ..., ipv6_with_prefixlen: bool = ..., ip_prefix: bool = ..., ipv4_prefix: bool = ..., ipv6_prefix: bool = ..., host_and_port: bool = ..., ulid: bool = ..., well_known_regex: _Optional[_Union[KnownRegex, str]] = ..., strict: bool = ..., example: _Optional[_Iterable[str]] = ..., **kwargs) -> None: ... class BytesRules(_message.Message): - __slots__ = ("const", "len", "min_len", "max_len", "pattern", "prefix", "suffix", "contains", "not_in", "ip", "ipv4", "ipv6", "example") + __slots__ = ("const", "len", "min_len", "max_len", "pattern", "prefix", "suffix", "contains", "not_in", "ip", "ipv4", "ipv6", "uuid", "example") Extensions: _python_message._ExtensionDict CONST_FIELD_NUMBER: _ClassVar[int] LEN_FIELD_NUMBER: _ClassVar[int] @@ -481,6 +490,7 @@ class BytesRules(_message.Message): IP_FIELD_NUMBER: _ClassVar[int] IPV4_FIELD_NUMBER: _ClassVar[int] IPV6_FIELD_NUMBER: _ClassVar[int] + UUID_FIELD_NUMBER: _ClassVar[int] EXAMPLE_FIELD_NUMBER: _ClassVar[int] const: bytes len: int @@ -494,8 +504,9 @@ class BytesRules(_message.Message): ip: bool ipv4: bool ipv6: bool + uuid: bool example: _containers.RepeatedScalarFieldContainer[bytes] - def __init__(self, const: _Optional[bytes] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[bytes] = ..., suffix: _Optional[bytes] = ..., contains: _Optional[bytes] = ..., not_in: _Optional[_Iterable[bytes]] = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., example: _Optional[_Iterable[bytes]] = ..., **kwargs) -> None: ... + def __init__(self, const: _Optional[bytes] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[bytes] = ..., suffix: _Optional[bytes] = ..., contains: _Optional[bytes] = ..., not_in: _Optional[_Iterable[bytes]] = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., uuid: bool = ..., example: _Optional[_Iterable[bytes]] = ..., **kwargs) -> None: ... class EnumRules(_message.Message): __slots__ = ("const", "defined_only", "not_in", "example") @@ -564,6 +575,18 @@ class DurationRules(_message.Message): example: _containers.RepeatedCompositeFieldContainer[_duration_pb2.Duration] def __init__(self, const: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., not_in: _Optional[_Iterable[_Union[_duration_pb2.Duration, _Mapping]]] = ..., example: _Optional[_Iterable[_Union[_duration_pb2.Duration, _Mapping]]] = ..., **kwargs) -> None: ... +class FieldMaskRules(_message.Message): + __slots__ = ("const", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: _field_mask_pb2.FieldMask + not_in: _containers.RepeatedScalarFieldContainer[str] + example: _containers.RepeatedCompositeFieldContainer[_field_mask_pb2.FieldMask] + def __init__(self, const: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ..., not_in: _Optional[_Iterable[str]] = ..., example: _Optional[_Iterable[_Union[_field_mask_pb2.FieldMask, _Mapping]]] = ..., **kwargs) -> None: ... + class TimestampRules(_message.Message): __slots__ = ("const", "lt", "lte", "lt_now", "gt", "gte", "gt_now", "within", "example") Extensions: _python_message._ExtensionDict diff --git a/protovalidate/internal/rules.py b/protovalidate/internal/rules.py index ee2a896e..ba8b0de2 100644 --- a/protovalidate/internal/rules.py +++ b/protovalidate/internal/rules.py @@ -380,11 +380,16 @@ def add_rule( self, env: celpy.Environment, funcs: dict[str, celpy.CELFunction], - rules: validate_pb2.Rule, + rules: validate_pb2.Rule | str, *, rule_field: descriptor.FieldDescriptor | None = None, rule_path: validate_pb2.FieldPath | None = None, ): + if isinstance(rules, str): + expression = rules + rules = validate_pb2.Rule() + rules.id = expression + rules.expression = expression ast = env.compile(rules.expression) prog = env.program(ast, functions=funcs) rule_value = None @@ -527,6 +532,14 @@ class FieldRules(CelRules): ] ) + _cel_expression_rule_path: typing.ClassVar[validate_pb2.FieldPath] = validate_pb2.FieldPath( + elements=[ + _field_to_element( + validate_pb2.FieldRules.DESCRIPTOR.fields_by_number[validate_pb2.FieldRules.CEL_EXPRESSION_FIELD_NUMBER] + ) + ] + ) + def __init__( self, env: celpy.Environment, @@ -564,6 +577,11 @@ def __init__( ] ), ) + for i, cel in enumerate(field_level.cel_expression): + rule_path = validate_pb2.FieldPath() + rule_path.CopyFrom(self._cel_expression_rule_path) + rule_path.elements[0].index = i + self.add_rule(env, funcs, cel, rule_path=rule_path) for i, cel in enumerate(field_level.cel): rule_path = validate_pb2.FieldPath() rule_path.CopyFrom(self._cel_rule_path) @@ -875,6 +893,8 @@ def _new_message_rule(self, rules: validate_pb2.MessageRules, desc: descriptor.D result = MessageRules(rules, desc) for oneof in rules.oneof: result.add_oneof(oneof) + for expr in rules.cel_expression: + result.add_rule(self._env, self._funcs, expr) for cel in rules.cel: result.add_rule(self._env, self._funcs, cel) return result @@ -896,6 +916,10 @@ def _new_scalar_field_rule( check_field_type(field, 0, "google.protobuf.Duration") result = FieldRules(self._env, self._funcs, field, field_level, for_items=for_items) return result + elif type_case == "field_mask": + check_field_type(field, 0, "google.protobuf.FieldMask") + result = FieldRules(self._env, self._funcs, field, field_level, for_items=for_items) + return result elif type_case == "timestamp": check_field_type(field, 0, "google.protobuf.Timestamp") result = FieldRules(self._env, self._funcs, field, field_level, for_items=for_items)