2929import com .google .gson .JsonElement ;
3030import com .google .gson .JsonObject ;
3131import com .google .gson .JsonParseException ;
32+ import com .google .gson .JsonPrimitive ;
3233import com .google .gson .JsonSerializationContext ;
3334import com .google .gson .JsonSerializer ;
3435
3536import ai .api .model .ResponseMessage ;
3637import ai .api .model .ResponseMessage .MessageType ;
38+ import ai .api .model .ResponseMessage .Platform ;
3739
3840import java .lang .reflect .Type ;
3941import 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