mcfg: made SourceCLI and SourceEnv be pointers
This commit is contained in:
parent
7752b569c3
commit
a596306d9e
6
m/m.go
6
m/m.go
@ -28,7 +28,7 @@ func ProcessContext() context.Context {
|
||||
ctx := context.Background()
|
||||
|
||||
// embed confuration source which should be used into the context.
|
||||
ctx = context.WithValue(ctx, cfgSrcKey(0), mcfg.Source(mcfg.SourceCLI{}))
|
||||
ctx = context.WithValue(ctx, cfgSrcKey(0), mcfg.Source(new(mcfg.SourceCLI)))
|
||||
|
||||
// set up log level handling
|
||||
logger := mlog.NewLogger()
|
||||
@ -57,8 +57,8 @@ func ServiceContext() context.Context {
|
||||
|
||||
// services expect to use many different configuration sources
|
||||
ctx = context.WithValue(ctx, cfgSrcKey(0), mcfg.Source(mcfg.Sources{
|
||||
mcfg.SourceEnv{},
|
||||
mcfg.SourceCLI{},
|
||||
new(mcfg.SourceEnv),
|
||||
new(mcfg.SourceCLI),
|
||||
}))
|
||||
|
||||
// TODO set up the debug endpoint.
|
||||
|
@ -53,7 +53,7 @@ const (
|
||||
)
|
||||
|
||||
// Parse implements the method for the Source interface
|
||||
func (cli SourceCLI) Parse(params []Param) ([]ParamValue, error) {
|
||||
func (cli *SourceCLI) Parse(params []Param) ([]ParamValue, error) {
|
||||
args := cli.Args
|
||||
if cli.Args == nil {
|
||||
args = os.Args[1:]
|
||||
@ -137,7 +137,7 @@ func (cli SourceCLI) Parse(params []Param) ([]ParamValue, error) {
|
||||
return pvs, nil
|
||||
}
|
||||
|
||||
func (cli SourceCLI) cliParams(params []Param) (map[string]Param, error) {
|
||||
func (cli *SourceCLI) cliParams(params []Param) (map[string]Param, error) {
|
||||
m := map[string]Param{}
|
||||
for _, p := range params {
|
||||
key := strings.Join(append(mctx.Path(p.Context), p.Name), cliKeyJoin)
|
||||
@ -146,7 +146,7 @@ func (cli SourceCLI) cliParams(params []Param) (map[string]Param, error) {
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (cli SourceCLI) printHelp(w io.Writer, pM map[string]Param) {
|
||||
func (cli *SourceCLI) printHelp(w io.Writer, pM map[string]Param) {
|
||||
type pEntry struct {
|
||||
arg string
|
||||
Param
|
||||
|
@ -26,7 +26,7 @@ func TestSourceCLIHelp(t *T) {
|
||||
buf := new(bytes.Buffer)
|
||||
pM, err := src.cliParams(collectParams(ctx))
|
||||
require.NoError(t, err)
|
||||
SourceCLI{}.printHelp(buf, pM)
|
||||
new(SourceCLI).printHelp(buf, pM)
|
||||
|
||||
exp := `
|
||||
--baz2 (Required)
|
||||
@ -49,7 +49,7 @@ func TestSourceCLIHelp(t *T) {
|
||||
func TestSourceCLI(t *T) {
|
||||
type state struct {
|
||||
srcCommonState
|
||||
SourceCLI
|
||||
*SourceCLI
|
||||
}
|
||||
|
||||
type params struct {
|
||||
@ -61,7 +61,9 @@ func TestSourceCLI(t *T) {
|
||||
Init: func() mchk.State {
|
||||
var s state
|
||||
s.srcCommonState = newSrcCommonState()
|
||||
s.SourceCLI.Args = make([]string, 0, 16)
|
||||
s.SourceCLI = &SourceCLI{
|
||||
Args: make([]string, 0, 16),
|
||||
}
|
||||
return s
|
||||
},
|
||||
Next: func(ss mchk.State) mchk.Action {
|
||||
@ -111,9 +113,11 @@ func TestSourceCLITailCallback(t *T) {
|
||||
ctx, _ = WithBool(ctx, "bar", "")
|
||||
|
||||
var tail []string
|
||||
src := SourceCLI{TailCallback: func(gotTail []string) {
|
||||
src := &SourceCLI{
|
||||
TailCallback: func(gotTail []string) {
|
||||
tail = gotTail
|
||||
}}
|
||||
},
|
||||
}
|
||||
|
||||
type testCase struct {
|
||||
args []string
|
||||
|
@ -32,7 +32,7 @@ type SourceEnv struct {
|
||||
Prefix string
|
||||
}
|
||||
|
||||
func (env SourceEnv) expectedName(path []string, name string) string {
|
||||
func (env *SourceEnv) expectedName(path []string, name string) string {
|
||||
out := strings.Join(append(path, name), "_")
|
||||
if env.Prefix != "" {
|
||||
out = env.Prefix + "_" + out
|
||||
@ -43,7 +43,7 @@ func (env SourceEnv) expectedName(path []string, name string) string {
|
||||
}
|
||||
|
||||
// Parse implements the method for the Source interface
|
||||
func (env SourceEnv) Parse(params []Param) ([]ParamValue, error) {
|
||||
func (env *SourceEnv) Parse(params []Param) ([]ParamValue, error) {
|
||||
kvs := env.Env
|
||||
if kvs == nil {
|
||||
kvs = os.Environ()
|
||||
|
@ -11,7 +11,7 @@ import (
|
||||
func TestSourceEnv(t *T) {
|
||||
type state struct {
|
||||
srcCommonState
|
||||
SourceEnv
|
||||
*SourceEnv
|
||||
}
|
||||
|
||||
type params struct {
|
||||
@ -22,7 +22,9 @@ func TestSourceEnv(t *T) {
|
||||
Init: func() mchk.State {
|
||||
var s state
|
||||
s.srcCommonState = newSrcCommonState()
|
||||
s.SourceEnv.Env = make([]string, 0, 16)
|
||||
s.SourceEnv = &SourceEnv{
|
||||
Env: make([]string, 0, 16),
|
||||
}
|
||||
return s
|
||||
},
|
||||
Next: func(ss mchk.State) mchk.Action {
|
||||
|
@ -17,7 +17,7 @@ func TestPopulate(t *T) {
|
||||
ctxChild, c := WithInt(ctxChild, "c", 0, "")
|
||||
ctx = mctx.WithChild(ctx, ctxChild)
|
||||
|
||||
err := Populate(ctx, SourceCLI{
|
||||
err := Populate(ctx, &SourceCLI{
|
||||
Args: []string{"--a=1", "--foo-b=2"},
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
@ -34,12 +34,12 @@ func TestPopulate(t *T) {
|
||||
ctxChild, c := WithRequiredInt(ctxChild, "c", "")
|
||||
ctx = mctx.WithChild(ctx, ctxChild)
|
||||
|
||||
err := Populate(ctx, SourceCLI{
|
||||
err := Populate(ctx, &SourceCLI{
|
||||
Args: []string{"--a=1", "--foo-b=2"},
|
||||
})
|
||||
assert.Error(t, err)
|
||||
|
||||
err = Populate(ctx, SourceCLI{
|
||||
err = Populate(ctx, &SourceCLI{
|
||||
Args: []string{"--a=1", "--foo-b=2", "--foo-c=3"},
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
@ -160,8 +160,8 @@ func TestSources(t *T) {
|
||||
ctx, c := WithRequiredInt(ctx, "c", "")
|
||||
|
||||
err := Populate(ctx, Sources{
|
||||
SourceCLI{Args: []string{"--a=1", "--b=666"}},
|
||||
SourceEnv{Env: []string{"B=2", "C=3"}},
|
||||
&SourceCLI{Args: []string{"--a=1", "--b=666"}},
|
||||
&SourceEnv{Env: []string{"B=2", "C=3"}},
|
||||
})
|
||||
massert.Require(t,
|
||||
massert.Nil(err),
|
||||
|
@ -50,7 +50,7 @@ func Run(ctx context.Context, t *testing.T, body func()) {
|
||||
env = append(env, tup[0]+"="+tup[1])
|
||||
}
|
||||
|
||||
if err := mcfg.Populate(ctx, mcfg.SourceEnv{Env: env}); err != nil {
|
||||
if err := mcfg.Populate(ctx, &mcfg.SourceEnv{Env: env}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if err := mrun.Start(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
|
Loading…
Reference in New Issue
Block a user