ExtractPromisorImpl.java
package io.github.jonloucks.contracts.impl;
import io.github.jonloucks.contracts.api.Promisor;
import java.util.function.Function;
import static io.github.jonloucks.contracts.api.Checks.*;
/**
* Implementation for {@link io.github.jonloucks.contracts.api.Promisors#createExtractPromisor(Promisor, Function)}
* @see io.github.jonloucks.contracts.api.Promisors#createExtractPromisor(Promisor, Function)
* @param <T> the input deliverable type
* @param <R> the output deliverable type
*/
final class ExtractPromisorImpl<T, R> implements Promisor<R> {
@Override
public R demand() {
return transform.apply(referent.demand());
}
@Override
public int incrementUsage() {
return referent.incrementUsage();
}
@Override
public int decrementUsage() {
return referent.decrementUsage();
}
ExtractPromisorImpl(Promisor<T> referent, Function<T, R> transform) {
this.referent = promisorCheck(referent);
this.transform = nullCheck(transform, "Transform must be present.");
}
private final Promisor<T> referent;
private final Function<T, R> transform;
}