1from typing import Any, Callable, Optional, Type, TypeVar, overload
2from typing_extensions import Literal
3
4from .classic import ClassicAdapter
5
6_F = TypeVar("_F", bound=Callable[..., Any])
7
8class SphinxAdapter(ClassicAdapter):
9    directive: Literal["versionadded", "versionchanged", "deprecated"]
10    reason: str
11    version: str
12    action: Optional[str]
13    category: Type[DeprecationWarning]
14    def __init__(
15        self,
16        directive: Literal["versionadded", "versionchanged", "deprecated"],
17        reason: str = ...,
18        version: str = ...,
19        action: Optional[str] = ...,
20        category: Type[DeprecationWarning] = ...,
21    ) -> None: ...
22    def __call__(self, wrapped: _F) -> Callable[[_F], _F]: ...
23
24def versionadded(reason: str = ..., version: str = ...) -> Callable[[_F], _F]: ...
25def versionchanged(reason: str = ..., version: str = ...) -> Callable[[_F], _F]: ...
26@overload
27def deprecated(__wrapped: _F) -> _F: ...
28@overload
29def deprecated(
30    reason: str = ..., *, version: str = ..., action: Optional[str] = ..., category: Optional[Type[DeprecationWarning]] = ...
31) -> Callable[[_F], _F]: ...
32