def METHOD_NAME(fun: Callable, **more_context: Any) -> Callable:
    operation_name = operation_name_from_fun(fun)
    @wraps(fun)
    def _inner(*args: Any, **kwargs: Any) -> Any:
        parent = parent_span
        if parent is None:
            parent = current_span()
        if parent is not None:
            child = parent.tracer.start_span(
                operation_name=operation_name,
                child_of=parent,
                tags={**extra_context, **more_context},
            )
            if callback is not None:
                callback(child)
            on_exit = (_restore_span, (parent, child))
            set_current_span(child)
            return call_with_trace(child, fun, on_exit, *args, **kwargs)
        return fun(*args, **kwargs)
    return _inner