private Callback<String> createIdConverterCallbackForPut(RestRequest restRequest, BlobProperties blobProperties,
      FutureResult<String> futureResult, Callback<String> callback) {
    return (blobId, exception) -> {
      if (exception != null) {
        // If putBlob fails, complete the future and callback with an error
        futureResult.done(null, exception);
        if (callback != null) {
          callback.onCompletion(null, exception);
        }
      } else {
        blobProperties.setBlobSize(restRequest.getBlobBytesReceived());
        // Call idConverter.convert after putBlob succeeds
        idConverter.convert(restRequest, blobId, blobProperties, callback);
      }
    };
  }
Create id converter callback after router put the blob.
@param restRequest {@link RestRequest} to put the blob.
@param blobProperties {@link BlobProperties} for the blob.
@return
ambry-test-utils/src/main/java/com/github/ambry/router/InMemoryRouter.java