package edu.uw.zookeeper.net;
import io.netty.buffer.ByteBuf;
import java.io.IOException;
import com.google.common.base.Optional;
public abstract class AbstractCodec<I,O,U,V> implements Codec<I,O,U,V> {
@Override
public Class<? extends U> encodeType() {
return encoder().encodeType();
}
@Override
public void encode(I input, ByteBuf output) throws IOException {
encoder().encode(input, output);
}
@Override
public Class<? extends V> decodeType() {
return decoder().decodeType();
}
@Override
public Optional<O> decode(ByteBuf input) throws IOException {
return Optional.<O>fromNullable(decoder().decode(input));
}
protected abstract Encoder<? super I,U> encoder();
protected abstract Decoder<? extends O,V> decoder();
}