docs: def save_json(data, path, fatal=True, logger=None, sort_keys=True, indent=2, **kwargs):
      """
      Args:
          data (object | None): Data to serialize and save
          path (str | None): Path to file where to save
          fatal (bool | None): Abort execution on failure if True
          logger (callable | None): Logger to use
          sort_keys (bool): Save json with sorted keys
          indent (int): Indentation to use
          **kwargs: Passed through to `json.dump()`
  
      Returns:
          (int): 1 if saved, -1 if failed (when `fatal` is False)
      """
      if data is None or not path:
          return abort("No file %s", short(path), fatal=fatal)
  
      try:
          path = resolved_path(path)
          ensure_folder(path, fatal=fatal, logger=None)
          if is_dryrun():
              LOG.info("Would save %s", short(path))
              return 1
  
          if hasattr(data, "to_dict"):
              data = data.to_dict()
  
          if indent:
              kwargs.setdefault("separators", (",", ': '))
  
          with open(path, "wt") as fh:
              json.dump(data, fh, sort_keys=sort_keys, indent=indent, **kwargs)
              fh.write("\n")
  
          if logger:
              logger("Saved %s", short(path))
  
          return 1
  
      except Exception as e:
          return abort("Couldn't save %s: %s", short(path), e, fatal=(fatal, -1))