-
Notifications
You must be signed in to change notification settings - Fork 768
Expand file tree
/
Copy pathUserDataUpdateEventDeserializer.java
More file actions
64 lines (55 loc) · 2.64 KB
/
UserDataUpdateEventDeserializer.java
File metadata and controls
64 lines (55 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.binance.api.client.domain.event;
import com.binance.api.client.domain.event.UserDataUpdateEvent.UserDataUpdateEventType;
import com.binance.api.client.exception.BinanceApiException;
import com.fasterxml.jackson.core.JsonParser;
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.ObjectMapper;
import java.io.IOException;
/**
* Custom deserializer for a User Data stream event, since the API can return two different responses in this stream.
* @see UserDataUpdateEvent
*/
public class UserDataUpdateEventDeserializer extends JsonDeserializer<UserDataUpdateEvent> {
@Override
public UserDataUpdateEvent deserialize(JsonParser jp, DeserializationContext ctx) throws IOException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
String json = node.toString();
final String eventTypeId = node.get("e").asText();
final long eventTime = node.get("E").asLong();
UserDataUpdateEventType userDataUpdateEventType = UserDataUpdateEventType.fromEventTypeId(eventTypeId);
UserDataUpdateEvent userDataUpdateEvent = new UserDataUpdateEvent();
userDataUpdateEvent.setEventType(userDataUpdateEventType);
userDataUpdateEvent.setEventTime(eventTime);
switch (userDataUpdateEventType) {
case ACCOUNT_UPDATE:
AccountUpdateEvent accountUpdateEvent = getUserDataUpdateEventDetail(json, AccountUpdateEvent.class);
userDataUpdateEvent.setAccountUpdateEvent(accountUpdateEvent);
break;
case ORDER_TRADE_UPDATE:
OrderTradeUpdateEvent orderTradeUpdateEvent = getUserDataUpdateEventDetail(json, OrderTradeUpdateEvent.class);
userDataUpdateEvent.setOrderTradeUpdateEvent(orderTradeUpdateEvent);
break;
case OUTBOUND_ACCOUNT_POSITION:
OutboundAccountPositionEvent outboundAccountPositionEvent = getUserDataUpdateEventDetail(json, OutboundAccountPositionEvent.class);
userDataUpdateEvent.setOutboundAccountPositionEvent(outboundAccountPositionEvent);
break;
case LIST_STATUS:
ListStatusEvent listStatusEvent = getUserDataUpdateEventDetail(json, ListStatusEvent.class);
userDataUpdateEvent.setListStatusEvent(listStatusEvent);
break;
}
return userDataUpdateEvent;
}
private <T> T getUserDataUpdateEventDetail(String json, Class<T> clazz) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(json, clazz);
} catch (IOException e) {
throw new BinanceApiException(e);
}
}
}