sets serialization

This commit is contained in:
Sergey Chernov 2025-08-03 15:11:15 +03:00
parent 790cce0d24
commit f805e1ee82
3 changed files with 24 additions and 4 deletions

View File

@ -1,6 +1,9 @@
package net.sergeych.lyng.obj package net.sergeych.lyng.obj
import net.sergeych.lyng.Scope 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<Obj> = mutableSetOf()) : Obj() { class ObjSet(val set: MutableSet<Obj> = mutableSetOf()) : Obj() {
@ -80,6 +83,12 @@ class ObjSet(val set: MutableSet<Obj> = mutableSetOf()) : Obj() {
return set == other.set 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 { companion object {
@ -87,6 +96,9 @@ class ObjSet(val set: MutableSet<Obj> = mutableSetOf()) : Obj() {
override suspend fun callOn(scope: Scope): Obj { override suspend fun callOn(scope: Scope): Obj {
return ObjSet(scope.args.list.toMutableSet()) return ObjSet(scope.args.list.toMutableSet())
} }
override suspend fun deserialize(scope: Scope, decoder: LynonDecoder, lynonType: LynonType?): Obj =
ObjSet(decoder.decodeAnyList(scope).toMutableSet())
}.apply { }.apply {
addFn("size") { addFn("size") {
thisAs<ObjSet>().set.size.toObj() thisAs<ObjSet>().set.size.toObj()

View File

@ -87,7 +87,6 @@ data class ObjString(val value: String) : Obj() {
encoder.encodeBinaryData(value.encodeToByteArray()) encoder.encodeBinaryData(value.encodeToByteArray())
} }
companion object { companion object {
val type = object : ObjClass("String") { val type = object : ObjClass("String") {
override suspend fun deserialize(scope: Scope, decoder: LynonDecoder, lynonType: LynonType?): Obj = override suspend fun deserialize(scope: Scope, decoder: LynonDecoder, lynonType: LynonType?): Obj =

View File

@ -549,13 +549,22 @@ class LynonTests {
fun testHeterogeneousMap() = runTest { fun testHeterogeneousMap() = runTest {
val s = testScope() val s = testScope()
s.eval(""" s.eval("""
// testEncode(["one", 2]) testEncode(["one", 2])
// testEncode([1, "2"]) testEncode([1, "2"])
// testEncode( Map("one" => 1, 2 => 2) ) testEncode( Map("one" => 1, 2 => 2) )
testEncode( Map("one" => 1, 2 => "2") ) testEncode( Map("one" => 1, 2 => "2") )
""".trimIndent()) """.trimIndent())
} }
@Test
fun testSetSerialization() = runTest {
testScope().eval("""
testEncode( Set("one", "two") )
testEncode( Set() )
testEncode( Set(1, "one", false) )
testEncode( Set(true, true, false) )
""".trimIndent())
}
} }