package com.linkedin.r2.filter.message.stream;
import com.linkedin.r2.filter.NextFilter;
import com.linkedin.r2.message.RequestContext;
import com.linkedin.r2.message.stream.StreamRequest;
import com.linkedin.r2.message.stream.StreamResponse;
import java.util.Map;
/**
* A filter that processes {@link StreamRequest}s and
* {@link StreamResponse}s.
*
* @author Zhenkai Zhu
*/
public interface StreamFilter
{
/**
* Method to be invoked for each {@link StreamRequest} message.
*
* @param req the {@link StreamRequest} message.
* @param requestContext the {@link com.linkedin.r2.message.RequestContext} of the request.
* @param wireAttrs the wire attributes of the request.
* @param nextFilter the next filter in the chain. Concrete implementations should invoke
* {@link com.linkedin.r2.filter.NextFilter#onRequest} to continue the filter chain.
*/
default void onStreamRequest(StreamRequest req,
RequestContext requestContext,
Map<String, String> wireAttrs,
NextFilter<StreamRequest, StreamResponse> nextFilter)
{
nextFilter.onRequest(req, requestContext, wireAttrs);
}
/**
* Method to be invoked for each {@link StreamResponse} message.
*
* @param res the {@link StreamResponse} message.
* @param requestContext the {@link RequestContext} of the request.
* @param wireAttrs the wire attributes of the response.
* @param nextFilter the next filter in the chain. Concrete implementations should invoke
* {@link NextFilter#onResponse} to continue the filter chain.
*/
default void onStreamResponse(StreamResponse res,
RequestContext requestContext,
Map<String, String> wireAttrs,
NextFilter<StreamRequest, StreamResponse> nextFilter)
{
nextFilter.onResponse(res, requestContext, wireAttrs);
}
/**
* Method to be invoked when an error is encountered.
*
* @param ex the {@link Throwable} representation of the error.
* @param requestContext the {@link RequestContext} of the request.
* @param wireAttrs the wire attributes of the response (if any).
* @param nextFilter the next filter in the chain. Concrete implementations should invoke
* {@link NextFilter#onError} to continue the filter chain.
*/
default void onStreamError(Throwable ex,
RequestContext requestContext,
Map<String, String> wireAttrs,
NextFilter<StreamRequest, StreamResponse> nextFilter)
{
nextFilter.onError(ex, requestContext, wireAttrs);
}
}