...
1 package javaproperties
2
3 import (
4 "strings"
5
6 "github.com/spf13/cast"
7 )
8
9
10
11
12
13
14
15
16
17
18 func deepSearch(m map[string]any, path []string) map[string]any {
19 for _, k := range path {
20 m2, ok := m[k]
21 if !ok {
22
23
24 m3 := make(map[string]any)
25 m[k] = m3
26 m = m3
27 continue
28 }
29 m3, ok := m2.(map[string]any)
30 if !ok {
31
32
33 m3 = make(map[string]any)
34 m[k] = m3
35 }
36
37 m = m3
38 }
39 return m
40 }
41
42
43
44
45 func flattenAndMergeMap(shadow, m map[string]any, prefix, delimiter string) map[string]any {
46 if shadow != nil && prefix != "" && shadow[prefix] != nil {
47
48 return shadow
49 }
50 if shadow == nil {
51 shadow = make(map[string]any)
52 }
53
54 var m2 map[string]any
55 if prefix != "" {
56 prefix += delimiter
57 }
58 for k, val := range m {
59 fullKey := prefix + k
60 switch val := val.(type) {
61 case map[string]any:
62 m2 = val
63 case map[any]any:
64 m2 = cast.ToStringMap(val)
65 default:
66
67 shadow[strings.ToLower(fullKey)] = val
68 continue
69 }
70
71 shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter)
72 }
73 return shadow
74 }
75
View as plain text