private void renderStructureToSMethod()

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