sets serialization
This commit is contained in:
		
							parent
							
								
									790cce0d24
								
							
						
					
					
						commit
						f805e1ee82
					
				@ -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<Obj> = mutableSetOf()) : Obj() {
 | 
			
		||||
 | 
			
		||||
@ -80,6 +83,12 @@ class ObjSet(val set: MutableSet<Obj> = 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<Obj> = 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<ObjSet>().set.size.toObj()
 | 
			
		||||
 | 
			
		||||
@ -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 =
 | 
			
		||||
 | 
			
		||||
@ -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())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user