1 package org.oxerr.okcoin.rest.dto.deserializer;
2
3 import java.io.IOException;
4 import java.math.BigDecimal;
5 import java.time.Instant;
6 import java.util.ArrayList;
7 import java.util.List;
8
9 import org.oxerr.okcoin.rest.dto.Candlestick;
10 import org.oxerr.okcoin.rest.dto.CandlestickChart;
11
12 import com.fasterxml.jackson.core.JsonParseException;
13 import com.fasterxml.jackson.core.JsonParser;
14 import com.fasterxml.jackson.core.JsonProcessingException;
15 import com.fasterxml.jackson.core.JsonToken;
16 import com.fasterxml.jackson.databind.DeserializationContext;
17 import com.fasterxml.jackson.databind.JsonDeserializer;
18
19
20
21
22 public class CandlestickChartDeserializer extends JsonDeserializer<CandlestickChart> {
23
24
25
26
27 @Override
28 public CandlestickChart deserialize(JsonParser p,
29 DeserializationContext ctxt) throws IOException,
30 JsonProcessingException {
31 List<Candlestick> candlesticks = new ArrayList<>();
32
33 while (p.nextToken() == JsonToken.START_ARRAY) {
34 Instant timestamp = Instant.ofEpochMilli(p.nextLongValue(0));
35 BigDecimal open = nextBigDecimal(p);
36 BigDecimal high = nextBigDecimal(p);
37 BigDecimal low = nextBigDecimal(p);
38 BigDecimal close = nextBigDecimal(p);
39 BigDecimal volume = nextBigDecimal(p);
40 p.nextToken();
41
42 Candlestick candlestick = new Candlestick(timestamp, open, high, low, close, volume);
43 candlesticks.add(candlestick);
44 }
45
46 return new CandlestickChart(candlesticks.toArray(new Candlestick[0]));
47 }
48
49 private BigDecimal nextBigDecimal(JsonParser p) throws IOException,
50 JsonParseException {
51 return p.nextToken().isScalarValue() ? new BigDecimal(p.getText()) : null;
52 }
53
54 }