code: public <T extends Client<I, O>, R extends Client<I, O>, I extends RpcRequest, O extends RpcResponse>
      ClientDecorationBuilder addRpc(Function<T, R> decorator) {
          @SuppressWarnings("unchecked")
          final Function<Client<RpcRequest, RpcResponse>, Client<RpcRequest, RpcResponse>> cast =
                  (Function<Client<RpcRequest, RpcResponse>, Client<RpcRequest, RpcResponse>>) decorator;
          return add0(RpcRequest.class, RpcResponse.class, cast);
      }
docs: Adds the specified RPC-level {@code decorator}.
  
  @param decorator the {@link Function} that transforms a {@link Client} to another
  @param <T> the type of the {@link Client} being decorated
  @param <R> the type of the {@link Client} produced by the {@code decorator}
  @param <I> the {@link Request} type of the {@link Client} being decorated
  @param <O> the {@link Response} type of the {@link Client} being decorated