///| Minimal filesystem abstraction for git materialization

///|
pub(open) trait FileSystem {
  mkdir_p(Self, String) -> Unit raise GitError
  write_file(Self, String, Bytes) -> Unit raise GitError
  write_string(Self, String, String) -> Unit raise GitError
  remove_file(Self, String) -> Unit raise GitError
  remove_dir(Self, String) -> Unit raise GitError
}

///|
/// Read-only filesystem abstraction for loading git objects
pub(open) trait RepoFileSystem {
  read_file(Self, String) -> Bytes raise GitError
  readdir(Self, String) -> Array[String] raise GitError
  is_dir(Self, String) -> Bool
  is_file(Self, String) -> Bool
}