/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ package org.opensearch.commons.utils import org.opensearch.common.xcontent.XContentType import org.opensearch.core.common.io.stream.StreamInput import org.opensearch.core.xcontent.DeprecationHandler import org.opensearch.core.xcontent.NamedXContentRegistry import org.opensearch.core.xcontent.ToXContent import org.opensearch.core.xcontent.ToXContentObject import org.opensearch.core.xcontent.XContentBuilder import org.opensearch.core.xcontent.XContentParser import org.opensearch.core.xcontent.XContentParserUtils import org.opensearch.rest.RestRequest fun StreamInput.createJsonParser(): XContentParser { return XContentType.JSON.xContent() .createParser(NamedXContentRegistry.EMPTY, DeprecationHandler.IGNORE_DEPRECATIONS, this) } fun RestRequest.contentParserNextToken(): XContentParser { val parser = this.contentParser() parser.nextToken() return parser } fun XContentParser.stringList(): List { val retList: MutableList = mutableListOf() XContentParserUtils.ensureExpectedToken(XContentParser.Token.START_ARRAY, currentToken(), this) while (nextToken() != XContentParser.Token.END_ARRAY) { retList.add(text()) } return retList } fun XContentBuilder.fieldIfNotNull(name: String, value: Any?): XContentBuilder { if (value != null) { this.field(name, value) } return this } fun XContentBuilder.objectIfNotNull(name: String, xContentObject: ToXContentObject?): XContentBuilder { if (xContentObject != null) { this.field(name) xContentObject.toXContent(this, ToXContent.EMPTY_PARAMS) } return this } fun XContentParser.objectList(block: (XContentParser) -> T): List { val retList: MutableList = mutableListOf() XContentParserUtils.ensureExpectedToken(XContentParser.Token.START_ARRAY, currentToken(), this) while (nextToken() != XContentParser.Token.END_ARRAY) { retList.add(block(this)) } return retList }