@@ -71,39 +71,46 @@ func NewConfigFrom(from interface{}, opts ...interface{}) (*Config, error) {
7171 o (local )
7272 }
7373
74- var data [] byte
74+ var data map [ string ] interface {}
7575 var err error
7676 if bytes , ok := from .([]byte ); ok {
77- data = bytes
77+ err = yaml .Unmarshal (bytes , & data )
78+ if err != nil {
79+ return nil , err
80+ }
7881 } else if str , ok := from .(string ); ok {
79- data = []byte (str )
82+ err = yaml .Unmarshal ([]byte (str ), & data )
83+ if err != nil {
84+ return nil , err
85+ }
8086 } else if in , ok := from .(io.Reader ); ok {
8187 if closer , ok := from .(io.Closer ); ok {
8288 defer closer .Close ()
8389 }
84- data , err = ioutil .ReadAll (in )
90+ fData , err : = ioutil .ReadAll (in )
8591 if err != nil {
8692 return nil , err
8793 }
94+ err = yaml .Unmarshal (fData , & data )
95+ if err != nil {
96+ return nil , err
97+ }
98+ } else if contents , ok := from .(map [string ]interface {}); ok {
99+ data = contents
88100 } else {
89101 c , err := ucfg .NewFrom (from , ucfgOpts ... )
90102 return newConfigFrom (c ), err
91103 }
92104
93- var c map [string ]interface {}
94- err = yaml .Unmarshal (data , & c )
95- if err != nil {
96- return nil , err
97- }
98105 skippedKeys := map [string ]interface {}{}
99106 for _ , skip := range local .skipKeys {
100- val , ok := c [skip ]
107+ val , ok := data [skip ]
101108 if ok {
102109 skippedKeys [skip ] = val
103- delete (c , skip )
110+ delete (data , skip )
104111 }
105112 }
106- cfg , err := ucfg .NewFrom (c , ucfgOpts ... )
113+ cfg , err := ucfg .NewFrom (data , ucfgOpts ... )
107114 if err != nil {
108115 return nil , err
109116 }
0 commit comments