package org.webpieces.util.filters;
import java.util.concurrent.CompletableFuture;
public abstract class Filter<REQ, RESP> {
public abstract CompletableFuture<RESP> filter(REQ meta, Service<REQ, RESP> nextFilter);
public Filter<REQ, RESP> chain(Filter<REQ, RESP> nextFilter) {
return new Filter<REQ, RESP>() {
@Override
public CompletableFuture<RESP> filter(REQ meta, Service<REQ, RESP> nextFilter) {
return Filter.this.filter(meta, nextFilter);
}
};
}
public Service<REQ, RESP> chain(Service<REQ, RESP> svc) {
return new Service<REQ, RESP>() {
@Override
public CompletableFuture<RESP> invoke(REQ meta) {
return Filter.this.filter(meta, svc);
}
};
}
}