package com.apollographql.apollo.cache.http;
import java.io.IOException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
/**
* ResponseCacheStore is an abstraction for a cache store that is used to read, modify or delete http responses.
*/
public interface HttpCacheStore {
/**
* Returns ResponseCacheRecord for the entry named cacheKey or null if it doesn't exist or is not currently readable.
*
* @param cacheKey the name of the entry
* @return ResponseCacheRecord
*/
@Nullable HttpCacheRecord cacheRecord(@Nonnull String cacheKey) throws IOException;
/**
* Returns an editor for the entry named cacheKey or null if another edit is in progress.
*
* @param cacheKey the entry to edit.
* @return {@link HttpCacheRecordEditor} to use for editing the entry
*/
@Nullable HttpCacheRecordEditor cacheRecordEditor(@Nonnull String cacheKey) throws IOException;
/**
* Drops the entry for key if it exists and can be removed. If the entry for key is currently being edited, that edit
* will complete normally but its value will not be stored.
*/
void remove(@Nonnull String cacheKey) throws IOException;
/**
* Closes the cache and deletes all of its stored values. This will delete all files in the cache directory including
* files that weren't created by the cache.
*/
void delete() throws IOException;
}