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;
|
||||
|
||||
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.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 static Gson build()
|
||||
{
|
||||
RuntimeTypeAdapterFactory<WebsocketMessage> typeAdapter = RuntimeTypeAdapterFactory.of(WebsocketMessage.class)
|
||||
.registerSubtype(Handshake.class)
|
||||
.registerSubtype(LoginResponse.class)
|
||||
.registerSubtype(Ping.class);
|
||||
private static final Collection<Class<? extends WebsocketMessage>> MESSAGES;
|
||||
|
||||
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()
|
||||
.registerTypeAdapterFactory(typeAdapter)
|
||||
.registerTypeAdapterFactory(factory)
|
||||
.create();
|
||||
}
|
||||
|
||||
public static Gson build()
|
||||
{
|
||||
return build(factory(Collections.emptyList()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user