public Void structureShape()

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;
        }