package com.bumptech.glide.load.resource;

import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.util.Preconditions;

/**
 * Simple wrapper for an arbitrary object which helps to satisfy some of the glide engine's
 * contracts. <b>Suggested usages only include resource object which don't have size and cannot be
 * recycled/closed.</b>
 *
 * @param <T> type of the wrapped resource
 */
// TODO: there isn't much point in caching these...
public class SimpleResource<T> implements Resource<T> {
  protected final T data;

  public SimpleResource(T data) {
    this.data = Preconditions.checkNotNull(data);
  }

  @SuppressWarnings("unchecked")
  @Override
  public Class<T> getResourceClass() {
    return (Class<T>) data.getClass();
  }

  @Override
  public final T get() {
    return data;
  }

  @Override
  public final int getSize() {
    return 1;
  }

  @Override
  public void recycle() {
    // no op
  }
}
