code: public static <T, V> Optional<V> ifSatisfiedBy(ReadableRepresentation representation, Class<T> anInterface, Function<T, V> function) {
          if (InterfaceContract.newInterfaceContract(anInterface).isSatisfiedBy(representation)) {
              T proxy = InterfaceRenderer.newInterfaceRenderer(anInterface).render(representation);
              return Optional.of(function.apply(proxy));
          }
          return Optional.absent();
      }
docs: Returns an optional result of applying the provided function if the resource
  is satisified by the provided interface.
  <p/>
  Interface satisfaction is determined by all interface methods being resolvable to
  properties on the resource.
  
  @param anInterface The interface to check
  @param function    The function to apply
  @param <T>         The resource "interface"
  @param <V>         A return value
  @return A Guava Optional of the functions return value.