29
29
import com .google .gson .JsonElement ;
30
30
import com .google .gson .JsonObject ;
31
31
import com .google .gson .JsonParseException ;
32
+ import com .google .gson .JsonPrimitive ;
32
33
import com .google .gson .JsonSerializationContext ;
33
34
import com .google .gson .JsonSerializer ;
34
35
35
36
import ai .api .model .ResponseMessage ;
36
37
import ai .api .model .ResponseMessage .MessageType ;
38
+ import ai .api .model .ResponseMessage .Platform ;
37
39
38
40
import java .lang .reflect .Type ;
39
41
import java .text .SimpleDateFormat ;
@@ -49,6 +51,8 @@ public class GsonFactory {
49
51
private static final Gson PROTOCOL_GSON = new GsonBuilder ()
50
52
.setDateFormat (new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" , Locale .US ).toPattern ())
51
53
.registerTypeAdapter (ResponseMessage .class , new ResponseItemAdapter ())
54
+ .registerTypeAdapter (ResponseMessage .MessageType .class , new ResponseMessageTypeAdapter ())
55
+ .registerTypeAdapter (ResponseMessage .Platform .class , new ResponseMessagePlatformAdapter ())
52
56
.registerTypeAdapter (ResponseMessage .ResponseSpeech .class , new ResponseSpeechDeserializer ())
53
57
.create ();
54
58
@@ -67,23 +71,64 @@ public Gson getGson() {
67
71
public static GsonFactory getDefaultFactory () {
68
72
return DEFAULT_FACTORY ;
69
73
}
74
+
75
+ private static class ResponseMessagePlatformAdapter implements
76
+ JsonDeserializer <ResponseMessage .Platform >,
77
+ JsonSerializer <ResponseMessage .Platform > {
70
78
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
+ }
73
83
74
84
@ 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 > {
77
101
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
+ }
79
106
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 ));
84
119
}
120
+ return result ;
121
+ }
122
+ }
123
+
124
+ private static class ResponseItemAdapter implements JsonDeserializer <ResponseMessage >,
125
+ JsonSerializer <ResponseMessage > {
85
126
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 ());
87
132
}
88
133
89
134
@ Override
0 commit comments