in codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/HttpBindingProtocolGenerator.java [771:831]
private void writeHttpBindingSetter(
GenerationContext context,
GoWriter writer,
MemberShape memberShape,
HttpBinding.Location location,
String operand,
BiConsumer<GoWriter, String> locationEncoder
) {
Model model = context.getModel();
Shape targetShape = model.expectShape(memberShape.getTarget());
// We only need to dereference if we pass the shape around as reference in Go.
// Note we make two exceptions here: big.Int and big.Float should still be passed as reference to the helper
// method as they can be arbitrarily large.
operand = CodegenUtils.getAsValueIfDereferencable(GoPointableIndex.of(context.getModel()), memberShape,
operand);
switch (targetShape.getType()) {
case BOOLEAN:
locationEncoder.accept(writer, "Boolean(" + operand + ")");
break;
case STRING:
operand = targetShape.hasTrait(EnumTrait.class) ? "string(" + operand + ")" : operand;
locationEncoder.accept(writer, "String(" + operand + ")");
break;
case ENUM:
operand = "string(" + operand + ")";
locationEncoder.accept(writer, "String(" + operand + ")");
break;
case TIMESTAMP:
generateHttpBindingTimestampSerializer(model, writer, memberShape, location, operand, locationEncoder);
break;
case BYTE:
locationEncoder.accept(writer, "Byte(" + operand + ")");
break;
case SHORT:
locationEncoder.accept(writer, "Short(" + operand + ")");
break;
case INTEGER:
case INT_ENUM:
locationEncoder.accept(writer, "Integer(" + operand + ")");
break;
case LONG:
locationEncoder.accept(writer, "Long(" + operand + ")");
break;
case FLOAT:
locationEncoder.accept(writer, "Float(" + operand + ")");
break;
case DOUBLE:
locationEncoder.accept(writer, "Double(" + operand + ")");
break;
case BIG_INTEGER:
locationEncoder.accept(writer, "BigInteger(" + operand + ")");
break;
case BIG_DECIMAL:
locationEncoder.accept(writer, "BigDecimal(" + operand + ")");
break;
default:
throw new CodegenException("unexpected shape type " + targetShape.getType());
}
}