diff --git a/config/config.go b/config/config.go index 7e05b63..34b4402 100644 --- a/config/config.go +++ b/config/config.go @@ -61,8 +61,9 @@ func (cfg *base) Children() []lib.Config { return cfg.children } -func (cfg *base) Add(child lib.Config) { - cfg.children = append(cfg.children, child) +func (cfg *base) Add(c ...lib.Config) lib.Config { + cfg.children = append(cfg.children, c...) + return cfg } // implementation-specific methods and functions @@ -77,10 +78,10 @@ func (cfg *base) WithMessageHandler(hdlr lib.MessageHandler) *base { return cfg } -func (cfg *base) AddAction(pattern string, spec lib.ActionSpec) { - act := ActionConfig(pattern, nil) - act.specs = append(act.specs, spec) +func (cfg *base) AddAction(pattern string, specs ...lib.ActionSpec) lib.Config { + act := ActionConfig(pattern, specs) cfg.actions = append(cfg.actions, act) + return cfg } func Base(name string, starter lib.StartProc) *base { diff --git a/examples/demo/etc/etc.go b/examples/demo/etc/etc.go index c0d5764..b1fb27d 100644 --- a/examples/demo/etc/etc.go +++ b/examples/demo/etc/etc.go @@ -10,7 +10,7 @@ import ( func Config() lib.Config { ovr := Overrides().Use b := config.Base - cfg := app.Cfg{ + app_c := app.Cfg{ BaseCfg: b("dummy", app.Start), Home: ovr(".", HOME), AppType: "standard", @@ -18,11 +18,11 @@ func Config() lib.Config { Logfile: ovr("log/scopes.log", LOGFILE), }, } - cfg.Add(config.Cfg{ + app_c.Add(config.Cfg{ BaseCfg: b("config", config.Start), ConfigFormat: "etc", }) - return &cfg + return &app_c } // collect here the names of fields that may be overridden via diff --git a/examples/demo/main.go b/examples/demo/main.go index 3283ef5..76cecf9 100644 --- a/examples/demo/main.go +++ b/examples/demo/main.go @@ -1,18 +1,11 @@ package main import ( - "fmt" - "demo/etc" "git.sr.ht/~cco/go-scopes" - "git.sr.ht/~cco/go-scopes/app" ) func main() { - cfg := etc.Config() - fmt.Println(cfg.Name()) - appCfg := cfg.(*app.Cfg) - fmt.Println(appCfg.Home) - scopes.RunApp(cfg) + scopes.RunApp(etc.Config()) } diff --git a/lib/action/action.go b/lib/action/action.go index a33206c..3ae4170 100644 --- a/lib/action/action.go +++ b/lib/action/action.go @@ -7,6 +7,8 @@ import ( "git.sr.ht/~cco/go-scopes/lib/message" ) +type BaseSpec = baseSpec + type baseSpec struct { handler lib.ActionHandler receivers []string diff --git a/lib/lib.go b/lib/lib.go index da78097..a041ce5 100644 --- a/lib/lib.go +++ b/lib/lib.go @@ -23,9 +23,9 @@ type Config interface { Step() StepProc MessageHandler() MessageHandler Actions() []ActionConfig - AddAction(string, ActionSpec) + AddAction(string, ...ActionSpec) Config Children() []Config - Add(Config) + Add(...Config) Config } type Services map[string]Context diff --git a/tests/etc/etc.go b/tests/etc/etc.go index e0d9b43..ae3adf2 100644 --- a/tests/etc/etc.go +++ b/tests/etc/etc.go @@ -14,7 +14,7 @@ func Config() lib.Config { ovr := Overrides().Use b := config.Base - cfg := app.Cfg{ + app_c := app.Cfg{ BaseCfg: b("testing", testing.Start), Home: ovr(".", HOME), AppType: "standard", @@ -22,21 +22,21 @@ func Config() lib.Config { Logfile: ovr("log/scopes.log", LOGFILE), }, } - cfg.AddAction("demo", + app_c.AddAction("demo", action.Base(action.Forward, []string{"test-receiver"})) - cfg_config := config.Cfg{ + config_c := config.Cfg{ BaseCfg: b("config", config.Start), ConfigFormat: "etc", } - cfg.Add(cfg_config) + app_c.Add(config_c) - cfg_test_rcvr := b("test-receiver", core.Start) - cfg_test_rcvr.AddAction("demo", action.Base(AH_Receiver, nil)) - cfg.Add(cfg_test_rcvr) + test_rcvr := b("test-receiver", core.Start) + test_rcvr.AddAction("demo", action.Base(AH_Receiver, nil)) + app_c.Add(test_rcvr) - return &cfg + return &app_c } // register action handlers from ..._test.go here.