# @generated by generate_proto_mypy_stubs.py.  Do not edit!
import sys
from google.protobuf.descriptor import (
    Descriptor as google___protobuf___descriptor___Descriptor,
    EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
    FileDescriptor as google___protobuf___descriptor___FileDescriptor,
)

from google.protobuf.internal.enum_type_wrapper import (  # type: ignore
    _EnumTypeWrapper as google___protobuf___internal___enum_type_wrapper____EnumTypeWrapper,
)

from google.protobuf.message import (
    Message as google___protobuf___message___Message,
)

from typing import (
    NewType as typing___NewType,
    Optional as typing___Optional,
    cast as typing___cast,
)

from typing_extensions import (
    Literal as typing_extensions___Literal,
)


builtin___bool = bool
builtin___bytes = bytes
builtin___float = float
builtin___int = int


DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...

PacketTypeValue = typing___NewType('PacketTypeValue', builtin___int)
type___PacketTypeValue = PacketTypeValue
PacketType: _PacketType
class _PacketType(google___protobuf___internal___enum_type_wrapper____EnumTypeWrapper[PacketTypeValue]):
    DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
    REQUEST = typing___cast(PacketTypeValue, 0)
    CLIENT_STREAM_END = typing___cast(PacketTypeValue, 2)
    CLIENT_ERROR = typing___cast(PacketTypeValue, 4)
    CANCEL_SERVER_STREAM = typing___cast(PacketTypeValue, 6)
    RESPONSE = typing___cast(PacketTypeValue, 1)
    SERVER_STREAM_END = typing___cast(PacketTypeValue, 3)
    SERVER_ERROR = typing___cast(PacketTypeValue, 5)
REQUEST = typing___cast(PacketTypeValue, 0)
CLIENT_STREAM_END = typing___cast(PacketTypeValue, 2)
CLIENT_ERROR = typing___cast(PacketTypeValue, 4)
CANCEL_SERVER_STREAM = typing___cast(PacketTypeValue, 6)
RESPONSE = typing___cast(PacketTypeValue, 1)
SERVER_STREAM_END = typing___cast(PacketTypeValue, 3)
SERVER_ERROR = typing___cast(PacketTypeValue, 5)
type___PacketType = PacketType

class RpcPacket(google___protobuf___message___Message):
    DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
    type: type___PacketTypeValue = ...
    channel_id: builtin___int = ...
    service_id: builtin___int = ...
    method_id: builtin___int = ...
    payload: builtin___bytes = ...
    status: builtin___int = ...

    def __init__(self,
        *,
        type : typing___Optional[type___PacketTypeValue] = None,
        channel_id : typing___Optional[builtin___int] = None,
        service_id : typing___Optional[builtin___int] = None,
        method_id : typing___Optional[builtin___int] = None,
        payload : typing___Optional[builtin___bytes] = None,
        status : typing___Optional[builtin___int] = None,
        ) -> None: ...
    def ClearField(self, field_name: typing_extensions___Literal[u"channel_id",b"channel_id",u"method_id",b"method_id",u"payload",b"payload",u"service_id",b"service_id",u"status",b"status",u"type",b"type"]) -> None: ...
type___RpcPacket = RpcPacket
