io.vertx.codetrans.expression.AsyncResultModel Maven / Gradle / Ivy
package io.vertx.codetrans.expression;
import io.vertx.codegen.type.TypeInfo;
import io.vertx.codetrans.CodeBuilder;
import io.vertx.codetrans.CodeWriter;
import io.vertx.codetrans.MethodSignature;
import io.vertx.codetrans.TypeArg;
import java.util.List;
/**
* @author Julien Viet
*/
public class AsyncResultModel extends ExpressionModel {
final String name;
final TypeInfo type;
public AsyncResultModel(CodeBuilder builder, String name, TypeInfo type) {
super(builder);
this.name = name;
this.type = type;
}
@Override
public ExpressionModel onMethodInvocation(TypeInfo receiverType, MethodSignature method, TypeInfo returnType, List typeArguments, List argumentModels, List argumentTypes) {
switch (method.getName()) {
case "succeeded":
return new Succeeded(builder);
case "failed":
return new Failed(builder);
case "cause":
return new Cause(builder); // Need to cast to throwable with "as"
case "result":
return new Value(builder).as(type);
default:
throw new UnsupportedOperationException();
}
}
@Override
public void render(CodeWriter writer) {
throw new UnsupportedOperationException("It is not be possible to render an async result directly");
}
public class Succeeded extends ExpressionModel {
public Succeeded(CodeBuilder builder) {
super(builder);
}
@Override
public void render(CodeWriter writer) {
writer.renderAsyncResultSucceeded(type, name);
}
}
public class Failed extends ExpressionModel {
public Failed(CodeBuilder builder) {
super(builder);
}
@Override
public void render(CodeWriter writer) {
writer.renderAsyncResultFailed(type, name);
}
}
public class Value extends ExpressionModel {
public Value(CodeBuilder builder) {
super(builder);
}
@Override
public void render(CodeWriter writer) {
writer.renderAsyncResultValue(type, name);
}
}
public class Cause extends ExpressionModel {
public Cause(CodeBuilder builder) {
super(builder);
}
@Override
public void render(CodeWriter writer) {
writer.renderAsyncResultCause(type, name);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy