diff --git a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjSet.kt b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjSet.kt index 68f7eec..471100b 100644 --- a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjSet.kt +++ b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjSet.kt @@ -1,6 +1,9 @@ package net.sergeych.lyng.obj import net.sergeych.lyng.Scope +import net.sergeych.lynon.LynonDecoder +import net.sergeych.lynon.LynonEncoder +import net.sergeych.lynon.LynonType class ObjSet(val set: MutableSet = mutableSetOf()) : Obj() { @@ -80,6 +83,12 @@ class ObjSet(val set: MutableSet = mutableSetOf()) : Obj() { return set == other.set } + override suspend fun lynonType(): LynonType = LynonType.Set + + override suspend fun serialize(scope: Scope, encoder: LynonEncoder, lynonType: LynonType?) { + encoder.encodeAnyList(scope, set.toList()) + } + companion object { @@ -87,6 +96,9 @@ class ObjSet(val set: MutableSet = mutableSetOf()) : Obj() { override suspend fun callOn(scope: Scope): Obj { return ObjSet(scope.args.list.toMutableSet()) } + + override suspend fun deserialize(scope: Scope, decoder: LynonDecoder, lynonType: LynonType?): Obj = + ObjSet(decoder.decodeAnyList(scope).toMutableSet()) }.apply { addFn("size") { thisAs().set.size.toObj() diff --git a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjString.kt b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjString.kt index ba75e0e..b614973 100644 --- a/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjString.kt +++ b/lynglib/src/commonMain/kotlin/net/sergeych/lyng/obj/ObjString.kt @@ -87,7 +87,6 @@ data class ObjString(val value: String) : Obj() { encoder.encodeBinaryData(value.encodeToByteArray()) } - companion object { val type = object : ObjClass("String") { override suspend fun deserialize(scope: Scope, decoder: LynonDecoder, lynonType: LynonType?): Obj = diff --git a/lynglib/src/jvmTest/kotlin/LynonTests.kt b/lynglib/src/jvmTest/kotlin/LynonTests.kt index c243d8a..67353e3 100644 --- a/lynglib/src/jvmTest/kotlin/LynonTests.kt +++ b/lynglib/src/jvmTest/kotlin/LynonTests.kt @@ -549,13 +549,22 @@ class LynonTests { fun testHeterogeneousMap() = runTest { val s = testScope() s.eval(""" -// testEncode(["one", 2]) -// testEncode([1, "2"]) -// testEncode( Map("one" => 1, 2 => 2) ) + testEncode(["one", 2]) + testEncode([1, "2"]) + testEncode( Map("one" => 1, 2 => 2) ) testEncode( Map("one" => 1, 2 => "2") ) """.trimIndent()) } + @Test + fun testSetSerialization() = runTest { + testScope().eval(""" + testEncode( Set("one", "two") ) + testEncode( Set() ) + testEncode( Set(1, "one", false) ) + testEncode( Set(true, true, false) ) + """.trimIndent()) + } }