def METHOD_NAME(fn: Callable[ArgsT, RetT]) -> Callable[ArgsT, RetT]:
    nonlocal thing
    @wraps(fn)
    def wrapper(*args: ArgsT.args, **kwargs: ArgsT.kwargs) -> RetT:
        warn_deprecated(thing, version, instead=instead, issue=issue)
        return fn(*args, **kwargs)
    # If our __module__ or __qualname__ get modified, we want to pick up
    # on that, so we read them off the wrapper object instead of the (now
    # hidden) fn object
    if thing is None:
        thing = wrapper
    if wrapper.__doc__ is not None:
        doc = wrapper.__doc__
        doc = doc.rstrip()
        doc += "\n\n"
        doc += f".. deprecated:: {version}\n"
        if instead is not None:
            doc += f"   Use {_stringify(instead)} instead.\n"
        if issue is not None:
            doc += "   For details, see `issue #{} <{}>`__.\n".format(
                issue, _url_for_issue(issue)
            )
        doc += "\n"
        wrapper.__doc__ = doc
    return wrapper