github.com/wrgl/wrgl@v0.14.0/pkg/conf/fs/aggregate.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright © 2022 Wrangle Ltd 3 4 package conffs 5 6 import ( 7 "reflect" 8 9 "github.com/imdario/mergo" 10 "github.com/wrgl/wrgl/pkg/conf" 11 ) 12 13 type ptrTransformer struct { 14 } 15 16 func (t *ptrTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error { 17 if typ.Kind() == reflect.Ptr && typ.Elem().Kind() != reflect.Struct { 18 return func(dst, src reflect.Value) error { 19 if dst.CanSet() && !src.IsNil() { 20 dst.Set(src) 21 } 22 return nil 23 } 24 } 25 return nil 26 } 27 28 func (s *Store) aggregateConfig() (*conf.Config, error) { 29 localConfig, err := s.readConfig(localPath(s.rootDir)) 30 if err != nil { 31 return nil, err 32 } 33 fp, err := globalConfigPath() 34 if err != nil { 35 return nil, err 36 } 37 globalConfig, err := s.readConfig(fp) 38 if err != nil { 39 return nil, err 40 } 41 sysConfig, err := s.readConfig(systemConfigPath()) 42 if err != nil { 43 return nil, err 44 } 45 err = mergo.Merge(globalConfig, localConfig, mergo.WithOverride, mergo.WithTransformers(&ptrTransformer{})) 46 if err != nil { 47 return nil, err 48 } 49 err = mergo.Merge(sysConfig, globalConfig, mergo.WithOverride, mergo.WithTransformers(&ptrTransformer{})) 50 if err != nil { 51 return nil, err 52 } 53 return sysConfig, nil 54 }