package tc.oc.pgm.filters.matcher;
import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.query.IQuery;
/**
* A filter that NEVER responds to queries outside of {@link #queryType()},
* and ALWAYS responds to queries extending {@link #queryType()}.
*
* Queries of the latter type are passed to {@link #matches(IQuery)}.
*/
public interface TypedFilter<Q extends IQuery> extends WeakTypedFilter<Q> {
@Override
default boolean respondsTo(Class<? extends IQuery> queryType) {
return queryType().isAssignableFrom(queryType);
}
default QueryResponse queryTyped(Q query) {
return QueryResponse.fromBoolean(matches(query));
}
boolean matches(Q query);
abstract class Impl<Q extends IQuery> extends Filter.Impl implements TypedFilter<Q> {}
}