diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/util/ReferenceAdapter.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/util/ReferenceAdapter.kt index bba16013..ffec14d5 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/util/ReferenceAdapter.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/util/ReferenceAdapter.kt @@ -1,6 +1,9 @@ package ru.dbotthepony.kstarbound.io.json.util +import com.google.gson.Gson import com.google.gson.TypeAdapter +import com.google.gson.TypeAdapterFactory +import com.google.gson.reflect.TypeToken import com.google.gson.stream.JsonReader import com.google.gson.stream.JsonToken import com.google.gson.stream.JsonWriter @@ -55,6 +58,22 @@ class ReferenceAdapter(val parent: TypeAdapter) : TypeAdapter() { } } +class ReferenceAdapterFactory(val parent: TypeAdapterFactory) : TypeAdapterFactory { + override fun create(gson: Gson, type: TypeToken): TypeAdapter? { + val candidate = parent.create(gson, type) + + if (candidate != null) { + return ReferenceAdapter(candidate) + } + + return null + } +} + fun TypeAdapter.asReference(): TypeAdapter { return ReferenceAdapter(this) } + +fun TypeAdapterFactory.asReference(): TypeAdapterFactory { + return ReferenceAdapterFactory(this) +}