@@ -12,7 +12,33 @@ import kotlinx.serialization.encoding.Encoder
12
12
import kotlinx.serialization.modules.SerializersModule
13
13
import kotlinx.serialization.serializer
14
14
15
- open class PPrinter <T >(open val serializer : SerializationStrategy <T >, override open val config : PPrinterConfig = PPrinterConfig ()): PPrinterBase<T>(config) {
15
+ abstract class PPrinterKmp <T >(override open val config : PPrinterConfig ): PPrinterBase<T>(config) {
16
+ open fun <R > treeifyValueOrNull (value : R , elementName : String? , escapeUnicode : Boolean , showFieldNames : Boolean ): Tree ? =
17
+ when {
18
+ value == null -> Tree .Literal (" null" , elementName)
19
+ value is Boolean -> Tree .Literal (value.toString(), elementName)
20
+ value is Byte -> Tree .Literal (value.toString(), elementName)
21
+ value is Short -> Tree .Literal (value.toString(), elementName)
22
+ value is Int -> Tree .Literal (value.toString(), elementName)
23
+ value is Long -> Tree .Literal (" ${value} L" , elementName)
24
+ value is Float -> Tree .Literal (" ${value} F" , elementName)
25
+ value is Double -> Tree .Literal (value.toString(), elementName)
26
+ value is Char -> EncodeHelperImpl .encodeChar(value, escapeUnicode, elementName)
27
+ value is String -> EncodeHelperImpl .encodeString(value, escapeUnicode, elementName)
28
+ // Empty iterator case which for some reason causes an exception with the regular kotlin serializer
29
+ value is Iterator <* > && ! value.hasNext() -> Tree .Literal (" empty iterator" , elementName)
30
+ value is Iterator <* > && value.hasNext() -> Tree .Literal (" non-empty iterator" , elementName)
31
+ else -> null
32
+ }
33
+ }
34
+
35
+ open class PPrinterManual <T >(override val config : PPrinterConfig = PPrinterConfig ()): PPrinterKmp<T>(config) {
36
+ override fun treeify (x : T , elementName : String? , escapeUnicode : Boolean , showFieldNames : Boolean ): Tree =
37
+ treeifyValueOrNull(x, elementName, escapeUnicode, showFieldNames)
38
+ ? : Tree .Literal (x.toString(), elementName)
39
+ }
40
+
41
+ open class PPrinter <T >(open val serializer : SerializationStrategy <T >, override open val config : PPrinterConfig = PPrinterConfig ()): PPrinterKmp<T>(config) {
16
42
17
43
companion object {
18
44
inline operator fun <reified T > invoke (config : PPrinterConfig = PPrinterConfig ()) = PPrinter (serializer<T >(), config)
@@ -76,24 +102,6 @@ open class PPrinter<T>(open val serializer: SerializationStrategy<T>, override o
76
102
Tree .Literal (treeifyable.value.toString(), elementName)
77
103
}
78
104
}
79
-
80
- open fun <R > treeifyValueOrNull (value : R , elementName : String? , escapeUnicode : Boolean , showFieldNames : Boolean ): Tree ? =
81
- when {
82
- value == null -> Tree .Literal (" null" , elementName)
83
- value is Boolean -> Tree .Literal (value.toString(), elementName)
84
- value is Byte -> Tree .Literal (value.toString(), elementName)
85
- value is Short -> Tree .Literal (value.toString(), elementName)
86
- value is Int -> Tree .Literal (value.toString(), elementName)
87
- value is Long -> Tree .Literal (" ${value} L" , elementName)
88
- value is Float -> Tree .Literal (" ${value} F" , elementName)
89
- value is Double -> Tree .Literal (value.toString(), elementName)
90
- value is Char -> EncodeHelperImpl .encodeChar(value, escapeUnicode, elementName)
91
- value is String -> EncodeHelperImpl .encodeString(value, escapeUnicode, elementName)
92
- // Empty iterator case which for some reason causes an exception with the regular kotlin serializer
93
- value is Iterator <* > && ! value.hasNext() -> Tree .Literal (" empty iterator" , elementName)
94
- value is Iterator <* > && value.hasNext() -> Tree .Literal (" non-empty iterator" , elementName)
95
- else -> null
96
- }
97
105
}
98
106
99
107
class PPrintSequenceSerializer <T >(val element : KSerializer <T >) : KSerializer<Sequence<T>> {
0 commit comments