mirror of
https://github.com/spf13/viper
synced 2025-05-07 20:57:18 +00:00
Adds support for merging slices
- Work allows slices to be merged by appending of src onto target
This commit is contained in:
parent
2c12c60302
commit
0353dfce59
2 changed files with 43 additions and 0 deletions
6
viper.go
6
viper.go
|
@ -1510,6 +1510,12 @@ func mergeMaps(
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
jww.TRACE.Printf("merging maps")
|
jww.TRACE.Printf("merging maps")
|
||||||
mergeMaps(sv.(map[string]interface{}), ttv, nil)
|
mergeMaps(sv.(map[string]interface{}), ttv, nil)
|
||||||
|
case []interface{}:
|
||||||
|
jww.TRACE.Printf("merging slices")
|
||||||
|
tgt[tk] = append(tgt[tk].([]interface{}), sv.([]interface{})...)
|
||||||
|
if itgt != nil {
|
||||||
|
itgt[tk] = append(itgt[tk].([]interface{}), sv.([]interface{})...)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
jww.TRACE.Printf("setting value")
|
jww.TRACE.Printf("setting value")
|
||||||
tgt[tk] = sv
|
tgt[tk] = sv
|
||||||
|
|
|
@ -1079,6 +1079,11 @@ hello:
|
||||||
- uk
|
- uk
|
||||||
- fr
|
- fr
|
||||||
- de
|
- de
|
||||||
|
list:
|
||||||
|
- one
|
||||||
|
list2:
|
||||||
|
- name: name1
|
||||||
|
value: value1
|
||||||
`)
|
`)
|
||||||
|
|
||||||
var yamlMergeExampleSrc = []byte(`
|
var yamlMergeExampleSrc = []byte(`
|
||||||
|
@ -1088,6 +1093,14 @@ hello:
|
||||||
universe:
|
universe:
|
||||||
- mw
|
- mw
|
||||||
- ad
|
- ad
|
||||||
|
list:
|
||||||
|
- two
|
||||||
|
- three
|
||||||
|
list2:
|
||||||
|
- name: name2
|
||||||
|
value: value2
|
||||||
|
- name: name3
|
||||||
|
value: value3
|
||||||
fu: bar
|
fu: bar
|
||||||
`)
|
`)
|
||||||
|
|
||||||
|
@ -1118,6 +1131,18 @@ func TestMergeConfig(t *testing.T) {
|
||||||
t.Fatalf("fu != \"\", = %s", fu)
|
t.Fatalf("fu != \"\", = %s", fu)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if list := v.GetStringSlice("list"); len(list) != 1 {
|
||||||
|
t.Fatalf("len(list) != 1, = %d", len(list))
|
||||||
|
}
|
||||||
|
|
||||||
|
list2 := []interface{}{}
|
||||||
|
if err := v.UnmarshalKey("list2", &list2); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(list2) != 1 {
|
||||||
|
t.Fatalf("len(list2) != 1, = %d", len(list2))
|
||||||
|
}
|
||||||
|
|
||||||
if err := v.MergeConfig(bytes.NewBuffer(yamlMergeExampleSrc)); err != nil {
|
if err := v.MergeConfig(bytes.NewBuffer(yamlMergeExampleSrc)); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -1145,6 +1170,18 @@ func TestMergeConfig(t *testing.T) {
|
||||||
if fu := v.GetString("fu"); fu != "bar" {
|
if fu := v.GetString("fu"); fu != "bar" {
|
||||||
t.Fatalf("fu != \"bar\", = %s", fu)
|
t.Fatalf("fu != \"bar\", = %s", fu)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if list := v.GetStringSlice("list"); len(list) != 3 {
|
||||||
|
t.Fatalf("len(list) != 3, = %d", len(list))
|
||||||
|
}
|
||||||
|
|
||||||
|
list2 = []interface{}{}
|
||||||
|
if err := v.UnmarshalKey("list2", &list2); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(list2) != 3 {
|
||||||
|
t.Fatalf("len(list2) != 3, = %d", len(list2))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMergeConfigNoMerge(t *testing.T) {
|
func TestMergeConfigNoMerge(t *testing.T) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue