Skip to content
This repository was archived by the owner on Dec 15, 2021. It is now read-only.

Commit 11700d1

Browse files
author
folomeev
committed
Initial support for Google Assistant response messages
1 parent 3f1805d commit 11700d1

File tree

5 files changed

+872
-22
lines changed

5 files changed

+872
-22
lines changed

libai/src/main/java/ai/api/GsonFactory.java

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@
2929
import com.google.gson.JsonElement;
3030
import com.google.gson.JsonObject;
3131
import com.google.gson.JsonParseException;
32+
import com.google.gson.JsonPrimitive;
3233
import com.google.gson.JsonSerializationContext;
3334
import com.google.gson.JsonSerializer;
3435

3536
import ai.api.model.ResponseMessage;
3637
import ai.api.model.ResponseMessage.MessageType;
38+
import ai.api.model.ResponseMessage.Platform;
3739

3840
import java.lang.reflect.Type;
3941
import java.text.SimpleDateFormat;
@@ -49,6 +51,8 @@ public class GsonFactory {
4951
private static final Gson PROTOCOL_GSON = new GsonBuilder()
5052
.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US).toPattern())
5153
.registerTypeAdapter(ResponseMessage.class, new ResponseItemAdapter())
54+
.registerTypeAdapter(ResponseMessage.MessageType.class, new ResponseMessageTypeAdapter())
55+
.registerTypeAdapter(ResponseMessage.Platform.class, new ResponseMessagePlatformAdapter())
5256
.registerTypeAdapter(ResponseMessage.ResponseSpeech.class, new ResponseSpeechDeserializer())
5357
.create();
5458

@@ -67,23 +71,64 @@ public Gson getGson() {
6771
public static GsonFactory getDefaultFactory() {
6872
return DEFAULT_FACTORY;
6973
}
74+
75+
private static class ResponseMessagePlatformAdapter implements
76+
JsonDeserializer<ResponseMessage.Platform>,
77+
JsonSerializer<ResponseMessage.Platform> {
7078

71-
private static class ResponseItemAdapter implements JsonDeserializer<ResponseMessage>,
72-
JsonSerializer<ResponseMessage> {
79+
@Override
80+
public JsonElement serialize(Platform src, Type typeOfT, JsonSerializationContext context) {
81+
return context.serialize(src.getName());
82+
}
7383

7484
@Override
75-
public ResponseMessage deserialize(JsonElement json, Type typeOfT,
76-
JsonDeserializationContext context) throws JsonParseException {
85+
public Platform deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
86+
throws JsonParseException {
87+
String name = json.getAsString();
88+
if (name == null) {
89+
return Platform.DEFAULT;
90+
}
91+
Platform result = Platform.fromName(name);
92+
if (result == null) {
93+
throw new JsonParseException(String.format("Unexpected platform name: %s", json));
94+
}
95+
return result;
96+
}
97+
}
98+
private static class ResponseMessageTypeAdapter implements
99+
JsonDeserializer<ResponseMessage.MessageType>,
100+
JsonSerializer<ResponseMessage.MessageType> {
77101

78-
int typeCode = json.getAsJsonObject().get("type").getAsInt();
102+
@Override
103+
public JsonElement serialize(MessageType src, Type typeOfT, JsonSerializationContext context) {
104+
return context.serialize(src.getCode() <= 4 ? src.getCode() : src.getName());
105+
}
79106

80-
for (MessageType type : MessageType.values()) {
81-
if (type.getCode() == typeCode) {
82-
return context.deserialize(json, type.getType());
83-
}
107+
@Override
108+
public MessageType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
109+
throws JsonParseException {
110+
JsonPrimitive jsonValue = json.getAsJsonPrimitive();
111+
MessageType result = null;
112+
if (jsonValue.isNumber()) {
113+
result = MessageType.fromCode(jsonValue.getAsInt());
114+
} else {
115+
result = MessageType.fromName(jsonValue.getAsString());
116+
}
117+
if (result == null) {
118+
throw new JsonParseException(String.format("Unexpected message type value: %s", jsonValue));
84119
}
120+
return result;
121+
}
122+
}
123+
124+
private static class ResponseItemAdapter implements JsonDeserializer<ResponseMessage>,
125+
JsonSerializer<ResponseMessage> {
85126

86-
throw new JsonParseException(String.format("Unexpected message type value: %d", typeCode));
127+
@Override
128+
public ResponseMessage deserialize(JsonElement json, Type typeOfT,
129+
JsonDeserializationContext context) throws JsonParseException {
130+
MessageType messageType = context.deserialize(json.getAsJsonObject().get("type"), MessageType.class);
131+
return context.deserialize(json, messageType.getType());
87132
}
88133

89134
@Override

0 commit comments

Comments
 (0)