@@ -14,7 +14,9 @@ import kotlinx.serialization.modules.SerializersModule
14
14
sealed interface ChildElement {
15
15
val tree: () -> Tree
16
16
17
- data class Member (val name : String , override val tree : () -> Tree ): ChildElement
17
+ data class Member (val name : String , val makeTree : (String ) -> Tree ): ChildElement {
18
+ override val tree = { makeTree(name) }
19
+ }
18
20
data class Atom (override val tree : () -> Tree ): ChildElement
19
21
}
20
22
@@ -86,16 +88,16 @@ open class TreeElementEncoder private constructor (val pprinter: PPrinter<*>) :
86
88
87
89
protected val currChildren = mutableListOf<ChildElement >()
88
90
89
- protected fun add (name : String , tree : () -> Tree ): Unit {
91
+ protected fun add (name : String , tree : (name: String ) -> Tree ): Unit {
90
92
currChildren.add(ChildElement .Member (name, tree))
91
93
}
92
94
93
95
protected fun addAtom (tree : () -> Tree ): Unit {
94
96
currChildren.add(ChildElement .Atom (tree))
95
97
}
96
98
97
- private fun treeifyLeaf (value : Any? ): Tree =
98
- pprinter.treeifyWith <Any ?>(PPrinter .Treeifyable .Leaf (value), escapeUnicode, showFieldNames)
99
+ private fun treeifyLeaf (value : Any? , elementName : String? ): Tree =
100
+ pprinter.treeifyElement <Any ?>(PPrinter .Treeifyable .Leaf (value), elementName , escapeUnicode, showFieldNames)
99
101
100
102
override fun beginStructure (descriptor : SerialDescriptor ): CompositeEncoder = this
101
103
@@ -113,34 +115,34 @@ open class TreeElementEncoder private constructor (val pprinter: PPrinter<*>) :
113
115
/* *
114
116
* Invoked to encode a value when specialized `encode*` method was not overridden.
115
117
*/
116
- public fun encodeValue (value : Any ): Unit = addAtom { treeifyLeaf(value) }
118
+ public fun encodeValue (value : Any ): Unit = addAtom { treeifyLeaf(value, null ) }
117
119
118
- override fun encodeNull (): Unit = addAtom { treeifyLeaf(null ) }
120
+ override fun encodeNull (): Unit = addAtom { treeifyLeaf(null , null ) }
119
121
120
122
override fun encodeInline (descriptor : SerialDescriptor ): Encoder = this
121
123
122
124
// Delegating implementation of CompositeEncoder
123
- override fun encodeBooleanElement (desc : SerialDescriptor , index : Int , value : Boolean ) = add(desc.getElementName(index), { treeifyLeaf(value) })
124
- override fun encodeByteElement (desc : SerialDescriptor , index : Int , value : Byte ) = add(desc.getElementName(index), { treeifyLeaf(value) })
125
- override fun encodeShortElement (desc : SerialDescriptor , index : Int , value : Short ) = add(desc.getElementName(index), { treeifyLeaf(value) })
126
- override fun encodeIntElement (desc : SerialDescriptor , index : Int , value : Int ) = add(desc.getElementName(index), { treeifyLeaf(value) })
127
- override fun encodeLongElement (desc : SerialDescriptor , index : Int , value : Long ) = add(desc.getElementName(index), { treeifyLeaf(value) })
128
- override fun encodeFloatElement (desc : SerialDescriptor , index : Int , value : Float ) = add(desc.getElementName(index), { treeifyLeaf(value) })
129
- override fun encodeDoubleElement (desc : SerialDescriptor , index : Int , value : Double ) = add(desc.getElementName(index), { treeifyLeaf(value) })
130
- override fun encodeCharElement (desc : SerialDescriptor , index : Int , value : Char ) = add(desc.getElementName(index), { treeifyLeaf(value) })
131
- override fun encodeStringElement (desc : SerialDescriptor , index : Int , value : String ) = add(desc.getElementName(index), { treeifyLeaf(value) })
132
-
133
- override fun encodeBoolean (value : Boolean ): Unit = addAtom { treeifyLeaf(value) }
134
- override fun encodeByte (value : Byte ): Unit = addAtom { treeifyLeaf(value) }
135
- override fun encodeShort (value : Short ): Unit = addAtom { treeifyLeaf(value) }
136
- override fun encodeInt (value : Int ): Unit = addAtom { treeifyLeaf(value) }
137
- override fun encodeLong (value : Long ): Unit = addAtom { treeifyLeaf(value) }
138
- override fun encodeFloat (value : Float ): Unit = addAtom { treeifyLeaf(value) }
139
- override fun encodeDouble (value : Double ): Unit = addAtom { treeifyLeaf(value) }
140
- override fun encodeChar (value : Char ): Unit = addAtom { treeifyLeaf(value) }
141
- override fun encodeString (value : String ): Unit = addAtom { treeifyLeaf(value) }
142
-
143
- override fun encodeEnum (enumDescriptor : SerialDescriptor , index : Int ): Unit = addAtom { treeifyLeaf(enumDescriptor.getElementName(index)) }
125
+ override fun encodeBooleanElement (desc : SerialDescriptor , index : Int , value : Boolean ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
126
+ override fun encodeByteElement (desc : SerialDescriptor , index : Int , value : Byte ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
127
+ override fun encodeShortElement (desc : SerialDescriptor , index : Int , value : Short ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
128
+ override fun encodeIntElement (desc : SerialDescriptor , index : Int , value : Int ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
129
+ override fun encodeLongElement (desc : SerialDescriptor , index : Int , value : Long ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
130
+ override fun encodeFloatElement (desc : SerialDescriptor , index : Int , value : Float ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
131
+ override fun encodeDoubleElement (desc : SerialDescriptor , index : Int , value : Double ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
132
+ override fun encodeCharElement (desc : SerialDescriptor , index : Int , value : Char ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
133
+ override fun encodeStringElement (desc : SerialDescriptor , index : Int , value : String ) = add(desc.getElementName(index), { treeifyLeaf(value, it ) })
134
+
135
+ override fun encodeBoolean (value : Boolean ): Unit = addAtom { treeifyLeaf(value, null ) }
136
+ override fun encodeByte (value : Byte ): Unit = addAtom { treeifyLeaf(value, null ) }
137
+ override fun encodeShort (value : Short ): Unit = addAtom { treeifyLeaf(value, null ) }
138
+ override fun encodeInt (value : Int ): Unit = addAtom { treeifyLeaf(value, null ) }
139
+ override fun encodeLong (value : Long ): Unit = addAtom { treeifyLeaf(value, null ) }
140
+ override fun encodeFloat (value : Float ): Unit = addAtom { treeifyLeaf(value, null ) }
141
+ override fun encodeDouble (value : Double ): Unit = addAtom { treeifyLeaf(value, null ) }
142
+ override fun encodeChar (value : Char ): Unit = addAtom { treeifyLeaf(value, null ) }
143
+ override fun encodeString (value : String ): Unit = addAtom { treeifyLeaf(value, null ) }
144
+
145
+ override fun encodeEnum (enumDescriptor : SerialDescriptor , index : Int ): Unit = addAtom { treeifyLeaf(enumDescriptor.getElementName(index), enumDescriptor.getElementName(index) ) }
144
146
145
147
override fun beginCollection (descriptor : SerialDescriptor , collectionSize : Int ): CompositeEncoder {
146
148
return super .beginCollection(descriptor, collectionSize)
@@ -159,8 +161,9 @@ open class TreeElementEncoder private constructor (val pprinter: PPrinter<*>) :
159
161
value : T
160
162
) {
161
163
if (encodeElement(descriptor, index)) {
162
- add(descriptor.getElementName(index)) {
163
- pprinter.treeifyWith<T >(PPrinter .Treeifyable .Elem (value, serializer), escapeUnicode, showFieldNames)
164
+ val elemName = descriptor.getElementName(index)
165
+ add(elemName) {
166
+ pprinter.treeifyElement<T >(PPrinter .Treeifyable .Elem (value, serializer), it, escapeUnicode, showFieldNames)
164
167
}
165
168
}
166
169
}
0 commit comments