export { ForeverCache } from './forever';
export { ShortCache } from './short';
export { NeverCache } from './never';
import { State } from '../state';

/**
 * Cache interface
 *
 * The cache is responsible for storing 'state' objects
 */
export interface StateCache {

  /**
   * Store a State object.
   *
   * This function will clone the state object before storing
   */
  store: (state: State) => void;

  /**
   * Retrieve a State object from the cache by its absolute uri
   */
  get: (uri: string) => State | null;

  /**
   * Return true if a State object with the specified uri exists in the cache
   */
  has: (uri: string) => boolean;

  /**
   * Delete a State object from the cache, by its uri
   */
  delete: (uri: string) => void;

  /**
   * Purge the entire cache
   */
  clear: () => void;

}
