in codegen/smithy-ruby-codegen/src/main/java/software/amazon/smithy/ruby/codegen/generators/TypesGenerator.java [205:251]
private void renderStructureToSMethod(StructureShape structureShape) {
String fullQualifiedShapeName = settings.getModule() + "::Types::"
+ symbolProvider.toSymbol(structureShape).getName();
Boolean hasSensitiveMember = structureShape.members().stream()
.anyMatch(memberShape -> memberShape.getMemberTrait(model, SensitiveTrait.class).isPresent());
if (structureShape.hasTrait(SensitiveTrait.class)) {
// structure is itself sensitive
writer
.write("")
.openBlock("def to_s")
.write("\"#<struct $L [SENSITIVE]>\"", fullQualifiedShapeName)
.closeBlock("end");
} else if (hasSensitiveMember) {
// at least one member is sensitive
Iterator<MemberShape> iterator = structureShape.members().iterator();
writer
.write("")
.openBlock("def to_s")
.write("\"#<struct $L \"\\", fullQualifiedShapeName)
.indent();
while (iterator.hasNext()) {
MemberShape memberShape = iterator.next();
String key = symbolProvider.toMemberName(memberShape);
String value = "#{" + key + " || 'nil'}";
if (memberShape.isBlobShape() || memberShape.isStringShape()) {
// Strings are wrapped in quotes
value = "\"" + value + "\"";
} else if (memberShape.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
value = "\\\"[SENSITIVE]\\\"";
}
if (iterator.hasNext()) {
writer.write("\"$L=$L, \"\\", key, value);
} else {
writer.write("\"$L=$L>\"", key, value);
}
}
writer
.dedent()
.closeBlock("end");
}
}