Commit d8eb2e12 authored by Him188's avatar Him188

Fix nested struct list serializing

parent d3557c92
...@@ -150,7 +150,7 @@ class Jce private constructor(private val charset: JceCharset, context: SerialMo ...@@ -150,7 +150,7 @@ class Jce private constructor(private val charset: JceCharset, context: SerialMo
serializer.serialize(this, value) serializer.serialize(this, value)
} else { } else {
this.writeHead(STRUCT_BEGIN, popTag()) this.writeHead(STRUCT_BEGIN, popTag())
serializer.serialize(this, value) serializer.serialize(JceEncoder(this.output), value)
this.writeHead(STRUCT_END, 0) this.writeHead(STRUCT_END, 0)
} }
} else if (value is ProtoBuf) { } else if (value is ProtoBuf) {
......
...@@ -7,6 +7,7 @@ import net.mamoe.mirai.qqandroid.io.JceOutput ...@@ -7,6 +7,7 @@ import net.mamoe.mirai.qqandroid.io.JceOutput
import net.mamoe.mirai.qqandroid.io.JceStruct import net.mamoe.mirai.qqandroid.io.JceStruct
import net.mamoe.mirai.qqandroid.io.buildJcePacket import net.mamoe.mirai.qqandroid.io.buildJcePacket
import net.mamoe.mirai.utils.cryptor.contentToString import net.mamoe.mirai.utils.cryptor.contentToString
import net.mamoe.mirai.utils.io.toUHexString
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
...@@ -177,4 +178,20 @@ class JceDecoderTest { ...@@ -177,4 +178,20 @@ class JceDecoderTest {
assert(AllNullJce().toByteArray(AllNullJce.serializer()).isEmpty()) assert(AllNullJce().toByteArray(AllNullJce.serializer()).isEmpty())
assertEquals(ByteArray(0).loadAs(AllNullJce.serializer()), AllNullJce()) assertEquals(ByteArray(0).loadAs(AllNullJce.serializer()), AllNullJce())
} }
@Test
fun testNestedStruct() {
@Serializable
class OuterStruct(
@SerialId(0) val innerSturctList: List<TestSimpleJceStruct>
) : JceStruct
assertEquals(
buildJcePacket {
writeCollection(listOf(TestSimpleJceStruct(), TestSimpleJceStruct()), 0)
}.readBytes().toUHexString(),
OuterStruct(listOf(TestSimpleJceStruct(), TestSimpleJceStruct())).toByteArray(OuterStruct.serializer()).toUHexString()
)
//println(OuterStruct(listOf(TestSimpleJceStruct(), TestSimpleJceStruct())).toByteArray(OuterStruct.serializer()).loadAs(OuterStruct.serializer()))
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment