provide minimal default config, + some clean-up and standardization

This commit is contained in:
Helmut Merz 2023-07-24 17:58:56 +02:00
parent 0f054c36e8
commit e21499234b
10 changed files with 82 additions and 72 deletions

View file

@ -7,38 +7,75 @@ import (
lib "git.sr.ht/~cco/go-scopes" lib "git.sr.ht/~cco/go-scopes"
) )
type Cfg struct { // default config
*BaseCfg
ConfigFormat string
}
func Start(ctx lib.Context) { type DefaultCfg = defcfg
}
// definitions type defcfg struct {
type BaseCfg = base
type base struct {
name string name string
starter lib.StartProc
step lib.StepProc
msgHandler lib.MessageHandler
doneHandler lib.StepProc
actions []lib.ActionConfig actions []lib.ActionConfig
children []lib.Config children []lib.Config
} }
// lib.Config implementation func (cfg *defcfg) Name() string {
func (cfg *base) Name() string {
return cfg.name return cfg.name
} }
func (cfg *base) SetName(n string) { func (cfg *defcfg) SetName(n string) {
cfg.name = n cfg.name = n
} }
func (cfg *defcfg) Actions() []lib.ActionConfig {
return cfg.actions
}
func (cfg *defcfg) AddAction(pattern string, specs ...lib.ActionSpec) {
act := ActionConfig(pattern, specs)
cfg.actions = append(cfg.actions, act)
}
func (cfg *defcfg) Children() []lib.Config {
return cfg.children
}
func (cfg *defcfg) Add(c ...lib.Config) {
cfg.children = append(cfg.children, c...)
}
func (cfg *defcfg) Starter() lib.StartProc {
return DefaultStart
}
func (cfg *defcfg) Step() lib.StepProc {
return DefaultStep
}
func (cfg *defcfg) MessageHandler() lib.MessageHandler {
return DefaultMsgHandler
}
func (cfg *defcfg) DoneHandler() lib.StepProc {
return DefaultDoneHandler
}
func Default(name string) lib.Config {
return &defcfg{
name: name,
}
}
// base config
type BaseCfg = base
type base struct {
*defcfg
starter lib.StartProc
step lib.StepProc
msgHandler lib.MessageHandler
doneHandler lib.StepProc
}
func (cfg *base) Starter() lib.StartProc { func (cfg *base) Starter() lib.StartProc {
return cfg.starter return cfg.starter
} }
@ -55,19 +92,6 @@ func (cfg *base) DoneHandler() lib.StepProc {
return cfg.doneHandler return cfg.doneHandler
} }
func (cfg *base) Actions() []lib.ActionConfig {
return cfg.actions
}
func (cfg *base) Children() []lib.Config {
return cfg.children
}
func (cfg *base) Add(c ...lib.Config) lib.Config {
cfg.children = append(cfg.children, c...)
return cfg
}
// implementation-specific methods and functions // implementation-specific methods and functions
func (cfg *base) WithStep(step lib.StepProc) *base { func (cfg *base) WithStep(step lib.StepProc) *base {
@ -85,24 +109,20 @@ func (cfg *base) WithDoneHandler(hdlr lib.StepProc) *base {
return cfg return cfg
} }
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 { func Base(name string, starter lib.StartProc) *base {
return &base{ return &base{
defcfg: &defcfg{
name: name, name: name,
},
starter: starter, starter: starter,
step: DefaultStep, step: DefaultStep,
msgHandler: DefaultMsgHandler, msgHandler: DefaultMsgHandler,
doneHandler: DefaultDoneHandler, doneHandler: DefaultDoneHandler,
actions: nil,
} }
} }
// will be set by core.init() // will be set by core.init()
var DefaultStart lib.StartProc
var DefaultStep lib.StepProc var DefaultStep lib.StepProc
var DefaultMsgHandler lib.MessageHandler var DefaultMsgHandler lib.MessageHandler
var DefaultDoneHandler lib.StepProc var DefaultDoneHandler lib.StepProc

View file

@ -46,7 +46,8 @@ func HandleDone(ctx lib.Context) bool {
} }
func init() { func init() {
config.DefaultStep = Step // avoid import cycle config.DefaultStart = Start // avoid import cycle
config.DefaultStep = Step
config.DefaultMsgHandler = HandleMessage config.DefaultMsgHandler = HandleMessage
config.DefaultDoneHandler = HandleDone config.DefaultDoneHandler = HandleDone
} }

View file

@ -10,6 +10,7 @@ import (
func Config() lib.Config { func Config() lib.Config {
ovr := Overrides().Use ovr := Overrides().Use
b := config.Base b := config.Base
app_c := app.Cfg{ app_c := app.Cfg{
BaseCfg: b("dummy", app.Start), BaseCfg: b("dummy", app.Start),
Home: ovr(".", HOME), Home: ovr(".", HOME),
@ -18,10 +19,7 @@ func Config() lib.Config {
Logfile: ovr("log/scopes.log", LOGFILE), Logfile: ovr("log/scopes.log", LOGFILE),
}, },
} }
app_c.Add(config.Cfg{
BaseCfg: b("config", config.Start),
ConfigFormat: "etc",
})
return &app_c return &app_c
} }

View file

@ -3,15 +3,14 @@ package matrix
import ( import (
lib "git.sr.ht/~cco/go-scopes" lib "git.sr.ht/~cco/go-scopes"
"git.sr.ht/~cco/go-scopes/config" "git.sr.ht/~cco/go-scopes/config"
"git.sr.ht/~cco/go-scopes/core"
"git.sr.ht/~cco/go-scopes/core/action" "git.sr.ht/~cco/go-scopes/core/action"
"git.sr.ht/~cco/go-scopes/core/message" "git.sr.ht/~cco/go-scopes/core/message"
) )
func Start(ctx lib.Context) { func DefaultConfig(name string) lib.Config {
cfg := ctx.Config() cfg := config.Default(name)
cfg.AddAction("create", action.Base(create)) cfg.AddAction("create", action.Base(create))
core.Start(ctx) return cfg
} }
func create(act lib.Action) bool { func create(act lib.Action) bool {
@ -24,7 +23,7 @@ func create(act lib.Action) bool {
} }
func createCell(ctx lib.Context) lib.Context { func createCell(ctx lib.Context) lib.Context {
cfg := config.Base("", core.Start) cfg := DefaultConfig("")
cctx := ctx.ChildContext(cfg) cctx := ctx.ChildContext(cfg)
cfg.Starter()(cctx) cfg.Starter()(cctx)
return cctx return cctx

View file

@ -103,9 +103,9 @@ type Config interface {
MessageHandler() MessageHandler MessageHandler() MessageHandler
DoneHandler() StepProc DoneHandler() StepProc
Actions() []ActionConfig Actions() []ActionConfig
AddAction(string, ...ActionSpec) Config AddAction(string, ...ActionSpec)
Children() []Config Children() []Config
Add(...Config) Config Add(...Config)
} }
type ActionConfig interface { type ActionConfig interface {

View file

@ -71,9 +71,9 @@ func ActionTest(t *testing.T) {
return true return true
} }
} }
cfg := config.Base("testing", core.None). cfg := config.Base("testing", core.None)
AddAction("start", action.Base(hdlrGen("started"))). cfg.AddAction("start", action.Base(hdlrGen("started")))
AddAction("scopes|doit|task", action.Base(hdlrGen("done"))) cfg.AddAction("scopes|doit|task", action.Base(hdlrGen("done")))
ctx := context.AppContext(cfg) ctx := context.AppContext(cfg)
lib.HandleMsg(ctx, message.SimpleMessage("start")) lib.HandleMsg(ctx, message.SimpleMessage("start"))
t.AssertEqual(result.data, "started") t.AssertEqual(result.data, "started")

View file

@ -27,11 +27,6 @@ func Config() lib.Config {
} }
app_c.AddAction("demo", action.Base(action.Forward, "test-receiver")) app_c.AddAction("demo", action.Base(action.Forward, "test-receiver"))
config_c := &config.Cfg{
BaseCfg: b("config", config.Start),
ConfigFormat: "etc",
}
server_c := &server.Cfg{ server_c := &server.Cfg{
BaseCfg: b("server", server.Start), BaseCfg: b("server", server.Start),
Port: ovr("8123", SERVER_PORT), Port: ovr("8123", SERVER_PORT),
@ -43,10 +38,10 @@ func Config() lib.Config {
} }
test_client.AddAction("demo", action.Base(client.Send)) test_client.AddAction("demo", action.Base(client.Send))
test_rcvr := b("test-receiver", core.Start). test_rcvr := b("test-receiver", core.Start)
AddAction("demo", action.Base(AH_Receiver)) test_rcvr.AddAction("demo", action.Base(AH_Receiver))
app_c.Add(config_c, server_c, test_client, test_rcvr) app_c.Add(server_c, test_client, test_rcvr)
return app_c return app_c
} }

View file

@ -5,7 +5,6 @@ import (
"git.sr.ht/~cco/go-scopes/app" "git.sr.ht/~cco/go-scopes/app"
"git.sr.ht/~cco/go-scopes/common/testing" "git.sr.ht/~cco/go-scopes/common/testing"
"git.sr.ht/~cco/go-scopes/config" "git.sr.ht/~cco/go-scopes/config"
"git.sr.ht/~cco/go-scopes/core"
"git.sr.ht/~cco/go-scopes/core/action" "git.sr.ht/~cco/go-scopes/core/action"
"git.sr.ht/~cco/go-scopes/logging" "git.sr.ht/~cco/go-scopes/logging"
"git.sr.ht/~cco/go-scopes/matrix" "git.sr.ht/~cco/go-scopes/matrix"
@ -23,10 +22,10 @@ func ConfigMx() lib.Config {
} }
app_c.AddAction("demo", action.Base(action.Forward, "test-receiver")) app_c.AddAction("demo", action.Base(action.Forward, "test-receiver"))
test_rcvr := b("test-receiver", core.Start). test_rcvr := config.Default("test-receiver")
AddAction("demo", action.Base(AH_MxReceiver)) test_rcvr.AddAction("demo", action.Base(AH_MxReceiver))
cell_0 := b("cell-0", matrix.Start) cell_0 := matrix.DefaultConfig("cell-0")
app_c.Add(cell_0, test_rcvr) app_c.Add(cell_0, test_rcvr)

View file

@ -22,9 +22,9 @@ func TestMatrixApp(tb *tbase.T) {
func MxTest(t *testing.T) { func MxTest(t *testing.T) {
ctx := t.Ctx ctx := t.Ctx
t.AssertEqual(len(ctx.Services()), 3) t.AssertEqual(len(ctx.Services()), 3)
rcvr := message.SimpleAddress("cell-0") rcvr := ctx.Services()["cell-0"]
msg := message.SimpleMessage("create") msg := message.SimpleMessage("create").WithSender(rcvr)
lib.Send(ctx, rcvr, msg) rcvr.Send(msg)
} }
// action handlers // action handlers

View file

@ -24,7 +24,7 @@ func TestScopesApp(tb *tbase.T) {
func AppTest(t *testing.T) { func AppTest(t *testing.T) {
ctx := t.Ctx ctx := t.Ctx
t.AssertEqual(len(ctx.Services()), 5) t.AssertEqual(len(ctx.Services()), 4)
} }
func ConfigTest(t *testing.T) { func ConfigTest(t *testing.T) {
@ -32,8 +32,6 @@ func ConfigTest(t *testing.T) {
t.AssertEqual(cfg.Name(), "testing") t.AssertEqual(cfg.Name(), "testing")
appCfg := cfg.(*app.Cfg) appCfg := cfg.(*app.Cfg)
t.AssertEqual(appCfg.Home, ".") t.AssertEqual(appCfg.Home, ".")
confCtx := t.Ctx.Services()["config"]
t.AssertEqual(confCtx.Config().Name(), "config")
} }
func SendTest(t *testing.T) { func SendTest(t *testing.T) {