# Path: proto/primitives.py
# class ProtoType(enum.IntEnum):
#     """The set of basic types in protocol buffers."""
# 
#     # These values come from google/protobuf/descriptor.proto
#     DOUBLE = 1
#     FLOAT = 2
#     INT64 = 3
#     UINT64 = 4
#     INT32 = 5
#     FIXED64 = 6
#     FIXED32 = 7
#     BOOL = 8
#     STRING = 9
#     MESSAGE = 11
#     BYTES = 12
#     UINT32 = 13
#     ENUM = 14
#     SFIXED32 = 15
#     SFIXED64 = 16
#     SINT32 = 17
#     SINT64 = 18


from enum import EnumMeta
from google.protobuf import descriptor_pb2
from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper
from proto.primitives import ProtoType
    # Fields are NOT repeated nor maps.
    # The RepeatedField overrides this values.
    repeated = False

    def __init__(
        self,
        proto_type,
        *,
        number: int,
        message=None,
        enum=None,
        oneof: str = None,
        json_name: str = None,
        optional: bool = False
    ):
        # This class is not intended to stand entirely alone;
        # data is augmented by the metaclass for Message.
        self.mcls_data = None
        self.parent = None

        # If the proto type sent is an object or a string, it is really
        # a message or enum.
        if not isinstance(proto_type, int):
            # Note: We only support the "shortcut syntax" for enums
            # when receiving the actual class.
            if isinstance(proto_type, (EnumMeta, EnumTypeWrapper)):
                enum = proto_type
                proto_type = ProtoType.ENUM
            else:
                message = proto_type

# Path: proto/primitives.py
# class ProtoType(enum.IntEnum):
#     """The set of basic types in protocol buffers."""
# 
#     # These values come from google/protobuf/descriptor.proto
#     DOUBLE = 1
#     FLOAT = 2
#     INT64 = 3
#     UINT64 = 4
#     INT32 = 5
#     FIXED64 = 6
#     FIXED32 = 7
#     BOOL = 8
#     STRING = 9
#     MESSAGE = 11
#     BYTES = 12
#     UINT32 = 13
#     ENUM = 14
#     SFIXED32 = 15
#     SFIXED64 = 16
#     SINT32 = 17
#     SINT64 = 18


# Path: proto/fields.py
from enum import EnumMeta
from google.protobuf import descriptor_pb2
from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper
from proto.primitives import ProtoType

    # Fields are NOT repeated nor maps.
    # The RepeatedField overrides this values.
    repeated = False

    def __init__(
        self,
        proto_type,
        *,
        number: int,
        message=None,
        enum=None,
        oneof: str = None,
        json_name: str = None,
        optional: bool = False
    ):
        # This class is not intended to stand entirely alone;
        # data is augmented by the metaclass for Message.
        self.mcls_data = None
        self.parent = None

        # If the proto type sent is an object or a string, it is really
        # a message or enum.
        if not isinstance(proto_type, int):
            # Note: We only support the "shortcut syntax" for enums
            # when receiving the actual class.
            if isinstance(proto_type, (EnumMeta, EnumTypeWrapper)):
                enum = proto_type
                proto_type = ProtoType.ENUM
            else:
                message = proto_type

                proto_type = ProtoType.MESSAGE