package org.knowm.xchange.yobit.dto.marketdata;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.yobit.YoBitAdapters;
import org.knowm.xchange.yobit.dto.marketdata.YoBitPair.YoBitPairDeserializer;
import org.knowm.xchange.yobit.dto.marketdata.YoBitPairs.YoBitPricesDeserializer;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = YoBitPricesDeserializer.class)
public class YoBitPairs {
private final Map<CurrencyPair, YoBitPair> pair;
private YoBitPairs(Map<CurrencyPair, YoBitPair> pair) {
this.pair = pair;
}
public Map<CurrencyPair, YoBitPair> getPrice() {
return pair;
}
@Override
public String toString() {
return "YoBitPairs [pair=" + pair + "]";
}
static class YoBitPricesDeserializer extends JsonDeserializer<YoBitPairs> {
@Override
public YoBitPairs deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
Map<CurrencyPair, YoBitPair> priceMap = new HashMap<CurrencyPair, YoBitPair>();
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
if (node.isObject()) {
Iterator<Entry<String, JsonNode>> priceEntryIter = node.fields();
while (priceEntryIter.hasNext()) {
Entry<String, JsonNode> priceEntryNode = priceEntryIter.next();
String pairString = priceEntryNode.getKey();
CurrencyPair pair = YoBitAdapters.adaptCurrencyPair(pairString);
JsonNode priceNode = priceEntryNode.getValue();
YoBitPair price = YoBitPairDeserializer.deserializeFromNode(priceNode);
priceMap.put(pair, price);
}
}
return new YoBitPairs(priceMap);
}
}
}