package io.volvox.td; import io.quarkus.runtime.StartupEvent; import io.smallrye.mutiny.Uni; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.Function; import it.tdlight.jni.TdApi.Object; import java.io.InputStream; import java.util.NoSuchElementException; import java.util.Objects; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.context.Initialized; import javax.enterprise.event.Observes; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/api/td/session/{sessionId}") public class TdSessionResource { @PathParam("sessionId") String sessionId; @Inject TdService tdService; @Inject TdObjectJsonSerializer tdObjectJsonSerializer; private TdClient client() { return tdService.get(sessionId) .orElseThrow(() -> new NoSuchElementException("Session not found: " + sessionId)); } @SuppressWarnings("unchecked") @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Path("/send") public Uni sendRest(InputStream functionJson) { TdApi.Function requestFunction = (Function) tdObjectJsonSerializer.deserialize(functionJson); return client().send(requestFunction).map(response -> tdObjectJsonSerializer.serialize(response)); } @SuppressWarnings("unchecked") @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Path("/execute") public Uni executeRest(InputStream functionJson) { TdApi.Function requestFunction = (Function) tdObjectJsonSerializer.deserialize(functionJson); return client().execute(requestFunction).map(response -> tdObjectJsonSerializer.serialize(response)); } }