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

io.reactiverse.awssdk.converters.VertxAsyncResponseTransformer Maven / Gradle / Ivy

package io.reactiverse.awssdk.converters;

import io.reactiverse.awssdk.reactivestreams.WriteStreamSubscriber;
import io.vertx.core.Handler;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.streams.WriteStream;
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
import software.amazon.awssdk.core.async.SdkPublisher;

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

public class VertxAsyncResponseTransformer implements AsyncResponseTransformer> {

    private volatile CompletableFuture> cf;
    private volatile WriteStream writeStream;
    private volatile Optional> responseHandler;

    public VertxAsyncResponseTransformer(WriteStream ws) {
        this.writeStream = ws;
        responseHandler = Optional.empty();
    }

    @Override
    public CompletableFuture> prepare() {
        cf = new CompletableFuture<>();
        return cf;
    }

    @Override
    public void onResponse(ResponseT response) {
        this.responseHandler.ifPresent(handler -> handler.handle(response));
    }

    @Override
    public void onStream(SdkPublisher publisher) {
        publisher.subscribe(new WriteStreamSubscriber<>(writeStream, cf));
    }

    @Override
    public void exceptionOccurred(Throwable error) {
        cf.completeExceptionally(error);
    }

    public VertxAsyncResponseTransformer setResponseHandler(Handler handler) {
        this.responseHandler = Optional.of(handler);
        return this;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy