package grconfig import ( "bytes" "errors" "gopkg.in/yaml.v2" "log" "strings" ) type ConfigerChannelYAML struct { tmp interface{} filename string adapter string } func (conf *ConfigerChannelYAML) String(item string) string { chunks := strings.SplitN(item, ".", 2) var target interface{} if len(chunks) > 1 { target = recursiveParse(chunks[1], conf.tmp) } else { target = conf.tmp } if str, ok := target.(string); ok { return str } else { if out, err := yaml.Marshal(target); err == nil { return bytes.NewBuffer(out).String() } } return "" } func (conf *ConfigerChannelYAML) Item(item string, t interface{}) (err error) { chunks := strings.SplitN(item, ".", 2) if len(chunks) == 1 { chunks = append(chunks, "") } target := recursiveParse(chunks[1], conf.tmp) if target == nil { err = errors.New("item doesn't exists") return } out, _ := yaml.Marshal(target) err = yaml.Unmarshal(out, t) return } func parseYAML(buf bytes.Buffer) interface{} { var v interface{} if err := yaml.Unmarshal(buf.Bytes(), &v); err != nil { log.Println(err) panic(err) } return v }