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