private void objectNode(ObjectNode node, String parentPath) {
            boolean isEndpointRuleObject = node
                    .getMember(TYPE)
                    .map(n -> n.asStringNode()
                            .map(s -> s.getValue().equals(ENDPOINT))
                            .orElse(false))
                    .orElse(false);
            if (isEndpointRuleObject) {
                Endpoint endpoint = Endpoint.fromNode(node.expectMember(ENDPOINT));
                visitedEndpoints.put(parentPath + "/" + ENDPOINT, endpoint);
                return;
            }
            for (Entry<StringNode, Node> member : node.getMembers().entrySet()) {
                String key = member.getKey().getValue();
                Node value = member.getValue();
                switch (value.getType()) {
                    case OBJECT: {
                        objectNode(value.expectObjectNode(), parentPath + "/" + key);
                        break;
                    }
                    case ARRAY: {
                        arrayNode(value.expectArrayNode(), parentPath + "/" + key);
                        break;
                    }
                    default:
                        break;
                }
            }
        }
Collects the mapped JSON pointer paths to {@link Endpoint}s.

@return a map of JSON pointer paths to {@link Endpoint}s.
smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/EndpointRuleSet.java