tdlib-session-container/src/main/java/it/tdlight/reactiveapi/ChannelCodec.java

48 lines
1.8 KiB
Java

package it.tdlight.reactiveapi;
import java.lang.reflect.InvocationTargetException;
public class ChannelCodec {
public static final ChannelCodec CLIENT_BOUND_EVENT = new ChannelCodec(ClientBoundEventSerializer.class, ClientBoundEventDeserializer.class);
public static final ChannelCodec TDLIB_REQUEST = new ChannelCodec(TdlibRequestSerializer.class, TdlibRequestDeserializer.class);
public static final ChannelCodec TDLIB_RESPONSE = new ChannelCodec(TdlibResponseSerializer.class, TdlibResponseDeserializer.class);
public static final ChannelCodec UTF8_TEST = new ChannelCodec(UtfCodec.class, UtfCodec.class);
private final Class<?> serializerClass;
private final Class<?> deserializerClass;
public ChannelCodec(Class<?> serializerClass,
Class<?> deserializerClass) {
this.serializerClass = serializerClass;
this.deserializerClass = deserializerClass;
}
public Class<?> getSerializerClass() {
return serializerClass;
}
public Class<?> getDeserializerClass() {
return deserializerClass;
}
public <K> Deserializer<K> getNewDeserializer() {
try {
//noinspection unchecked
return (Deserializer<K>) deserializerClass.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException |
ClassCastException e) {
throw new IllegalStateException("Can't instantiate the codec deserializer", e);
}
}
public <K> Serializer<K> getNewSerializer() {
try {
//noinspection unchecked
return (Serializer<K>) serializerClass.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException |
ClassCastException e) {
throw new IllegalStateException("Can't instantiate the codec serializer", e);
}
}
}