package org.handwerkszeug.riak.transport.protobuf.internal;
import java.io.IOException;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBufferInputStream;
import org.jboss.netty.channel.ChannelHandler.Sharable;
import com.google.protobuf.ExtensionRegistry;
import com.google.protobuf.MessageLite.Builder;
/**
* @author taichi
*/
@Sharable
public class ExtensibleRiakProtoBufDecoder extends RiakProtoBufDecoder {
protected ExtensionRegistry registry;
public ExtensibleRiakProtoBufDecoder(ExtensionRegistry registry) {
this.registry = registry;
}
@Override
protected Builder mergeFrom(Builder builder, ChannelBuffer buffer,
int length) throws IOException {
if (buffer.hasArray()) {
final int offset = buffer.readerIndex();
return builder.mergeFrom(buffer.array(), buffer.arrayOffset()
+ offset, length, this.registry);
} else {
return builder.mergeFrom(new ChannelBufferInputStream(buffer),
this.registry);
}
}
}