in codegen/smithy-ruby-codegen/src/main/java/software/amazon/smithy/ruby/codegen/generators/TypesGenerator.java [120:164]
public Void structureShape(StructureShape shape) {
String shapeName = symbolProvider.toSymbol(shape).getName();
String membersBlock = "nil";
if (!shape.members().isEmpty()) {
membersBlock = shape
.members()
.stream()
.map(memberShape -> RubyFormatter.asSymbol(symbolProvider.toMemberName(memberShape)))
.collect(Collectors.joining(",\n"));
}
membersBlock += ",";
String documentation = new ShapeDocumentationGenerator(model, symbolProvider, shape).render();
writer.writeInline("$L", documentation);
shape.members().forEach(memberShape -> {
String attribute = symbolProvider.toMemberName(memberShape);
Shape target = model.expectShape(memberShape.getTarget());
String returnType = (String) symbolProvider.toSymbol(target)
.getProperty("yardType").orElseThrow(IllegalArgumentException::new);
String memberDocumentation =
new ShapeDocumentationGenerator(model, symbolProvider, memberShape).render();
writer.writeYardAttribute(attribute, () -> {
// delegate to member shape in this visitor
writer.writeInline("$L", memberDocumentation);
writer.writeYardReturn(returnType, "");
});
});
writer
.openBlock(shapeName + " = ::Struct.new(")
.write(membersBlock)
.write("keyword_init: true")
.closeBlock(") do")
.indent()
.write("include Seahorse::Structure")
.call(() -> renderStructureToSMethod(shape))
.closeBlock("end\n");
return null;
}