diff options
-rw-r--r-- | build.gradle.kts | 7 | ||||
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/storage/Jackson.kt | 28 |
2 files changed, 33 insertions, 2 deletions
diff --git a/build.gradle.kts b/build.gradle.kts index fe71506..3c9baf6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -65,9 +65,12 @@ tasks { } relocate("", "io.dico.parcels2.util.") { + exclude("kotlin*") exclude("META-INF/*") - exclude("logback*") - exclude("plugin*") + exclude("logback*xml") + exclude("plugin*yml") } + + relocate("kotlin", "kotlin") } }
\ No newline at end of file diff --git a/src/main/kotlin/io/dico/parcels2/storage/Jackson.kt b/src/main/kotlin/io/dico/parcels2/storage/Jackson.kt index 18ad31f..685ccb5 100644 --- a/src/main/kotlin/io/dico/parcels2/storage/Jackson.kt +++ b/src/main/kotlin/io/dico/parcels2/storage/Jackson.kt @@ -93,3 +93,31 @@ class StorageOptionsSerializer : StdSerializer<StorageOptions>(StorageOptions::c } */ + + +class GeneratorOptionsDeserializer : JsonDeserializer<GeneratorOptions>() { + + override fun deserialize(parser: JsonParser?, ctx: DeserializationContext?): GeneratorOptions? { + val node = parser!!.readValueAsTree<JsonNode>() + val name = node.get("name").asText() + val optionsNode = node.get("options") + val factory = GeneratorFactory.getFactory(name) ?: throw IllegalStateException("Unknown generator: $name") + + return parser.codec.treeToValue(optionsNode, factory.optionsClass.java) + } + +} + +class GeneratorOptionsSerializer(private val defaultSerializer: JsonSerializer<GeneratorOptions>) : JsonSerializer<GeneratorOptions>() { + + override fun serialize(input: GeneratorOptions?, generator: JsonGenerator?, provider: SerializerProvider?) { + with(generator!!) { + writeStartObject() + writeStringField("name", input!!.generatorFactory().name) + writeFieldName("options") + defaultSerializer.serialize(input, generator, provider) + writeEndObject() + } + } + +}
\ No newline at end of file |