1 Star 0 Fork 0

木桩/wgs.ths.config.go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
renderer_flag.go 1.56 KB
一键复制 编辑 原始数据 按行查看 历史
木桩 提交于 2023-12-04 16:16 +08:00 . [v0_1][Feature] 完成基础实现
package config
import (
"fmt"
"reflect"
)
type elemFlagConfig struct {
cfgPath string
cmdPath string
flagName string
}
type RendererFlag struct {
sort int
elems []elemFlagConfig
lookup FlagLookupFunc
}
func NewRendererFlag(sort int) *RendererFlag {
return &RendererFlag{
sort: sort,
elems: make([]elemFlagConfig, 0, 8),
}
}
func (r *RendererFlag) Name() string {
return "env"
}
func (r *RendererFlag) Sort() int {
return r.sort
}
func (r *RendererFlag) Render(body reflect.Value, desc *ConfigDesc) error {
if r.lookup == nil {
return nil
}
for _, elem := range r.elems {
if err := r.parseFlagElem(body, desc, elem); err != nil {
return err
}
}
return nil
}
type FlagLookupFunc func(cmdPath string, flagName string) (string, bool)
func (r *RendererFlag) SetLookupFunc(lookup FlagLookupFunc) {
r.lookup = lookup
}
func (r *RendererFlag) parseFlagElem(body reflect.Value, desc *ConfigDesc, elem elemFlagConfig) error {
flagVal, ok := r.lookup(elem.cmdPath, elem.flagName)
if !ok {
//没设置flag, 不要了
return nil
}
rv, err := findFieldInBody(body, desc, elem.cfgPath)
if err != nil {
return err
}
if rv.Kind() == reflect.Invalid {
return nil
}
if err := setValueFromString(rv, flagVal); err != nil {
return fmt.Errorf("config: set flag [%s] value [%s] to [%s] failed: %v", elem.flagName, flagVal, elem.cfgPath, err)
}
return nil
}
func (r *RendererFlag) BindFlag(cfgPath, cmdPath, flagName string) {
elem := elemFlagConfig{
cfgPath: cfgPath,
cmdPath: cmdPath,
flagName: flagName,
}
r.elems = append(r.elems, elem)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/woodpile/wgs.ths.config.go.git
git@gitee.com:woodpile/wgs.ths.config.go.git
woodpile
wgs.ths.config.go
wgs.ths.config.go
v0.1.3

搜索帮助