// Parse returns a ConfigContainer with parsed xml config map. func (xc *Config) Parse(filename string) (config.Configer, error) { file, err := os.Open(filename) if err != nil { return nil, err } defer file.Close() x := &ConfigContainer{data: make(map[string]interface{})} content, err := ioutil.ReadAll(file) if err != nil { return nil, err } d, err := x2j.DocToMap(string(content)) if err != nil { return nil, err } x.data = config.ExpandValueEnvForMap(d["config"].(map[string]interface{})) return x, nil }
// ReadYmlReader Read yaml file to map. // if json like, use json package, unless goyaml2 package. func ReadYmlReader(path string) (cnf map[string]interface{}, err error) { f, err := os.Open(path) if err != nil { return } defer f.Close() buf, err := ioutil.ReadAll(f) if err != nil || len(buf) < 3 { return } if string(buf[0:1]) == "{" { log.Println("Look like a Json, try json umarshal") err = json.Unmarshal(buf, &cnf) if err == nil { log.Println("It is Json Map") return } } data, err := goyaml2.Read(bytes.NewBuffer(buf)) if err != nil { log.Println("Goyaml2 ERR>", string(buf), err) return } if data == nil { log.Println("Goyaml2 output nil? Pls report bug\n" + string(buf)) return } cnf, ok := data.(map[string]interface{}) if !ok { log.Println("Not a Map? >> ", string(buf), data) cnf = nil } cnf = config.ExpandValueEnvForMap(cnf) return }