grconfig/yaml.go

62 lines
1.1 KiB
Go
Raw Permalink Normal View History

2020-04-01 10:55:07 +08:00
package grconfig
import (
"bytes"
"errors"
"gopkg.in/yaml.v2"
2020-04-03 11:21:51 +08:00
"log"
2020-04-01 10:55:07 +08:00
"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
}
2020-04-01 10:55:07 +08:00
if str, ok := target.(string); ok {
return str
} else {
if out, err := yaml.Marshal(target); err == nil {
return bytes.NewBuffer(out).String()
}
2020-04-01 10:55:07 +08:00
}
2020-04-01 10:55:07 +08:00
return ""
}
func (conf *ConfigerChannelYAML) Item(item string, t interface{}) (err error) {
chunks := strings.SplitN(item, ".", 2)
if len(chunks) == 1 {
chunks = append(chunks, "")
}
2020-04-01 10:55:07 +08:00
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{}
2020-04-03 11:21:51 +08:00
if err := yaml.Unmarshal(buf.Bytes(), &v); err != nil {
log.Println(err)
panic(err)
}
2020-04-01 10:55:07 +08:00
return v
}