コード例 #1
0
ファイル: conf.go プロジェクト: grr89/hrkb
//Parses Config to struct with beego AppConfig
func ParseConfig(beeConf config.ConfigContainer, obj interface{}) error {

	val := reflect.ValueOf(obj)

	if !val.CanAddr() && val.Kind() != reflect.Ptr {
		return errors.New(NOT_PTR)
	}

	val = val.Elem()
	tp := val.Type()

	for i := 0; i < val.NumField(); i++ {
		//Get Config tag
		tag := tp.Field(i).Tag.Get(CONF_TAG)

		if tag == "" {
			continue
		}

		v := val.Field(i)
		//Type casting
		switch v.Interface().(type) {
		case bool:
			b, err := beeConf.Bool(tag)

			if err != nil {
				return err
			}

			v.SetBool(b)
		case int, int64:
			b, err := beeConf.Int(tag)

			if err != nil {
				return err
			}
			v.SetInt(int64(b))
		case float64:
			b, err := beeConf.Float(tag)

			if err != nil {
				return err
			}
			v.SetFloat(b)
		case string:
			v.SetString(beeConf.String(tag))
		default:
			return errors.New(UNSUPPORTED_TYPE)
		}
	}
	return nil
}