in codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/endpoints/ExpressionGenerator.java [59:122]
private record ExpressionGeneratorVisitor(Scope scope, FnProvider fnProvider)
implements ExpressionVisitor<GoWriter.Writable> {
@Override
public GoWriter.Writable visitLiteral(Literal literal) {
return literal.accept(new LiteralGeneratorVisitor(scope, fnProvider));
}
@Override
public GoWriter.Writable visitRef(Reference ref) {
return goTemplate(ref.getName().toString());
}
@Override
public GoWriter.Writable visitGetAttr(GetAttr getAttr) {
var target = new ExpressionGenerator(scope, fnProvider).generate(getAttr.getTarget());
var path = (GoWriter.Writable) (GoWriter w) -> {
getAttr.getPath().stream().toList().forEach((part) -> {
if (part instanceof GetAttr.Part.Key) {
w.writeInline(".$L", getBuiltinMemberName(((GetAttr.Part.Key) part).key()));
} else if (part instanceof GetAttr.Part.Index) {
w.writeInline(".Get($L)", ((GetAttr.Part.Index) part).index());
}
});
};
return (GoWriter w) -> w.writeInline("$W$W", target, path);
}
@Override
public GoWriter.Writable visitIsSet(Expression expr) {
return (GoWriter w) -> {
w.write("$W != nil", new ExpressionGenerator(scope, fnProvider).generate(expr));
};
}
@Override
public GoWriter.Writable visitNot(Expression expr) {
return (GoWriter w) -> {
w.write("!($W)", new ExpressionGenerator(scope, fnProvider).generate(expr));
};
}
@Override
public GoWriter.Writable visitBoolEquals(Expression left, Expression right) {
return (GoWriter w) -> {
var generator = new ExpressionGenerator(scope, fnProvider);
w.write("$W == $W", generator.generate(left), generator.generate(right));
};
}
@Override
public GoWriter.Writable visitStringEquals(Expression left, Expression right) {
return (GoWriter w) -> {
var generator = new ExpressionGenerator(scope, fnProvider);
w.write("$W == $W", generator.generate(left), generator.generate(right));
};
}
@Override
public GoWriter.Writable visitLibraryFunction(FunctionDefinition fnDef, List<Expression> args) {
return new FnGenerator(scope, fnProvider).generate(fnDef, args);
}
}