public Node toNode()

in smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/Schema.java [327:414]


    public Node toNode() {
        if (asNode != null) {
            return asNode;
        }

        ObjectNode.Builder result = Node.objectNodeBuilder()
                .withOptionalMember("type", getType().map(Node::from))
                .withOptionalMember("$ref", getRef().map(Node::from))
                .withOptionalMember("const", getConstValue())
                .withOptionalMember("default", getDefaultValue())

                .withOptionalMember("multipleOf", getMultipleOf().map(Node::from))
                .withOptionalMember("maximum", getMaximum().map(Node::from))
                .withOptionalMember("exclusiveMaximum", getExclusiveMaximum().map(Node::from))
                .withOptionalMember("minimum", getMinimum().map(Node::from))
                .withOptionalMember("exclusiveMinimum", getExclusiveMinimum().map(Node::from))

                .withOptionalMember("items", getItems().map(ToNode::toNode))
                .withOptionalMember("maxItems", getMaxItems().map(Node::from))
                .withOptionalMember("minItems", getMinItems().map(Node::from))
                .withOptionalMember("uniqueItems", uniqueItems ? Optional.of(Node.from(true)) : Optional.empty())

                .withOptionalMember("maxLength", getMaxLength().map(Node::from))
                .withOptionalMember("minLength", getMinLength().map(Node::from))
                .withOptionalMember("pattern", getPattern().map(Node::from))

                .withOptionalMember("additionalProperties", getAdditionalProperties().map(Schema::toNode))
                .withOptionalMember("propertyNames", getPropertyNames().map(Schema::toNode))
                .withOptionalMember("maxProperties", getMaxProperties().map(Node::from))
                .withOptionalMember("minProperties", getMinProperties().map(Node::from))

                .withOptionalMember("not", getNot().map(Schema::toNode))

                .withOptionalMember("comment", getComment().map(Node::from))
                .withOptionalMember("examples", getExamples())
                .withOptionalMember("title", getTitle().map(Node::from))
                .withOptionalMember("description", getDescription().map(Node::from))
                .withOptionalMember("format", getFormat().map(Node::from))

                .withOptionalMember("contentEncoding", getContentEncoding().map(Node::from))
                .withOptionalMember("contentMediaType", getContentMediaType().map(Node::from));

        if (!properties.isEmpty()) {
            result.withMember("properties", properties.entrySet().stream()
                    .collect(ObjectNode.collectStringKeys(Map.Entry::getKey, e -> e.getValue().toNode())));
        }

        if (!patternProperties.isEmpty()) {
            result.withMember("patternProperties", patternProperties.entrySet().stream()
                    .collect(ObjectNode.collectStringKeys(Map.Entry::getKey, e -> e.getValue().toNode())));
        }

        if (!required.isEmpty()) {
            result.withMember("required", required.stream().sorted().map(Node::from).collect(ArrayNode.collect()));
        }

        if (!enumValues.isEmpty()) {
            result.withOptionalMember("enum", getEnumValues()
                    .map(v -> v.stream().map(Node::from).collect(ArrayNode.collect())));
        }

        if (!allOf.isEmpty()) {
            result.withMember("allOf", allOf.stream().collect(ArrayNode.collect()));
        }

        if (!anyOf.isEmpty()) {
            result.withMember("anyOf", anyOf.stream().collect(ArrayNode.collect()));
        }

        if (!oneOf.isEmpty()) {
            result.withMember("oneOf", oneOf.stream().collect(ArrayNode.collect()));
        }

        if (readOnly) {
            result.withMember("readOnly", Node.from(true));
        }

        if (writeOnly) {
            result.withMember("writeOnly", Node.from(true));
        }

        for (Map.Entry<String, ToNode> entry : extensions.entrySet()) {
            result.withMember(entry.getKey(), entry.getValue().toNode());
        }

        asNode = result.build();
        return asNode;
    }