From 3ff6cd2d02d8b93983f496d4d34e813b5232def6 Mon Sep 17 00:00:00 2001 From: Graham Date: Sun, 14 Feb 2021 11:07:13 +0000 Subject: [PATCH] Add custom JSON pretty printer This produces identical output to the Firefox pretty printer. Signed-off-by: Graham --- .../org/openrs2/json/JsonPrettyPrinter.kt | 24 +++++++++++++++++++ .../org/openrs2/json/ObjectMapperProvider.kt | 3 +++ 2 files changed, 27 insertions(+) create mode 100644 json/src/main/kotlin/org/openrs2/json/JsonPrettyPrinter.kt diff --git a/json/src/main/kotlin/org/openrs2/json/JsonPrettyPrinter.kt b/json/src/main/kotlin/org/openrs2/json/JsonPrettyPrinter.kt new file mode 100644 index 00000000..57bf57df --- /dev/null +++ b/json/src/main/kotlin/org/openrs2/json/JsonPrettyPrinter.kt @@ -0,0 +1,24 @@ +package org.openrs2.json + +import com.fasterxml.jackson.core.JsonGenerator +import com.fasterxml.jackson.core.util.DefaultIndenter +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter + +public class JsonPrettyPrinter : DefaultPrettyPrinter() { + init { + indentArraysWith(UNIX_INDENT) + indentObjectsWith(UNIX_INDENT) + } + + override fun createInstance(): DefaultPrettyPrinter { + return JsonPrettyPrinter() + } + + override fun writeObjectFieldValueSeparator(g: JsonGenerator) { + g.writeRaw(": ") + } + + private companion object { + private val UNIX_INDENT = DefaultIndenter(" ", "\n") + } +} diff --git a/json/src/main/kotlin/org/openrs2/json/ObjectMapperProvider.kt b/json/src/main/kotlin/org/openrs2/json/ObjectMapperProvider.kt index ce98ae29..f064286e 100644 --- a/json/src/main/kotlin/org/openrs2/json/ObjectMapperProvider.kt +++ b/json/src/main/kotlin/org/openrs2/json/ObjectMapperProvider.kt @@ -3,6 +3,7 @@ package org.openrs2.json import com.fasterxml.jackson.databind.Module import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.PropertyNamingStrategies +import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.module.kotlin.registerKotlinModule import javax.inject.Inject import javax.inject.Provider @@ -14,6 +15,8 @@ public class ObjectMapperProvider @Inject constructor( return ObjectMapper() .registerKotlinModule() .registerModules(modules) + .enable(SerializationFeature.INDENT_OUTPUT) + .setDefaultPrettyPrinter(JsonPrettyPrinter()) .setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) } }