class ImpressionStorageClient {

  public Completable storeImpression(CampaignImpression impression) {
    return getAllImpressions()
        .defaultIfEmpty(EMPTY_IMPRESSIONS)
        .flatMapCompletable(
            storedImpressions -> {
              CampaignImpressionList appendedImpressions =
                  appendImpression(storedImpressions, impression);
              return storageClient
                  .write(appendedImpressions)
                  .doOnComplete(() -> initInMemCache(appendedImpressions));
            });
  }

  @Inject  ImpressionStorageClient(@ImpressionStore ProtoStorageClient storageClient);

}