@@ -104,14 +104,13 @@ func mergeConfigs[T any](configs map[string]T) (map[string]T, error) {
104104 // applied per flag instead of all-or-nothing.
105105 if mf .Kind () == reflect .Struct {
106106 for j := 0 ; j < mf .NumField (); j ++ {
107- fj , pfj := mf .Field (j ), pf .Field (j )
108- if canIsNil (fj ) && fj .IsNil () && canIsNil (pfj ) && ! pfj .IsNil () {
109- fj .Set (pfj )
107+ if mf .Field (j ).IsNil () && ! pf .Field (j ).IsNil () {
108+ mf .Field (j ).Set (pf .Field (j ))
110109 }
111110 }
112111 continue
113112 }
114- if canIsNil ( mf ) && mf .IsNil () && canIsNil ( pf ) && ! pf .IsNil () {
113+ if mf .IsNil () && ! pf .IsNil () {
115114 mf .Set (pf )
116115 }
117116 }
@@ -122,24 +121,15 @@ func mergeConfigs[T any](configs map[string]T) (map[string]T, error) {
122121 return v , nil
123122 }
124123
125- for k := range configs {
126- if _ , err := mergeParent (k ); err != nil {
124+ for name := range configs {
125+ if _ , err := mergeParent (name ); err != nil {
127126 return nil , err
128127 }
129128 }
130129
131130 return mergedConfigs , nil
132131}
133132
134- func canIsNil (v reflect.Value ) bool {
135- switch v .Kind () {
136- case reflect .Chan , reflect .Func , reflect .Map , reflect .Pointer , reflect .UnsafePointer , reflect .Interface , reflect .Slice :
137- return true
138- default :
139- return false
140- }
141- }
142-
143133// Read reads given YAML files and unmarshals them into Config
144134func Read (log logging.Logger , yamlFiles []YamlFile ) (* Config , error ) {
145135 c := Config {
0 commit comments