sets serialization
This commit is contained in:
parent
790cce0d24
commit
f805e1ee82
@ -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()
|
||||||
|
@ -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 =
|
||||||
|
@ -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())
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user