From daa737f230119126a0508984f67c8af1f1fa579f Mon Sep 17 00:00:00 2001 From: sya-ri Date: Wed, 24 Jan 2024 08:52:20 +0900 Subject: [PATCH] fix: Support section list --- .../dev/s7a/ktconfig/internal/Content.kt | 9 +++- src/test/kotlin/NestingDeserializeTest.kt | 47 +++++++++++++++++++ src/test/kotlin/NestingSerializeTest.kt | 38 +++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/dev/s7a/ktconfig/internal/Content.kt b/src/main/kotlin/dev/s7a/ktconfig/internal/Content.kt index 619658f..9ad9886 100644 --- a/src/main/kotlin/dev/s7a/ktconfig/internal/Content.kt +++ b/src/main/kotlin/dev/s7a/ktconfig/internal/Content.kt @@ -275,7 +275,14 @@ internal sealed class Content(val type: KType) { path: String, value: T?, ) = value?.mapIndexed { index, v -> - content.serialize("$path[$index]", v) + val serialized = content.serialize("$path[$index]", v) + if (serialized is Section) { + serialized.values?.mapValues { + it.value.value + } + } else { + serialized + } } class ListType(type: KType, content: Content, isMarkedNullable: Boolean) : IterableType, U>( diff --git a/src/test/kotlin/NestingDeserializeTest.kt b/src/test/kotlin/NestingDeserializeTest.kt index c80ed37..cbe1458 100644 --- a/src/test/kotlin/NestingDeserializeTest.kt +++ b/src/test/kotlin/NestingDeserializeTest.kt @@ -22,6 +22,32 @@ class NestingDeserializeTest { ) } + @Test + fun another_list() { + data class Data1(val data: @UseSerializer(StringSerializerForNesting::class) String) + + data class Data2(val data1: List) + + assertEquals( + Data2(listOf(Data1("hello"))), + ktConfigString( + """ + data1: + data: h_e_l_l_o + """.trimIndent(), + ), + ) + assertEquals( + Data2(listOf(Data1("hello"))), + ktConfigString( + """ + data1: + - data: h_e_l_l_o + """.trimIndent(), + ), + ) + } + @Test fun another_map() { data class Data1(val data: @UseSerializer(StringSerializerForNesting::class) String) @@ -58,4 +84,25 @@ class NestingDeserializeTest { ), ) } + + @Test + fun recursive_list() { + data class Data(val int: Int, val data: List?) + + assertEquals( + Data(1, listOf(Data(21, listOf(Data(302, listOf(Data(4003, null))))))), + ktConfigString( + """ + int: 1 + data: + - int: 21 + data: + - int: 302 + data: + - int: 4003 + data: null + """.trimIndent(), + ), + ) + } } diff --git a/src/test/kotlin/NestingSerializeTest.kt b/src/test/kotlin/NestingSerializeTest.kt index 3f57712..e2ad75d 100644 --- a/src/test/kotlin/NestingSerializeTest.kt +++ b/src/test/kotlin/NestingSerializeTest.kt @@ -22,6 +22,22 @@ class NestingSerializeTest { ) } + @Test + fun another_list() { + data class Data1(val data: @UseSerializer(StringSerializerForNesting::class) String) + + data class Data2(val data1: List) + + assertEquals( + """ + data1: + - data: h_e_l_l_o + + """.trimIndent(), + saveKtConfigString(Data2(listOf(Data1("hello")))), + ) + } + @Test fun another_map() { data class Data1(val data: @UseSerializer(StringSerializerForNesting::class) String) @@ -57,4 +73,26 @@ class NestingSerializeTest { ), ) } + + @Test + fun recursive_list() { + data class Data(val int: Int, val data: List?) + + assertEquals( + """ + data: + - data: + - data: + - data: null + int: 4003 + int: 302 + int: 21 + int: 1 + + """.trimIndent(), + saveKtConfigString( + Data(1, listOf(Data(21, listOf(Data(302, listOf(Data(4003, null))))))), + ), + ) + } }