All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.reactiverse.awssdk.reactivestreams.ReadStreamPublisher Maven / Gradle / Ivy

package io.reactiverse.awssdk.reactivestreams;

import io.vertx.core.buffer.Buffer;
import io.vertx.core.streams.ReadStream;
import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;

import java.nio.ByteBuffer;
import java.util.concurrent.CompletableFuture;

public class ReadStreamPublisher implements Publisher {

    private ReadStream stream;
    private CompletableFuture future;

    public ReadStreamPublisher(ReadStream readStream) {
        this(readStream, null);
    }

    public ReadStreamPublisher(ReadStream readStream, CompletableFuture future) {
        this.stream = readStream;
        this.future = future;
    }

    @Override
    public void subscribe(Subscriber s) {
        s.onSubscribe(new Subscription() {
            @Override
            public void request(long n) {
                stream.fetch(n);
            }

            @Override
            public void cancel() {
                // Cannot really do anything on the stream
                // stream.pause() maybe ?
            }
        });
        stream.endHandler(v -> {
            s.onComplete();
            if (future != null) {
                future.complete(null);
            }
        });
        stream.handler(buff ->
                s.onNext(ByteBuffer.wrap(buff.getBytes()))
        );
        stream.exceptionHandler(s::onError);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy