Builder applyNode(String key, Node node) {
            switch (key) {
                case "$ref":
                    this.ref(node.expectStringNode().getValue());
                    break;
                case "type":
                    this.type(node.expectStringNode().getValue());
                    break;
                case "enum":
                    this.enumValues(node.expectArrayNode().getElementsAs(StringNode::getValue));
                    break;
                case "intEnum":
                    this.intEnumValues(
                            node.expectArrayNode().getElementsAs((e) -> e.expectNumberNode().getValue().intValue()));
                    break;
                case "const":
                    this.constValue(node);
                    break;
                case "default":
                    this.defaultValue(node);
                    break;
                case "multipleOf":
                    this.multipleOf(node.expectNumberNode().getValue());
                    break;
                case "maximum":
                    this.maximum(node.expectNumberNode().getValue());
                    break;
                case "exclusiveMaximum":
                    this.exclusiveMaximum(node.expectNumberNode().getValue());
                    break;
                case "minimum":
                    this.minimum(node.expectNumberNode().getValue());
                    break;
                case "exclusiveMinimum":
                    this.exclusiveMinimum(node.expectNumberNode().getValue());
                    break;
                case "maxLength":
                    this.maxLength(node.expectNumberNode().getValue().longValue());
                    break;
                case "minLength":
                    this.minLength(node.expectNumberNode().getValue().longValue());
                    break;
                case "pattern":
                    this.pattern(node.expectStringNode().getValue());
                    break;
                case "items":
                    this.items(Schema.fromNode(node));
                    break;
                case "maxItems":
                    this.maxItems(node.expectNumberNode().getValue().intValue());
                    break;
                case "minItems":
                    this.minItems(node.expectNumberNode().getValue().intValue());
                    break;
                case "uniqueItems":
                    this.uniqueItems(node.expectBooleanNode().getValue());
                    break;
                case "maxProperties":
                    this.maxProperties(node.expectNumberNode().getValue().intValue());
                    break;
                case "minProperties":
                    this.minProperties(node.expectNumberNode().getValue().intValue());
                    break;
                case "required":
                    this.required(node.expectArrayNode().getElementsAs(StringNode::getValue));
                    break;
                case "properties":
                    node.expectObjectNode()
                            .getMembers()
                            .forEach((k, v) -> this.putProperty(k.getValue(), Schema.fromNode(v)));
                    break;
                case "additionalProperties":
                    this.additionalProperties(Schema.fromNode(node));
                    break;
                case "propertyNames":
                    this.propertyNames(Schema.fromNode(node));
                    break;
                case "patternProperties":
                    node.expectObjectNode()
                            .getMembers()
                            .forEach((k, v) -> this.putPatternProperty(k.getValue(), Schema.fromNode(v)));
                    break;
                case "allOf":
                    this.allOf(node.expectArrayNode().getElementsAs(Schema::fromNode));
                    break;
                case "anyOf":
                    this.anyOf(node.expectArrayNode().getElementsAs(Schema::fromNode));
                    break;
                case "oneOf":
                    this.oneOf(node.expectArrayNode().getElementsAs(Schema::fromNode));
                    break;
                case "not":
                    this.not(Schema.fromNode(node));
                    break;
                case "title":
                    this.title(node.expectStringNode().getValue());
                    break;
                case "description":
                    this.description(node.expectStringNode().getValue());
                    break;
                case "format":
                    this.format(node.expectStringNode().getValue());
                    break;
                case "readOnly":
                    this.readOnly(node.expectBooleanNode().getValue());
                    break;
                case "writeOnly":
                    this.writeOnly(node.expectBooleanNode().getValue());
                    break;
                case "comment":
                    this.comment(node.expectStringNode().getValue());
                    break;
                case "examples":
                    this.examples(node);
                    break;
                case "deprecated":
                    this.deprecated(node.expectBooleanNode().getValue());
                    break;
                case "contentEncoding":
                    this.contentEncoding(node.expectStringNode().getValue());
                    break;
                case "contentMediaType":
                    this.contentMediaType(node.expectStringNode().getValue());
                    break;
                default:
                    LOGGER.fine("Unknown property will be added to extensions: " + key);
                    this.putExtension(key, node);
                    break;
            }

            return this;
        }
Disables a specific JSON schema property by name.

@param propertyName Property name to remove (e.g., "propertyNames").
@return Returns the builder.
smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/Schema.java