from collections.abc import Callable
from datetime import date, datetime, time, timedelta, timezone, tzinfo
from typing import Any, AnyStr
from typing import Callable as _Callable

from _typeshed import Incomplete

from ._type_def import E, N

__all__ = ['TRUTHY_VALUES', 'as_int', 'as_datetime', 'as_date', 'as_time', 'as_timedelta', 'datetime_to_timestamp', 'as_collection', 'as_list', 'as_dict', 'as_enum']

TRUTHY_VALUES: frozenset
def as_int(o: float | bool, tp: type, base_type: type[int] = ...): ...
def as_datetime(o: int | float | datetime, _from_timestamp: Callable[[float, tzinfo], datetime], _tz: Incomplete | None = ...): ...
def as_date(o: int | float | date, _from_timestamp: Callable[[float, tzinfo], datetime], _tz: Incomplete | None = ..., _cls: type[date] = ...): ...
def as_time(o: time | Any, base_type: type[time]): ...
# noinspection PyTypeHints
def as_timedelta(o: str | N | timedelta, base_type: type[timedelta] = ..., default: Incomplete | None = ..., raise_: bool = ...): ...
def datetime_to_timestamp(dt: datetime, assume_naive_tz: timezone) -> int: ...
def as_collection(v: Any, *, strip: bool = ...) -> Any: ...
def as_list(v: Any, *, sep: str = ..., strip: bool = ..., drop_empty: bool = ..., json_enabled: bool = ...) -> Any: ...
def as_dict(v: Any, *, sep: str = ..., kv_sep: str = ..., strip: bool = ..., drop_empty: bool = ..., json_enabled: bool = ..., allow_bare_keys: bool = ...) -> Any: ...
def as_enum(o: AnyStr | N, base_type: type[E], lookup_func: _Callable = ..., transform_func: _Callable = ..., raise_: bool = ...) -> E | None: ...  # type: ignore[valid-type]
