mirror of
https://github.com/ReVanced/revanced-library.git
synced 2026-01-11 05:46:17 +00:00
fix: Serialize compatible packages as a map instead of a set of pairs.
This commit is contained in:
@@ -1,14 +1,19 @@
|
|||||||
package app.revanced.library
|
package app.revanced.library
|
||||||
|
|
||||||
import app.revanced.patcher.patch.*
|
import app.revanced.patcher.patch.Option
|
||||||
import kotlinx.serialization.*
|
import app.revanced.patcher.patch.Patch
|
||||||
|
import app.revanced.patcher.patch.VersionName
|
||||||
|
import kotlinx.serialization.ExperimentalSerializationApi
|
||||||
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.builtins.*
|
import kotlinx.serialization.builtins.*
|
||||||
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
|
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
|
||||||
import kotlinx.serialization.descriptors.element
|
import kotlinx.serialization.descriptors.element
|
||||||
import kotlinx.serialization.encoding.Decoder
|
import kotlinx.serialization.encoding.Decoder
|
||||||
import kotlinx.serialization.encoding.Encoder
|
import kotlinx.serialization.encoding.Encoder
|
||||||
import kotlinx.serialization.encoding.encodeStructure
|
import kotlinx.serialization.encoding.encodeStructure
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.Json
|
||||||
|
import kotlinx.serialization.json.encodeToStream
|
||||||
|
import kotlinx.serialization.serializer
|
||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
|
|
||||||
private class PatchSerializer : KSerializer<Patch<*>> {
|
private class PatchSerializer : KSerializer<Patch<*>> {
|
||||||
@@ -17,7 +22,7 @@ private class PatchSerializer : KSerializer<Patch<*>> {
|
|||||||
element<String?>("description")
|
element<String?>("description")
|
||||||
element<Boolean>("use")
|
element<Boolean>("use")
|
||||||
element<List<String>>("dependencies")
|
element<List<String>>("dependencies")
|
||||||
element<Set<Package>?>("compatiblePackages")
|
element<Map<PackageName, Set<VersionName>?>?>("compatiblePackages")
|
||||||
element("options", OptionSerializer.descriptor)
|
element("options", OptionSerializer.descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,8 +57,8 @@ private class PatchSerializer : KSerializer<Patch<*>> {
|
|||||||
encodeNullableSerializableElement(
|
encodeNullableSerializableElement(
|
||||||
descriptor,
|
descriptor,
|
||||||
4,
|
4,
|
||||||
SetSerializer(PairSerializer(String.serializer(), SetSerializer(String.serializer()).nullable)),
|
MapSerializer(String.serializer(), SetSerializer(String.serializer()).nullable),
|
||||||
value.compatiblePackages,
|
value.compatiblePackages?.associate { (packageName, versions) -> packageName to versions },
|
||||||
)
|
)
|
||||||
encodeSerializableElement(
|
encodeSerializableElement(
|
||||||
descriptor,
|
descriptor,
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package app.revanced.library
|
package app.revanced.library
|
||||||
|
|
||||||
import app.revanced.patcher.patch.*
|
import app.revanced.patcher.patch.booleanOption
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.patcher.patch.floatsOption
|
||||||
|
import app.revanced.patcher.patch.stringOption
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.*
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
@@ -33,7 +36,7 @@ class SerializationTest {
|
|||||||
|
|
||||||
assert(deserializedPatch["name"]!!.jsonPrimitive.content == "Test patch")
|
assert(deserializedPatch["name"]!!.jsonPrimitive.content == "Test patch")
|
||||||
|
|
||||||
assert(deserializedPatch["compatiblePackages"]!!.jsonArray.size == 2) {
|
assert(deserializedPatch["compatiblePackages"]!!.jsonObject.size == 2) {
|
||||||
"The patch should be compatible with two packages."
|
"The patch should be compatible with two packages."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user