"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import builtins
import cosmos.base.v1beta1.coin_pb2
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import typing
import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ...

# AuthorizationType defines the type of staking module authorization type
class AuthorizationType(_AuthorizationType, metaclass=_AuthorizationTypeEnumTypeWrapper):
    pass
class _AuthorizationType:
    V = typing.NewType('V', builtins.int)
class _AuthorizationTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_AuthorizationType.V], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ...
    # AUTHORIZATION_TYPE_UNSPECIFIED specifies an unknown authorization type
    AUTHORIZATION_TYPE_UNSPECIFIED = AuthorizationType.V(0)
    # AUTHORIZATION_TYPE_DELEGATE defines an authorization type for Msg/Delegate
    AUTHORIZATION_TYPE_DELEGATE = AuthorizationType.V(1)
    # AUTHORIZATION_TYPE_UNDELEGATE defines an authorization type for Msg/Undelegate
    AUTHORIZATION_TYPE_UNDELEGATE = AuthorizationType.V(2)
    # AUTHORIZATION_TYPE_REDELEGATE defines an authorization type for Msg/BeginRedelegate
    AUTHORIZATION_TYPE_REDELEGATE = AuthorizationType.V(3)

# AUTHORIZATION_TYPE_UNSPECIFIED specifies an unknown authorization type
AUTHORIZATION_TYPE_UNSPECIFIED = AuthorizationType.V(0)
# AUTHORIZATION_TYPE_DELEGATE defines an authorization type for Msg/Delegate
AUTHORIZATION_TYPE_DELEGATE = AuthorizationType.V(1)
# AUTHORIZATION_TYPE_UNDELEGATE defines an authorization type for Msg/Undelegate
AUTHORIZATION_TYPE_UNDELEGATE = AuthorizationType.V(2)
# AUTHORIZATION_TYPE_REDELEGATE defines an authorization type for Msg/BeginRedelegate
AUTHORIZATION_TYPE_REDELEGATE = AuthorizationType.V(3)
global___AuthorizationType = AuthorizationType


# StakeAuthorization defines authorization for delegate/undelegate/redelegate.
class StakeAuthorization(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
    # Validators defines list of validator addresses.
    class Validators(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        ADDRESS_FIELD_NUMBER: builtins.int
        @property
        def address(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
        def __init__(self,
            *,
            address : typing.Optional[typing.Iterable[typing.Text]] = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"address",b"address"]) -> None: ...

    MAX_TOKENS_FIELD_NUMBER: builtins.int
    ALLOW_LIST_FIELD_NUMBER: builtins.int
    DENY_LIST_FIELD_NUMBER: builtins.int
    AUTHORIZATION_TYPE_FIELD_NUMBER: builtins.int
    # max_tokens specifies the maximum amount of tokens can be delegate to a validator. If it is
    # empty, there is no spend limit and any amount of coins can be delegated.
    @property
    def max_tokens(self) -> cosmos.base.v1beta1.coin_pb2.Coin: ...
    # allow_list specifies list of validator addresses to whom grantee can delegate tokens on behalf of granter's
    # account.
    @property
    def allow_list(self) -> global___StakeAuthorization.Validators: ...
    # deny_list specifies list of validator addresses to whom grantee can not delegate tokens.
    @property
    def deny_list(self) -> global___StakeAuthorization.Validators: ...
    # authorization_type defines one of AuthorizationType.
    authorization_type: global___AuthorizationType.V = ...
    def __init__(self,
        *,
        max_tokens : typing.Optional[cosmos.base.v1beta1.coin_pb2.Coin] = ...,
        allow_list : typing.Optional[global___StakeAuthorization.Validators] = ...,
        deny_list : typing.Optional[global___StakeAuthorization.Validators] = ...,
        authorization_type : global___AuthorizationType.V = ...,
        ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal[u"allow_list",b"allow_list",u"deny_list",b"deny_list",u"max_tokens",b"max_tokens",u"validators",b"validators"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal[u"allow_list",b"allow_list",u"authorization_type",b"authorization_type",u"deny_list",b"deny_list",u"max_tokens",b"max_tokens",u"validators",b"validators"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal[u"validators",b"validators"]) -> typing.Optional[typing_extensions.Literal["allow_list","deny_list"]]: ...
global___StakeAuthorization = StakeAuthorization
