package ru.dbotthepony.kstarbound.json import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableSet import com.google.gson.Gson import com.google.gson.JsonArray import com.google.gson.JsonElement import com.google.gson.JsonNull import com.google.gson.JsonObject import com.google.gson.JsonPrimitive import com.google.gson.JsonSyntaxException 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 import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet inline fun , reified E> Gson.collectionAdapter(): TypeAdapter { return getAdapter(TypeToken.getParameterized(C::class.java, E::class.java)) as TypeAdapter } inline fun Gson.listAdapter(): TypeAdapter> { return collectionAdapter() } inline fun Gson.pairAdapter(): TypeAdapter> { return getAdapter(TypeToken.getParameterized(Pair::class.java, A::class.java, B::class.java)) as TypeAdapter> } inline fun Gson.pairListAdapter(): TypeAdapter>> { return getAdapter(TypeToken.getParameterized(ImmutableList::class.java, TypeToken.getParameterized(Pair::class.java, A::class.java, B::class.java).type)) as TypeAdapter>> } inline fun Gson.mutableListAdapter(): TypeAdapter> { return collectionAdapter() } inline fun Gson.setAdapter(): TypeAdapter> { return collectionAdapter() } inline fun Gson.pairSetAdapter(): TypeAdapter>> { return getAdapter(TypeToken.getParameterized(ImmutableSet::class.java, TypeToken.getParameterized(Pair::class.java, A::class.java, B::class.java).type)) as TypeAdapter>> } inline fun Gson.mutableSetAdapter(): TypeAdapter> { return collectionAdapter() }