ProtoMessageReader.java

package net.morimekta.proto.sio;

import com.google.protobuf.Descriptors;
import com.google.protobuf.Message;
import net.morimekta.proto.ProtoMessage;

import java.io.IOException;
import java.io.InputStream;

import static java.util.Objects.requireNonNull;

/**
 * Reader implementation for reading messages from input stream using the
 * default proto binary format.
 */
public class ProtoMessageReader implements MessageReader {
    private final InputStream in;

    /**
     * @param in Input stream to read from.
     */
    public ProtoMessageReader(InputStream in) {
        this.in = requireNonNull(in, "in == null");
    }

    @Override
    public Message read(Descriptors.Descriptor descriptor) throws IOException {
        requireNonNull(descriptor, "descriptor == null");
        var builder = ProtoMessage.newBuilder(descriptor);
        builder.mergeFrom(in);
        return builder.build();
    }
}