/**
   * Create a {@link Builder} for executing a {@code PUT} request, expecting no result payload. But
   * a {@link ApiConfiguration#HTTP_HEADER_RESULT_COUNT} header which contains the amount of
   * document updated.
   *
   * @param apiKey the authorization token for accessing the EVRYTHNG API
   * @param uri the {@link URI} holding the absolute URL
   * @param data the content data that will be associated with the PUT request
   * @param responseStatus the expected {@link HttpResponse} status. More likely 204 No Content
   * @return an EVRYTHNG API-ready {@link Builder}
   */
  public static Builder<Long> putMultiple(
      final String apiKey, final URI uri, final Object data, final Status responseStatus) {

    return new CheckedBuilder<Long>(
        apiKey,
        HttpMethodBuilder.httpPut(data),
        uri,
        responseStatus,
        new TypeReference<Long>() {}) {

      @Override
      public Long execute() throws EvrythngException {
        // Perform request (response status code will be automatically checked):
        HttpResponse response = request();
        Header header = response.getFirstHeader(ApiConfiguration.HTTP_HEADER_RESULT_COUNT);
        Long result = null;
        if (header != null) {
          try {
            result = Long.parseLong(header.getValue());
          } catch (NumberFormatException ex) {
            logger.warn(
                "Invalid numeric value in header {} : {}",
                ApiConfiguration.HTTP_HEADER_RESULT_COUNT,
                header.getValue());
          }
        }
        return result;
      }
    };
  }
  /**
   * Creates a {@link Builder} for executing a {@code PUT} request.
   *
   * @param apiKey the authorization token for accessing the EVRYTHNG API
   * @param uri the {@link URI} holding the absolute URL
   * @param data the content data that will be associated with the POST request
   * @param responseStatus the expected {@link HttpResponse} status
   * @param returnType the native type to which the {@link HttpResponse} will be mapped to
   * @return an EVRYTHNG API-ready {@link Builder}
   */
  public static <T> Builder<T> put(
      final String apiKey,
      final URI uri,
      final Object data,
      final Status responseStatus,
      final TypeReference<T> returnType) {

    return new CheckedBuilder<>(
        apiKey, HttpMethodBuilder.httpPut(data), uri, responseStatus, returnType);
  }