use of io.smallrye.graphql.client.impl.typesafe.ResultBuilder in project smallrye-graphql by smallrye.
the class VertxTypesafeGraphQLClientProxy method executeSingleResultOperationOverHttpSync.
private Object executeSingleResultOperationOverHttpSync(MethodInvocation method, JsonObject request, MultiMap headers) {
String response = postSync(request.toString(), headers);
log.debugf("response graphql: %s", response);
return new ResultBuilder(method, response).read();
}
use of io.smallrye.graphql.client.impl.typesafe.ResultBuilder in project smallrye-graphql by smallrye.
the class VertxTypesafeGraphQLClientProxy method executeSingleResultOperationOverWebsocket.
private Uni<Object> executeSingleResultOperationOverWebsocket(MethodInvocation method, JsonObject request) {
AtomicReference<String> operationId = new AtomicReference<>();
AtomicReference<WebSocketSubprotocolHandler> handlerRef = new AtomicReference<>();
Uni<String> rawUni = Uni.createFrom().emitter(rawEmitter -> {
webSocketHandler().subscribe().with((handler) -> {
handlerRef.set(handler);
operationId.set(handler.executeUni(request, rawEmitter));
});
});
return rawUni.onCancellation().invoke(() -> {
String id = operationId.get();
log.trace("Received onCancellation on operation ID " + id);
if (id != null) {
handlerRef.get().cancelMulti(id);
} else {
log.trace("Received onCancellation on an operation that does not have an ID yet");
}
}).onItem().transform(data -> {
Object object = new ResultBuilder(method, data).read();
if (object != null) {
return object;
} else {
throw new InvalidResponseException("Couldn't find neither data nor errors in the response: " + data);
}
});
}
use of io.smallrye.graphql.client.impl.typesafe.ResultBuilder in project smallrye-graphql by smallrye.
the class VertxTypesafeGraphQLClientProxy method executeSubscriptionOverWebsocket.
private Multi<Object> executeSubscriptionOverWebsocket(MethodInvocation method, JsonObject request) {
AtomicReference<String> operationId = new AtomicReference<>();
AtomicReference<WebSocketSubprotocolHandler> handlerRef = new AtomicReference<>();
Multi<String> rawMulti = Multi.createFrom().emitter(rawEmitter -> {
webSocketHandler().subscribe().with(handler -> {
handlerRef.set(handler);
operationId.set(handler.executeMulti(request, rawEmitter));
});
});
return rawMulti.onCancellation().invoke(() -> {
handlerRef.get().cancelMulti(operationId.get());
}).onItem().transform(data -> {
Object object = new ResultBuilder(method, data).read();
if (object != null) {
return object;
} else {
throw new InvalidResponseException("Couldn't find neither data nor errors in the response: " + data);
}
});
}
Aggregations