File tree Expand file tree Collapse file tree 2 files changed +23
-5
lines changed Expand file tree Collapse file tree 2 files changed +23
-5
lines changed Original file line number Diff line number Diff line change 1
1
package source
2
2
3
- import "fmt"
3
+ import (
4
+ "fmt"
5
+ )
4
6
5
7
// NewMultiSourcer create source that is a collection of value sources.
6
8
func NewMultiSourcer (vss ... Getter ) (* Source , error ) {
7
9
vars := map [string ]interface {}{}
8
10
9
11
for _ , s := range vss {
10
12
for k , v := range s .Get () {
11
- if _ , ok := vars [k ]; ok {
12
- return nil , fmt .Errorf ("duplicated key '%v'" , k )
13
+ if prev , ok := vars [k ]; ok {
14
+ switch p := prev .(type ) {
15
+ case interface {}:
16
+ vars [k ] = []interface {}{p , v }
17
+ case []interface {}:
18
+ vars [k ] = append (p , v )
19
+ default :
20
+ return nil , fmt .Errorf ("multy sources merging failed" )
21
+ }
22
+
23
+ continue
24
+
13
25
}
14
26
vars [k ] = v
15
27
}
Original file line number Diff line number Diff line change @@ -56,8 +56,14 @@ func TestMultiSourcer(t *testing.T) {
56
56
"key1" : "var3" ,
57
57
}),
58
58
},
59
- nil ,
60
- false ,
59
+ map [string ]interface {}{
60
+ "key1" : []interface {}{
61
+ "var1" ,
62
+ "var3" ,
63
+ },
64
+ "key2" : "var2" ,
65
+ },
66
+ true ,
61
67
},
62
68
}
63
69
You can’t perform that action at this time.
0 commit comments