def METHOD_NAME(func: Callable[..., Awaitable[BaseModel]]):
    emitted_name = name or func.__name__
    @functools.wraps(func)
    async def wrapper(*args, **kwargs):
        # This is the DataLayerPiece instance the method is bound to.
        obj = args[0]
        return_value = await func(*args, **kwargs)
        emit(return_value, domain or obj.name, emitted_name, operation)
        return return_value
    return wrapper