
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