@Override
        public Node resourceShape(ResourceShape shape) {
            Optional<Node> identifiers = Optional.empty();
            Optional<Node> properties = Optional.empty();
            if (shape.hasIdentifiers()) {
                Stream<Map.Entry<String, ShapeId>> ids = shape.getIdentifiers().entrySet().stream();
                identifiers = Optional.of(ids.collect(ObjectNode.collectStringKeys(
                        Map.Entry::getKey,
                        entry -> serializeReference(entry.getValue()))));
            }
            if (shape.hasProperties()) {
                Stream<Map.Entry<String, ShapeId>> props = shape.getProperties().entrySet().stream();
                properties = Optional.of(props.collect(ObjectNode.collectStringKeys(
                        Map.Entry::getKey,
                        entry -> serializeReference(entry.getValue()))));
            }

            return serializeAllTraits(shape,
                    createTypedBuilder(shape)
                            .withOptionalMember("identifiers", identifiers)
                            .withOptionalMember("properties", properties)
                            .withOptionalMember("put", shape.getPut().map(this::serializeReference))
                            .withOptionalMember("create", shape.getCreate().map(this::serializeReference))
                            .withOptionalMember("read", shape.getRead().map(this::serializeReference))
                            .withOptionalMember("update", shape.getUpdate().map(this::serializeReference))
                            .withOptionalMember("delete", shape.getDelete().map(this::serializeReference))
                            .withOptionalMember("list", shape.getList().map(this::serializeReference))
                            .withOptionalMember("operations", createOptionalIdList(shape.getIntroducedOperations()))
                            .withOptionalMember("collectionOperations",
                                    createOptionalIdList(shape.getCollectionOperations()))
                            .withOptionalMember("resources", createOptionalIdList(shape.getIntroducedResources())))
                    .build();
        }
Sets the IDL version to serialize. Defaults to 2.0.

<p>Version "1.0" serialization cannot be used with {@link #includePrelude}.

@param version IDL version to set. Can be "1", "1.0", "2", or "2.0".
               "1" and "2" are normalized to "1.0" and "2.0".
@return Returns the builder.
smithy-model/src/main/java/software/amazon/smithy/model/shapes/ModelSerializer.java