read config from stdin

This commit is contained in:
ginuerzh
2025-06-28 18:09:04 +08:00
parent fe096d6e74
commit c8d905dea5
2 changed files with 22 additions and 7 deletions
+3 -2
View File
@@ -145,7 +145,7 @@ type AutherConfig struct {
type AuthConfig struct { type AuthConfig struct {
Username string `yaml:",omitempty" json:"username,omitempty"` Username string `yaml:",omitempty" json:"username,omitempty"`
Password string `yaml:",omitempty" json:"password,omitempty"` Password string `yaml:",omitempty" json:"password,omitempty"`
File string `yaml:",omitempty" json:"file,omitempty"` File string `yaml:",omitempty" json:"file,omitempty"`
} }
type SelectorConfig struct { type SelectorConfig struct {
@@ -578,7 +578,8 @@ func (c *Config) Load() error {
return v.Unmarshal(c) return v.Unmarshal(c)
} }
func (c *Config) Read(r io.Reader) error { func (c *Config) Read(r io.Reader, configType string) error {
v.SetConfigType(configType)
if err := v.ReadConfig(r); err != nil { if err := v.ReadConfig(r); err != nil {
return err return err
} }
+19 -5
View File
@@ -1,6 +1,7 @@
package parser package parser
import ( import (
"bufio"
"encoding/json" "encoding/json"
"os" "os"
"strings" "strings"
@@ -43,15 +44,28 @@ type parser struct {
func (p *parser) Parse() (*config.Config, error) { func (p *parser) Parse() (*config.Config, error) {
cfg := &config.Config{} cfg := &config.Config{}
cfgFile := p.args.CfgFile if cfgFile := strings.TrimSpace(p.args.CfgFile); cfgFile != "" {
if cfgFile != "" { if cfgFile == "-" { // stdin
cfgFile = strings.TrimSpace(cfgFile) br := bufio.NewReader(os.Stdin)
if strings.HasPrefix(cfgFile, "{") && strings.HasSuffix(cfgFile, "}") { b, err := br.Peek(1)
if err != nil {
return nil, err
}
if b[0] == '{' {
if err := cfg.Read(br, "json"); err != nil {
return nil, err
}
} else {
if err := cfg.Read(br, "yaml"); err != nil {
return nil, err
}
}
} else if strings.HasPrefix(cfgFile, "{") && strings.HasSuffix(cfgFile, "}") { // inline
if err := json.Unmarshal([]byte(cfgFile), cfg); err != nil { if err := json.Unmarshal([]byte(cfgFile), cfg); err != nil {
return nil, err return nil, err
} }
} else { } else {
if err := cfg.ReadFile(cfgFile); err != nil { if err := cfg.ReadFile(cfgFile); err != nil { // file
return nil, err return nil, err
} }
} }