async def METHOD_NAME(
    data: AsyncDataT,
    chunk_size: int = 4 * 1024,
) -> AsyncGenerator[bytes, None]:
    aio_opened = False
    if isinstance(data, (str, Path)):
        data = await aiofiles.open(data, "rb")
        aio_opened = True
    ###
    if isinstance(data, bytes):
        chunks = (data[i : i + chunk_size] for i in range(0, len(data), chunk_size))
        for chunk in chunks:
            yield chunk
    # Test if data is a file obj first, since it's considered Iterable too
    elif isinstance(data, io.BufferedIOBase):
        while True:
            chunk = data.read(chunk_size)
            if not chunk:
                return
            yield chunk
    elif isinstance(data, AsyncBufferedReader):
        while True:
            chunk = await data.read(chunk_size)
            if not chunk:
                break
            yield chunk
        if aio_opened:
            await data.close()
    elif isinstance(data, Iterable):
        for chunk in data:  # type: ignore
            yield chunk
    elif isinstance(data, AsyncIterable):
        async for chunk in data:
            yield chunk
    else:
        raise TypeError(f"Unknown type for data: {data!r}")