YamlFormat.kt

  1. package com.hexagontk.serialization.jackson.yaml

  2. import com.fasterxml.jackson.core.JsonFactory
  3. import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
  4. import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator.Feature.*
  5. import com.hexagontk.core.media.APPLICATION_YAML
  6. import com.hexagontk.core.media.MediaType
  7. import com.hexagontk.serialization.jackson.JacksonTextFormat

  8. open class YamlFormat(
  9.     prettyPrint: Boolean = true
  10. ) : JacksonTextFormat({ createYamlFactory(prettyPrint) }, prettyPrint) {

  11.     private companion object {
  12.         fun createYamlFactory(prettyPrint: Boolean): JsonFactory =
  13.             with(YAMLFactory()) {
  14.                 configure(WRITE_DOC_START_MARKER, false)
  15.                 configure(ALWAYS_QUOTE_NUMBERS_AS_STRINGS, true)
  16.                 configure(MINIMIZE_QUOTES, prettyPrint)
  17.                 configure(INDENT_ARRAYS_WITH_INDICATOR, prettyPrint)
  18.             }
  19.     }

  20.     override val mediaType: MediaType = APPLICATION_YAML
  21. }