private void expandMapType()

in ingestion-core/src/main/java/com/mozilla/telemetry/ingestion/core/transform/PubsubMessageToObjectNode.java [584:610]


    private void expandMapType(String jsonFieldName, ObjectNode value, Field field,
        ObjectNode parent, ObjectNode additionalProperties) {
      final ObjectNode props = additionalProperties == null ? null : Json.createObjectNode();
      final Optional<Field> valueFieldOption;
      if (field.getSubFields().size() == 2) {
        valueFieldOption = Optional.of(field.getSubFields().get(1));
      } else {
        valueFieldOption = Optional.empty();
        if (props != null) {
          props.setAll(value);
        }
      }

      final ArrayNode unmapped = Json.createArrayNode();
      value.fields().forEachRemaining(e -> {
        ObjectNode kv = Json.createObjectNode();
        valueFieldOption
            .ifPresent(valueField -> processField(e.getKey(), valueField, e.getValue(), kv, props));
        // add key after processField so it can't be dropped due to e.getKey() matching
        // FieldName.KEY when e.getValue() is null or empty or can't be coerced
        unmapped.add(kv.put(FieldName.KEY, e.getKey()));
      });
      if (!Json.isNullOrEmpty(props)) {
        additionalProperties.set(jsonFieldName, props);
      }
      parent.set(field.getName(), unmapped);
    }