1
1
package com.sksamuel.hoplite.decoder
2
2
3
3
import com.sksamuel.hoplite.ArrayNode
4
- import com.sksamuel.hoplite.fp.invalid
5
4
import com.sksamuel.hoplite.ConfigFailure
6
5
import com.sksamuel.hoplite.ConfigResult
7
6
import com.sksamuel.hoplite.DecoderContext
8
7
import com.sksamuel.hoplite.MapNode
9
- import com.sksamuel.hoplite.StringNode
10
8
import com.sksamuel.hoplite.Node
9
+ import com.sksamuel.hoplite.StringNode
10
+ import com.sksamuel.hoplite.denormalize
11
11
import com.sksamuel.hoplite.fp.flatMap
12
+ import com.sksamuel.hoplite.fp.invalid
12
13
import com.sksamuel.hoplite.fp.sequence
13
14
import kotlin.reflect.KType
14
15
import kotlin.reflect.full.isSubtypeOf
15
16
import kotlin.reflect.full.starProjectedType
16
17
import kotlin.reflect.full.withNullability
17
18
18
- class MapDecoder : AbstractUnnormalizedKeysDecoder <Map <* , * >>() {
19
+ class MapDecoder : NullHandlingDecoder <Map <* , * >> {
19
20
20
21
override fun supports (type : KType ): Boolean =
21
22
type.isSubtypeOf(Map ::class .starProjectedType) ||
22
23
type.isSubtypeOf(Map ::class .starProjectedType.withNullability(true ))
23
24
24
- override fun safeDecodeUnnormalized (node : Node , type : KType , context : DecoderContext ): ConfigResult <Map <* , * >> {
25
+ override fun safeDecode (node : Node , type : KType , context : DecoderContext ): ConfigResult <Map <* , * >> {
25
26
require(type.arguments.size == 2 )
26
27
27
28
val kType = type.arguments[0 ].type!!
@@ -32,7 +33,7 @@ class MapDecoder : AbstractUnnormalizedKeysDecoder<Map<*, *>>() {
32
33
vdecoder : Decoder <V >,
33
34
context : DecoderContext ): ConfigResult <Map <* , * >> {
34
35
35
- return node.map.entries.map { (k, v) ->
36
+ return node.denormalize(). map.entries.map { (k, v) ->
36
37
kdecoder.decode(StringNode (k, node.pos, node.path, emptyMap()), kType, context).flatMap { kk ->
37
38
vdecoder.decode(v, vType, context).map { vv ->
38
39
context.usedPaths.add(v.path)
0 commit comments