Make WebsocketGsonFactory more extensible
- Expose methods for creating gson adapters from pre-defined factory messages + user-specified messages - Expose methods for creating Gson object from adapter factory Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -24,23 +24,63 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.http.api.ws;
|
package net.runelite.http.api.ws;
|
||||||
|
|
||||||
import net.runelite.http.api.ws.messages.LoginResponse;
|
|
||||||
import net.runelite.http.api.ws.messages.Handshake;
|
|
||||||
import net.runelite.http.api.ws.messages.Ping;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import net.runelite.http.api.ws.messages.Handshake;
|
||||||
|
import net.runelite.http.api.ws.messages.LoginResponse;
|
||||||
|
import net.runelite.http.api.ws.messages.Ping;
|
||||||
|
import net.runelite.http.api.ws.messages.party.Join;
|
||||||
|
import net.runelite.http.api.ws.messages.party.Part;
|
||||||
|
import net.runelite.http.api.ws.messages.party.UserJoin;
|
||||||
|
import net.runelite.http.api.ws.messages.party.UserPart;
|
||||||
|
|
||||||
public class WebsocketGsonFactory
|
public class WebsocketGsonFactory
|
||||||
{
|
{
|
||||||
public static Gson build()
|
private static final Collection<Class<? extends WebsocketMessage>> MESSAGES;
|
||||||
{
|
|
||||||
RuntimeTypeAdapterFactory<WebsocketMessage> typeAdapter = RuntimeTypeAdapterFactory.of(WebsocketMessage.class)
|
|
||||||
.registerSubtype(Handshake.class)
|
|
||||||
.registerSubtype(LoginResponse.class)
|
|
||||||
.registerSubtype(Ping.class);
|
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
final List<Class<? extends WebsocketMessage>> messages = new ArrayList<>();
|
||||||
|
messages.add(Handshake.class);
|
||||||
|
messages.add(LoginResponse.class);
|
||||||
|
messages.add(Ping.class);
|
||||||
|
messages.add(Join.class);
|
||||||
|
messages.add(Part.class);
|
||||||
|
messages.add(UserJoin.class);
|
||||||
|
messages.add(UserPart.class);
|
||||||
|
MESSAGES = messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RuntimeTypeAdapterFactory<WebsocketMessage> factory(final Collection<Class<? extends WebsocketMessage>> messages)
|
||||||
|
{
|
||||||
|
final RuntimeTypeAdapterFactory<WebsocketMessage> factory = RuntimeTypeAdapterFactory.of(WebsocketMessage.class);
|
||||||
|
|
||||||
|
for (Class<? extends WebsocketMessage> message : MESSAGES)
|
||||||
|
{
|
||||||
|
factory.registerSubtype(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Class<? extends WebsocketMessage> message : messages)
|
||||||
|
{
|
||||||
|
factory.registerSubtype(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Gson build(final RuntimeTypeAdapterFactory<WebsocketMessage> factory)
|
||||||
|
{
|
||||||
return new GsonBuilder()
|
return new GsonBuilder()
|
||||||
.registerTypeAdapterFactory(typeAdapter)
|
.registerTypeAdapterFactory(factory)
|
||||||
.create();
|
.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Gson build()
|
||||||
|
{
|
||||||
|
return build(factory(Collections.emptyList()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user