Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix behavior of required + ignore_empty constraints #97

Merged
merged 2 commits into from
Nov 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ ADD_LICENSE_HEADER := $(BIN)/license-header \
--license-type apache \
--copyright-holder "Buf Technologies, Inc." \
--year-range "2023"
PROTOVALIDATE_VERSION ?= v0.5.1
PROTOVALIDATE_VERSION ?= v0.5.3

.PHONY: help
help: ## Describe useful make targets
Expand Down
73 changes: 73 additions & 0 deletions gen/buf/validate/conformance/cases/ignore_empty_proto2_pb2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Copyright 2023 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/ignore_empty_proto2.proto
"""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'\n8buf/validate/conformance/cases/ignore_empty_proto2.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"?\n\x1fIgnoreEmptyProto2ScalarOptional\x12\x1c\n\x03val\x18\x01 \x01(\x05\x42\n\xbaH\x07\x1a\x02 \x00\xd0\x01\x01R\x03val\"N\n*IgnoreEmptyProto2ScalarOptionalWithDefault\x12 \n\x03val\x18\x01 \x01(\x05:\x02\x34\x32\x42\n\xbaH\x07\x1a\x02 \x00\xd0\x01\x01R\x03val\"?\n\x1fIgnoreEmptyProto2ScalarRequired\x12\x1c\n\x03val\x18\x01 \x02(\x05\x42\n\xbaH\x07\x1a\x02 \x00\xd0\x01\x01R\x03val\"\xc7\x01\n\x18IgnoreEmptyProto2Message\x12\x91\x01\n\x03val\x18\x01 \x01(\x0b\x32<.buf.validate.conformance.cases.IgnoreEmptyProto2Message.MsgBA\xbaH>\xba\x01\x38\n\x1bignore_empty.proto2.message\x12\x06\x66oobar\x1a\x11this.val == \'foo\'\xd0\x01\x01R\x03val\x1a\x17\n\x03Msg\x12\x10\n\x03val\x18\x01 \x01(\tR\x03val\"=\n\x16IgnoreEmptyProto2Oneof\x12\x1e\n\x03val\x18\x01 \x01(\x05\x42\n\xbaH\x07\x1a\x02 \x00\xd0\x01\x01H\x00R\x03valB\x03\n\x01o\":\n\x19IgnoreEmptyProto2Repeated\x12\x1d\n\x03val\x18\x01 \x03(\x05\x42\x0b\xbaH\x08\x92\x01\x02\x08\x03\xd0\x01\x01R\x03val\"\xac\x01\n\x14IgnoreEmptyProto2Map\x12\\\n\x03val\x18\x01 \x03(\x0b\x32=.buf.validate.conformance.cases.IgnoreEmptyProto2Map.ValEntryB\x0b\xbaH\x08\x9a\x01\x02\x08\x03\xd0\x01\x01R\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')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.conformance.cases.ignore_empty_proto2_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

DESCRIPTOR._options = None
_IGNOREEMPTYPROTO2SCALAROPTIONAL.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO2SCALAROPTIONAL.fields_by_name['val']._serialized_options = b'\272H\007\032\002 \000\320\001\001'
_IGNOREEMPTYPROTO2SCALAROPTIONALWITHDEFAULT.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO2SCALAROPTIONALWITHDEFAULT.fields_by_name['val']._serialized_options = b'\272H\007\032\002 \000\320\001\001'
_IGNOREEMPTYPROTO2SCALARREQUIRED.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO2SCALARREQUIRED.fields_by_name['val']._serialized_options = b'\272H\007\032\002 \000\320\001\001'
_IGNOREEMPTYPROTO2MESSAGE.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO2MESSAGE.fields_by_name['val']._serialized_options = b'\272H>\272\0018\n\033ignore_empty.proto2.message\022\006foobar\032\021this.val == \'foo\'\320\001\001'
_IGNOREEMPTYPROTO2ONEOF.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO2ONEOF.fields_by_name['val']._serialized_options = b'\272H\007\032\002 \000\320\001\001'
_IGNOREEMPTYPROTO2REPEATED.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO2REPEATED.fields_by_name['val']._serialized_options = b'\272H\010\222\001\002\010\003\320\001\001'
_IGNOREEMPTYPROTO2MAP_VALENTRY._options = None
_IGNOREEMPTYPROTO2MAP_VALENTRY._serialized_options = b'8\001'
_IGNOREEMPTYPROTO2MAP.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO2MAP.fields_by_name['val']._serialized_options = b'\272H\010\232\001\002\010\003\320\001\001'
_globals['_IGNOREEMPTYPROTO2SCALAROPTIONAL']._serialized_start=121
_globals['_IGNOREEMPTYPROTO2SCALAROPTIONAL']._serialized_end=184
_globals['_IGNOREEMPTYPROTO2SCALAROPTIONALWITHDEFAULT']._serialized_start=186
_globals['_IGNOREEMPTYPROTO2SCALAROPTIONALWITHDEFAULT']._serialized_end=264
_globals['_IGNOREEMPTYPROTO2SCALARREQUIRED']._serialized_start=266
_globals['_IGNOREEMPTYPROTO2SCALARREQUIRED']._serialized_end=329
_globals['_IGNOREEMPTYPROTO2MESSAGE']._serialized_start=332
_globals['_IGNOREEMPTYPROTO2MESSAGE']._serialized_end=531
_globals['_IGNOREEMPTYPROTO2MESSAGE_MSG']._serialized_start=508
_globals['_IGNOREEMPTYPROTO2MESSAGE_MSG']._serialized_end=531
_globals['_IGNOREEMPTYPROTO2ONEOF']._serialized_start=533
_globals['_IGNOREEMPTYPROTO2ONEOF']._serialized_end=594
_globals['_IGNOREEMPTYPROTO2REPEATED']._serialized_start=596
_globals['_IGNOREEMPTYPROTO2REPEATED']._serialized_end=654
_globals['_IGNOREEMPTYPROTO2MAP']._serialized_start=657
_globals['_IGNOREEMPTYPROTO2MAP']._serialized_end=829
_globals['_IGNOREEMPTYPROTO2MAP_VALENTRY']._serialized_start=775
_globals['_IGNOREEMPTYPROTO2MAP_VALENTRY']._serialized_end=829
# @@protoc_insertion_point(module_scope)
75 changes: 75 additions & 0 deletions gen/buf/validate/conformance/cases/ignore_empty_proto2_pb2.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Copyright 2023 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 IgnoreEmptyProto2ScalarOptional(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: int
def __init__(self, val: _Optional[int] = ...) -> None: ...

class IgnoreEmptyProto2ScalarOptionalWithDefault(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: int
def __init__(self, val: _Optional[int] = ...) -> None: ...

class IgnoreEmptyProto2ScalarRequired(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: int
def __init__(self, val: _Optional[int] = ...) -> None: ...

class IgnoreEmptyProto2Message(_message.Message):
__slots__ = ["val"]
class Msg(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: str
def __init__(self, val: _Optional[str] = ...) -> None: ...
VAL_FIELD_NUMBER: _ClassVar[int]
val: IgnoreEmptyProto2Message.Msg
def __init__(self, val: _Optional[_Union[IgnoreEmptyProto2Message.Msg, _Mapping]] = ...) -> None: ...

class IgnoreEmptyProto2Oneof(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: int
def __init__(self, val: _Optional[int] = ...) -> None: ...

class IgnoreEmptyProto2Repeated(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: _containers.RepeatedScalarFieldContainer[int]
def __init__(self, val: _Optional[_Iterable[int]] = ...) -> None: ...

class IgnoreEmptyProto2Map(_message.Message):
__slots__ = ["val"]
class ValEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: int
value: int
def __init__(self, key: _Optional[int] = ..., value: _Optional[int] = ...) -> None: ...
VAL_FIELD_NUMBER: _ClassVar[int]
val: _containers.ScalarMap[int, int]
def __init__(self, val: _Optional[_Mapping[int, int]] = ...) -> None: ...
81 changes: 81 additions & 0 deletions gen/buf/validate/conformance/cases/ignore_empty_proto3_pb2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Copyright 2023 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/ignore_empty_proto3.proto
"""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'\n8buf/validate/conformance/cases/ignore_empty_proto3.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"7\n\x17IgnoreEmptyProto3Scalar\x12\x1c\n\x03val\x18\x01 \x01(\x05\x42\n\xbaH\x07\x1a\x02 \x00\xd0\x01\x01R\x03val\"L\n\x1fIgnoreEmptyProto3OptionalScalar\x12!\n\x03val\x18\x01 \x01(\x05\x42\n\xbaH\x07\x1a\x02 \x00\xd0\x01\x01H\x00R\x03val\x88\x01\x01\x42\x06\n\x04_val\"\xd4\x01\n\x18IgnoreEmptyProto3Message\x12\x96\x01\n\x03val\x18\x01 \x01(\x0b\x32<.buf.validate.conformance.cases.IgnoreEmptyProto3Message.MsgBA\xbaH>\xba\x01\x38\n\x1bignore_empty.proto3.message\x12\x06\x66oobar\x1a\x11this.val == \'foo\'\xd0\x01\x01H\x00R\x03val\x88\x01\x01\x1a\x17\n\x03Msg\x12\x10\n\x03val\x18\x01 \x01(\tR\x03valB\x06\n\x04_val\"=\n\x16IgnoreEmptyProto3Oneof\x12\x1e\n\x03val\x18\x01 \x01(\x05\x42\n\xbaH\x07\x1a\x02 \x00\xd0\x01\x01H\x00R\x03valB\x03\n\x01o\":\n\x19IgnoreEmptyProto3Repeated\x12\x1d\n\x03val\x18\x01 \x03(\x05\x42\x0b\xbaH\x08\x92\x01\x02\x08\x03\xd0\x01\x01R\x03val\"\xac\x01\n\x14IgnoreEmptyProto3Map\x12\\\n\x03val\x18\x01 \x03(\x0b\x32=.buf.validate.conformance.cases.IgnoreEmptyProto3Map.ValEntryB\x0b\xbaH\x08\x9a\x01\x02\x08\x03\xd0\x01\x01R\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\"=\n\x18IgnoreEmptyRepeatedItems\x12!\n\x03val\x18\x01 \x03(\x05\x42\x0f\xbaH\x0c\x92\x01\t\"\x07\x1a\x02 \x00\xd0\x01\x01R\x03val\"\xb7\x01\n\x13IgnoreEmptyMapPairs\x12h\n\x03val\x18\x01 \x03(\x0b\x32<.buf.validate.conformance.cases.IgnoreEmptyMapPairs.ValEntryB\x18\xbaH\x15\x9a\x01\x12\"\x07r\x02\x10\x03\xd0\x01\x01*\x07\x1a\x02 \x00\xd0\x01\x01R\x03val\x1a\x36\n\x08ValEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\x62\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.conformance.cases.ignore_empty_proto3_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

DESCRIPTOR._options = None
_IGNOREEMPTYPROTO3SCALAR.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO3SCALAR.fields_by_name['val']._serialized_options = b'\272H\007\032\002 \000\320\001\001'
_IGNOREEMPTYPROTO3OPTIONALSCALAR.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO3OPTIONALSCALAR.fields_by_name['val']._serialized_options = b'\272H\007\032\002 \000\320\001\001'
_IGNOREEMPTYPROTO3MESSAGE.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO3MESSAGE.fields_by_name['val']._serialized_options = b'\272H>\272\0018\n\033ignore_empty.proto3.message\022\006foobar\032\021this.val == \'foo\'\320\001\001'
_IGNOREEMPTYPROTO3ONEOF.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO3ONEOF.fields_by_name['val']._serialized_options = b'\272H\007\032\002 \000\320\001\001'
_IGNOREEMPTYPROTO3REPEATED.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO3REPEATED.fields_by_name['val']._serialized_options = b'\272H\010\222\001\002\010\003\320\001\001'
_IGNOREEMPTYPROTO3MAP_VALENTRY._options = None
_IGNOREEMPTYPROTO3MAP_VALENTRY._serialized_options = b'8\001'
_IGNOREEMPTYPROTO3MAP.fields_by_name['val']._options = None
_IGNOREEMPTYPROTO3MAP.fields_by_name['val']._serialized_options = b'\272H\010\232\001\002\010\003\320\001\001'
_IGNOREEMPTYREPEATEDITEMS.fields_by_name['val']._options = None
_IGNOREEMPTYREPEATEDITEMS.fields_by_name['val']._serialized_options = b'\272H\014\222\001\t\"\007\032\002 \000\320\001\001'
_IGNOREEMPTYMAPPAIRS_VALENTRY._options = None
_IGNOREEMPTYMAPPAIRS_VALENTRY._serialized_options = b'8\001'
_IGNOREEMPTYMAPPAIRS.fields_by_name['val']._options = None
_IGNOREEMPTYMAPPAIRS.fields_by_name['val']._serialized_options = b'\272H\025\232\001\022\"\007r\002\020\003\320\001\001*\007\032\002 \000\320\001\001'
_globals['_IGNOREEMPTYPROTO3SCALAR']._serialized_start=121
_globals['_IGNOREEMPTYPROTO3SCALAR']._serialized_end=176
_globals['_IGNOREEMPTYPROTO3OPTIONALSCALAR']._serialized_start=178
_globals['_IGNOREEMPTYPROTO3OPTIONALSCALAR']._serialized_end=254
_globals['_IGNOREEMPTYPROTO3MESSAGE']._serialized_start=257
_globals['_IGNOREEMPTYPROTO3MESSAGE']._serialized_end=469
_globals['_IGNOREEMPTYPROTO3MESSAGE_MSG']._serialized_start=438
_globals['_IGNOREEMPTYPROTO3MESSAGE_MSG']._serialized_end=461
_globals['_IGNOREEMPTYPROTO3ONEOF']._serialized_start=471
_globals['_IGNOREEMPTYPROTO3ONEOF']._serialized_end=532
_globals['_IGNOREEMPTYPROTO3REPEATED']._serialized_start=534
_globals['_IGNOREEMPTYPROTO3REPEATED']._serialized_end=592
_globals['_IGNOREEMPTYPROTO3MAP']._serialized_start=595
_globals['_IGNOREEMPTYPROTO3MAP']._serialized_end=767
_globals['_IGNOREEMPTYPROTO3MAP_VALENTRY']._serialized_start=713
_globals['_IGNOREEMPTYPROTO3MAP_VALENTRY']._serialized_end=767
_globals['_IGNOREEMPTYREPEATEDITEMS']._serialized_start=769
_globals['_IGNOREEMPTYREPEATEDITEMS']._serialized_end=830
_globals['_IGNOREEMPTYMAPPAIRS']._serialized_start=833
_globals['_IGNOREEMPTYMAPPAIRS']._serialized_end=1016
_globals['_IGNOREEMPTYMAPPAIRS_VALENTRY']._serialized_start=962
_globals['_IGNOREEMPTYMAPPAIRS_VALENTRY']._serialized_end=1016
# @@protoc_insertion_point(module_scope)
88 changes: 88 additions & 0 deletions gen/buf/validate/conformance/cases/ignore_empty_proto3_pb2.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Copyright 2023 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 IgnoreEmptyProto3Scalar(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: int
def __init__(self, val: _Optional[int] = ...) -> None: ...

class IgnoreEmptyProto3OptionalScalar(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: int
def __init__(self, val: _Optional[int] = ...) -> None: ...

class IgnoreEmptyProto3Message(_message.Message):
__slots__ = ["val"]
class Msg(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: str
def __init__(self, val: _Optional[str] = ...) -> None: ...
VAL_FIELD_NUMBER: _ClassVar[int]
val: IgnoreEmptyProto3Message.Msg
def __init__(self, val: _Optional[_Union[IgnoreEmptyProto3Message.Msg, _Mapping]] = ...) -> None: ...

class IgnoreEmptyProto3Oneof(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: int
def __init__(self, val: _Optional[int] = ...) -> None: ...

class IgnoreEmptyProto3Repeated(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: _containers.RepeatedScalarFieldContainer[int]
def __init__(self, val: _Optional[_Iterable[int]] = ...) -> None: ...

class IgnoreEmptyProto3Map(_message.Message):
__slots__ = ["val"]
class ValEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: int
value: int
def __init__(self, key: _Optional[int] = ..., value: _Optional[int] = ...) -> None: ...
VAL_FIELD_NUMBER: _ClassVar[int]
val: _containers.ScalarMap[int, int]
def __init__(self, val: _Optional[_Mapping[int, int]] = ...) -> None: ...

class IgnoreEmptyRepeatedItems(_message.Message):
__slots__ = ["val"]
VAL_FIELD_NUMBER: _ClassVar[int]
val: _containers.RepeatedScalarFieldContainer[int]
def __init__(self, val: _Optional[_Iterable[int]] = ...) -> None: ...

class IgnoreEmptyMapPairs(_message.Message):
__slots__ = ["val"]
class ValEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: int
def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ...
VAL_FIELD_NUMBER: _ClassVar[int]
val: _containers.ScalarMap[str, int]
def __init__(self, val: _Optional[_Mapping[str, int]] = ...) -> None: ...
Loading