/**
   * Converts Object to byte[] depending on the key
   *
   * <p>StoreRepository takes only StorageEngine<ByteArray,byte[]> and for persistence on disk we
   * need to convert them to String.<br>
   *
   * @param key
   * @param value
   * @return
   */
  @SuppressWarnings("unchecked")
  private Versioned<String> convertObjectToString(String key, Versioned<Object> value) {
    String valueStr = value.getValue().toString();

    if (CLUSTER_KEY.equals(key)) {
      valueStr = clusterMapper.writeCluster((Cluster) value.getValue());
    } else if (STORES_KEY.equals(key)) {
      valueStr = storeMapper.writeStoreList((List<StoreDefinition>) value.getValue());
    } else if (REBALANCING_STEAL_INFO.equals(key)) {
      RebalancerState rebalancerState = (RebalancerState) value.getValue();
      valueStr = rebalancerState.toJsonString();
    } else if (SERVER_STATE_KEY.equals(key)
        || CLUSTER_STATE_KEY.equals(key)
        || NODE_ID_KEY.equals(key)) {
      valueStr = value.getValue().toString();
    } else {
      throw new VoldemortException(
          "Unhandled key:'" + key + "' for Object to String serialization.");
    }

    return new Versioned<String>(valueStr, value.getVersion());
  }