feat(goctl): Support gateway sample generation (#3049)
This commit is contained in:
101
tools/goctl/internal/flags/flags.go
Normal file
101
tools/goctl/internal/flags/flags.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package flags
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/zeromicro/go-zero/tools/goctl/util"
|
||||
)
|
||||
|
||||
//go:embed default_en.json
|
||||
var defaultEnFlagConfig []byte
|
||||
|
||||
type ConfigLoader struct {
|
||||
conf map[string]any
|
||||
}
|
||||
|
||||
func (cl *ConfigLoader) ReadConfig(in io.Reader) error {
|
||||
return json.NewDecoder(in).Decode(&cl.conf)
|
||||
}
|
||||
|
||||
func (cl *ConfigLoader) GetString(key string) string {
|
||||
keyList := strings.FieldsFunc(key, func(r rune) bool {
|
||||
return r == '.'
|
||||
})
|
||||
var conf = cl.conf
|
||||
for idx, k := range keyList {
|
||||
val, ok := conf[k]
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
if idx < len(keyList)-1 {
|
||||
conf, ok = val.(map[string]any)
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
return fmt.Sprint(val)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type Flags struct {
|
||||
loader *ConfigLoader
|
||||
}
|
||||
|
||||
func MustLoad() *Flags {
|
||||
loader := &ConfigLoader{
|
||||
conf: map[string]any{},
|
||||
}
|
||||
if err := loader.ReadConfig(bytes.NewBuffer(defaultEnFlagConfig)); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
return &Flags{
|
||||
loader: loader,
|
||||
}
|
||||
}
|
||||
|
||||
func setTestData(t *testing.T, data []byte) {
|
||||
origin := defaultEnFlagConfig
|
||||
defaultEnFlagConfig = data
|
||||
t.Cleanup(func() {
|
||||
defaultEnFlagConfig = origin
|
||||
})
|
||||
}
|
||||
|
||||
func (f *Flags) Get(key string) (string, error) {
|
||||
value := f.loader.GetString(key)
|
||||
for util.IsTemplateVariable(value) {
|
||||
value = util.TemplateVariable(value)
|
||||
if value == key {
|
||||
return "", fmt.Errorf("the variable can not be self: %q", key)
|
||||
}
|
||||
return f.Get(value)
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
var flags *Flags
|
||||
|
||||
func Get(key string) string {
|
||||
if flags == nil {
|
||||
flags = MustLoad()
|
||||
}
|
||||
|
||||
v, err := flags.Get(key)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return ""
|
||||
}
|
||||
|
||||
return v
|
||||
}
|
||||
Reference in New Issue
Block a user