from typing import Any, Optional

from ._make import and_ as and_

class _InstanceOfValidator:
    type: Any = ...
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def instance_of(type: Any): ...

class _MatchesReValidator:
    regex: Any = ...
    flags: Any = ...
    match_func: Any = ...
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def matches_re(regex: Any, flags: int = ..., func: Optional[Any] = ...): ...

class _ProvidesValidator:
    interface: Any = ...
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def provides(interface: Any): ...

class _OptionalValidator:
    validator: Any = ...
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def optional(validator: Any): ...

class _InValidator:
    options: Any = ...
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def in_(options: Any): ...

class _IsCallableValidator:
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def is_callable(): ...

class _DeepIterable:
    member_validator: Any = ...
    iterable_validator: Any = ...
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def deep_iterable(member_validator: Any, iterable_validator: Optional[Any] = ...): ...

class _DeepMapping:
    key_validator: Any = ...
    value_validator: Any = ...
    mapping_validator: Any = ...
    def __call__(self, inst: Any, attr: Any, value: Any) -> None: ...
    def __repr__(self): ...

def deep_mapping(
    key_validator: Any, value_validator: Any, mapping_validator: Optional[Any] = ...
): ...
