All Downloads are FREE. Search and download functionalities are using the official Maven repository.

alloy.openapi.DataExamplesMapper.scala Maven / Gradle / Ivy

There is a newer version: 0.3.14
Show newest version
/* Copyright 2022 Disney Streaming
 *
 * Licensed under the Tomorrow Open Source Technology License, Version 1.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    https://disneystreaming.github.io/TOST-1.0.txt
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package alloy.openapi

import _root_.software.amazon.smithy.jsonschema.JsonSchemaConfig
import _root_.software.amazon.smithy.jsonschema.JsonSchemaMapper
import _root_.software.amazon.smithy.jsonschema.Schema.Builder
import _root_.software.amazon.smithy.model.shapes.Shape

import scala.jdk.CollectionConverters._
import alloy.DataExamplesTrait
import software.amazon.smithy.model.node.ObjectNode
import software.amazon.smithy.model.node.Node

class DataExamplesMapper() extends JsonSchemaMapper {

  override def updateSchema(
      shape: Shape,
      schemaBuilder: Builder,
      config: JsonSchemaConfig
  ): Builder = if (shape.hasTrait(classOf[DataExamplesTrait])) {
    shape
      .getTrait(classOf[DataExamplesTrait])
      .get
      .getExamples()
      .asScala
      .headOption match {
      case Some(example)
          if example.getExampleType != DataExamplesTrait.DataExampleType.STRING =>
        schemaBuilder.putExtension("example", example.getContent())
      case Some(example)
          if example.getExampleType == DataExamplesTrait.DataExampleType.STRING =>
        val maybeStrNode = example.getContent().asStringNode()
        val res = if (maybeStrNode.isPresent) {
          Node.parse(maybeStrNode.get.getValue)
        } else {
          ObjectNode.builder().build()
        }
        schemaBuilder.putExtension("example", res)
      case _ => schemaBuilder
    }
  } else schemaBuilder
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy