class BidirectionalMethodHandlerSupplier extends AbstractMethodHandlerSupplier {

    @Override
    public <ReqT, RespT> MethodHandler<ReqT, RespT> get(String methodName, AnnotatedMethod method, Supplier<?> instance) {
        if (!isRequiredMethodType(method)) {
            throw new IllegalArgumentException("Method not annotated as a bi-directional streaming method: " + method);
        }

        CallType type = determineCallType(method);
        MethodHandler<ReqT, RespT> handler;

        switch (type) {
        case bidiStreaming:
            handler = new BidiStreaming<>(methodName, method, instance);
            break;
        case unknown:
        default:
            throw new IllegalArgumentException("Not a supported bi-directional streaming method signature: " + method);
        }
        return handler;
    }

    public  BidirectionalMethodHandlerSupplier();

}