class FileBasedStorage implements StorageProvider {

  @Override
  public @Nonnull List<StoredObjectMetadata> getSnapshotExtendedObjectsMetadata(
      NetworkId networkId, SnapshotId snapshotId) throws IOException {
    Path objectPath = getSnapshotObjectsDir(networkId, snapshotId);
    if (!Files.exists(objectPath)) {
      throw new FileNotFoundException(String.format("Could not load: %s", objectPath));
    }

    try {
      return Files.walk(objectPath)
          .filter(Files::isRegularFile)
          .map(
              path ->
                  new StoredObjectMetadata(
                      fromBase64(path.getFileName().toString()), getObjectSize(path)))
          .collect(ImmutableList.toImmutableList());
    } catch (BatfishException e) {
      throw new IOException(e);
    }
  }

  public  FileBasedStorage(
      Path baseDir, BatfishLogger logger, BiFunction<String, Integer, AtomicInteger> newBatch);
  public  FileBasedStorage(Path baseDir, BatfishLogger logger);

}