read method

  1. @override
Future<CassetteSnapshot> read(
  1. CassetteName name
)
override

Reads one immutable snapshot for name.

Throws a not-found CassetteStoreException when name does not exist.

Implementation

@override
Future<CassetteSnapshot> read(CassetteName name) async {
  await _waitForWrites(name);
  if (!await _rootExists(name, CassetteStoreOperation.read)) {
    throw CassetteStoreException.notFound(
      name: name,
      operation: CassetteStoreOperation.read,
    );
  }
  final file = await _resolver.resolve(
    name,
    operation: CassetteStoreOperation.read,
  );
  if (!await file.exists()) {
    throw CassetteStoreException.notFound(
      name: name,
      operation: CassetteStoreOperation.read,
    );
  }

  try {
    final bytes = await _readBounded(
      file,
      name,
      CassetteStoreOperation.read,
    );
    final fileRevision = FileCassetteRevision.takeOwnership(name, bytes);
    _fileRevisions[fileRevision.opaque] = fileRevision;
    return CassetteSnapshot(
      name: name,
      bytes: bytes,
      revision: fileRevision.opaque,
    );
  } on CassetteStoreException {
    rethrow;
  } on FileSystemException {
    if (!await file.exists()) {
      throw CassetteStoreException.notFound(
        name: name,
        operation: CassetteStoreOperation.read,
      );
    }
    throw CassetteStoreException.operationFailed(
      name: name,
      operation: CassetteStoreOperation.read,
    );
  }
}