import aiofiles.os
import aiofiles
import os

async def read_file(path: str, callback=None):
  if not await aiofiles.os.path.exists(path):
    return None

  async with aiofiles.open(path, "r") as f:
    if callback:
      return await callback(f)
    return await f.read()


async def save_file(path: str, data, callback=None, *args, **kwargs):
  dir_path = os.path.dirname(path)
  if dir_path:
    await aiofiles.os.makedirs(dir_path, exist_ok=True)

  async with aiofiles.open(path, "w") as f:
    if callback:
      await callback(data, f, *args, **kwargs)
    else:
      await f.write(data)
