code: private JsonNode applyShapeModifier(JsonNode node, ShapeModifier modifier) {
          if (node == null || modifier == null) {
              return node;
          }
  
          if (modifier.getExclude() == null && modifier.getModify() == null) {
              return node;
          }
  
          if (!node.isObject()) return node;
  
          final ObjectNode obj = (ObjectNode) node;
  
          ObjectNode modified = MAPPER.createObjectNode();
          // Filter any excluded members
          final List<String> excludes = modifier.getExclude() != null ? modifier.getExclude() : Collections.emptyList();
          obj.fieldNames().forEachRemaining(m -> {
              if (!excludes.contains(m)) {
                  modified.set(m, obj.get(m));
              }
          });
          // Apply property renames
          final List<Map<String, ShapeModifier_ModifyModel>> modify = modifier.getModify() != null ? modifier.getModify() : Collections.emptyList();
          modify.forEach(memberMods ->
              memberMods.entrySet().forEach(memberMod -> {
                  String memberName = memberMod.getKey();
                  ShapeModifier_ModifyModel modelModify = memberMod.getValue();
                  if (modelModify.getEmitPropertyName() != null) {
                      String newName = modelModify.getEmitPropertyName();
                      modified.set(newName, modified.get(memberName));
                      modified.remove(memberName);
                      memberName = newName;
                  }
              })
          );
  
          return modified;
      }
docs: Apply any shape modifiers to the JSON value. This only takes care of
  'exclude' and 'emitPropertyName'.
  
  @param node The JSON node.
  @param modifier The shape modifier.
  @return The modified node.