/*
 * Copyright 2012-present Facebook, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package com.facebook.buck.util;

import com.google.common.hash.HashCode;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * Provides a file-like interface for objects which may be present within more specialized
 * containers (like zip files).
 */
public interface FileLike {
  /**
   * Returns the containing file for this file-like entry.
   */
  public File getContainer();

  /**
   * Returns the relative path for the entry.  For example, if this were a
   * zip file, this would be the relative path of a particular item in the zip file.
   */
  public String getRelativePath();

  /**
   * Returns the size of the entry in bytes.
   */
  public long getSize();

  /**
   * Opens a new input stream for the entry.  This can be repeated to open the file-like
   * object multiple times.
   *
   * @return Newly opened input stream.
   * @throws java.io.IOException An error occurred opening the stream.
   */
  public InputStream getInput() throws IOException;

  /**
   * Hash the input stream.  Note that for some FileLike implementations this may be substantially
   * faster than hashing the input stream that is returned by {@link #getInput()}, but you
   * cannot control which hashing algorithm is used.
   *
   * @return Hash code.
   * @throws IOException An error occurred reading input.
   */
  public HashCode fastHash() throws IOException;
}
