From b6325392a879cf6cf4c992e6a3eb96c0c154a9c3 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 21 Jul 2023 10:12:20 +0200 Subject: [PATCH] rename lib to core; move lib code (mainly interfaces) to top-level scopes package --- app/app.go | 6 +- client/client.go | 2 +- common/testing/testing.go | 6 +- config/config.go | 2 +- {lib => core}/action/action.go | 4 +- {lib => core}/context/appcontext.go | 2 +- {lib => core}/context/context.go | 2 +- {lib/core => core}/core.go | 4 +- {lib => core}/message/address.go | 2 +- {lib => core}/message/message.go | 2 +- examples/demo/etc/etc.go | 2 +- lib/lib.go | 137 ---------------------------- logging/event.go | 2 +- logging/logging.go | 2 +- scopes.go | 136 +++++++++++++++++++++++++++ server/logger.go | 2 +- server/server.go | 4 +- tests/{lib_test.go => core_test.go} | 12 +-- tests/etc/etc.go | 6 +- tests/scopes_test.go | 4 +- 20 files changed, 169 insertions(+), 170 deletions(-) rename {lib => core}/action/action.go (95%) rename {lib => core}/context/appcontext.go (96%) rename {lib => core}/context/context.go (98%) rename {lib/core => core}/core.go (93%) rename {lib => core}/message/address.go (96%) rename {lib => core}/message/message.go (98%) delete mode 100644 lib/lib.go rename tests/{lib_test.go => core_test.go} (92%) diff --git a/app/app.go b/app/app.go index 86df15c..23e1e1e 100644 --- a/app/app.go +++ b/app/app.go @@ -5,10 +5,10 @@ import ( "os/signal" "syscall" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/context" - "git.sr.ht/~cco/go-scopes/lib/message" + "git.sr.ht/~cco/go-scopes/core/context" + "git.sr.ht/~cco/go-scopes/core/message" "git.sr.ht/~cco/go-scopes/logging" ) diff --git a/client/client.go b/client/client.go index 28a6df3..9e3bea8 100644 --- a/client/client.go +++ b/client/client.go @@ -8,8 +8,8 @@ import ( "net/url" "strings" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" "git.sr.ht/~cco/go-scopes/logging" "golang.org/x/net/publicsuffix" ) diff --git a/common/testing/testing.go b/common/testing/testing.go index 777beb9..d301d37 100644 --- a/common/testing/testing.go +++ b/common/testing/testing.go @@ -10,10 +10,10 @@ import ( "testing" "time" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/app" - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/context" - "git.sr.ht/~cco/go-scopes/lib/message" + "git.sr.ht/~cco/go-scopes/core/context" + "git.sr.ht/~cco/go-scopes/core/message" "git.sr.ht/~cco/go-scopes/logging" ) diff --git a/config/config.go b/config/config.go index eb6c9f8..0adfd59 100644 --- a/config/config.go +++ b/config/config.go @@ -4,7 +4,7 @@ import ( "os" "strings" - "git.sr.ht/~cco/go-scopes/lib" + lib "git.sr.ht/~cco/go-scopes" ) type Cfg struct { diff --git a/lib/action/action.go b/core/action/action.go similarity index 95% rename from lib/action/action.go rename to core/action/action.go index 1e02363..47bafd7 100644 --- a/lib/action/action.go +++ b/core/action/action.go @@ -1,8 +1,8 @@ package action import ( - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/message" + lib "git.sr.ht/~cco/go-scopes" + "git.sr.ht/~cco/go-scopes/core/message" "git.sr.ht/~cco/go-scopes/logging" ) diff --git a/lib/context/appcontext.go b/core/context/appcontext.go similarity index 96% rename from lib/context/appcontext.go rename to core/context/appcontext.go index 3750aab..f65d383 100644 --- a/lib/context/appcontext.go +++ b/core/context/appcontext.go @@ -3,7 +3,7 @@ package context import ( "sync" - "git.sr.ht/~cco/go-scopes/lib" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/logging" ) diff --git a/lib/context/context.go b/core/context/context.go similarity index 98% rename from lib/context/context.go rename to core/context/context.go index 5953b7c..ff25c0a 100644 --- a/lib/context/context.go +++ b/core/context/context.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "git.sr.ht/~cco/go-scopes/lib" + lib "git.sr.ht/~cco/go-scopes" ) type Context = lib.Context diff --git a/lib/core/core.go b/core/core.go similarity index 93% rename from lib/core/core.go rename to core/core.go index d032d8e..ce418ad 100644 --- a/lib/core/core.go +++ b/core/core.go @@ -1,9 +1,9 @@ package core import ( + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/action" + "git.sr.ht/~cco/go-scopes/core/action" "git.sr.ht/~cco/go-scopes/logging" ) diff --git a/lib/message/address.go b/core/message/address.go similarity index 96% rename from lib/message/address.go rename to core/message/address.go index a44507e..49bacc0 100644 --- a/lib/message/address.go +++ b/core/message/address.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "git.sr.ht/~cco/go-scopes/lib" + lib "git.sr.ht/~cco/go-scopes" ) // Address implementation diff --git a/lib/message/message.go b/core/message/message.go similarity index 98% rename from lib/message/message.go rename to core/message/message.go index 8859b9a..1a50e5b 100644 --- a/lib/message/message.go +++ b/core/message/message.go @@ -4,7 +4,7 @@ import ( "encoding/json" "strings" - "git.sr.ht/~cco/go-scopes/lib" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/logging/log" ) diff --git a/examples/demo/etc/etc.go b/examples/demo/etc/etc.go index b1fb27d..631e70b 100644 --- a/examples/demo/etc/etc.go +++ b/examples/demo/etc/etc.go @@ -1,9 +1,9 @@ package etc import ( + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/app" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" "git.sr.ht/~cco/go-scopes/logging" ) diff --git a/lib/lib.go b/lib/lib.go deleted file mode 100644 index 0249aa3..0000000 --- a/lib/lib.go +++ /dev/null @@ -1,137 +0,0 @@ -// Package `lib` provides a set of common types (mostly interfaces -// and function declarations) and some basic functions. -package lib - -import ( - stdlib_context "context" - "fmt" - "sync" -) - -// config - -type ActionSpec interface { - Handler() ActionHandler - Receivers() []string -} - -type Pattern interface { - fmt.Stringer - Slice() []string -} - -type ActionConfig interface { - Pattern() Pattern - Specs() []ActionSpec -} - -type Config interface { - Name() string - Starter() StartProc - Step() StepProc - MessageHandler() MessageHandler - DoneHandler() StepProc - Actions() []ActionConfig - AddAction(string, ...ActionSpec) Config - Children() []Config - Add(...Config) Config -} - -// services - context - -type Services map[string]Context - -type ContextState interface{} - -type Context interface { - stdlib_context.Context - Config() Config - Parent() Context - Services() Services - ChildContext(Config) Context - State() ContextState - WithState(ContextState) Context - Mailbox() chan Message - WaitGroup() *sync.WaitGroup - Stop() -} - -// message, address - -type MsgHead interface { - fmt.Stringer - Slice() []string - Domain() string - Action() string - Class() string - Item() string -} - -type Message interface { - MsgHead - Head() MsgHead - Sender() Address - Payload() Payload - WithSender(Address) Message - WithPayload(Payload) Message -} - -type Address interface { - fmt.Stringer - Url() string - Service() string - Interaction() (string, string) - SetUrl(string) - SetInteraction(string, string) -} - -type Payload interface { - fmt.Stringer - Data() interface{} - FromJson(string) Payload -} - -// action - -type Action interface { - Context() Context - Spec() ActionSpec - Message() Message - Handle() bool -} - -// procedures and handlers - -type Proc = func(Context) -type StartProc = Proc -type StepProc = func(Context) bool -type MessageHandler = func(Context, Message) bool -type ActionHandler = func(Action) bool - -// library functions - -func RunCtx(ctx Context, fct Proc) { - ctx.WaitGroup().Add(1) - go func() { - defer ctx.WaitGroup().Done() - fct(ctx) - }() -} - -func HandleMsg(ctx Context, msg Message) bool { - return ctx.Config().MessageHandler()(ctx, msg) -} - -func Send(ctx Context, addr Address, msg Message) { - if srv, ok := ctx.Services()[addr.Service()]; ok { - srv.Mailbox() <- msg - } -} - -func GetState[St ContextState](ctx Context) St { - return ctx.State().(St) -} - -func GetCfg[C Config](ctx Context) C { - return ctx.Config().(C) -} diff --git a/logging/event.go b/logging/event.go index 4bd767d..aafa5c1 100644 --- a/logging/event.go +++ b/logging/event.go @@ -1,7 +1,7 @@ package logging import ( - "git.sr.ht/~cco/go-scopes/lib" + lib "git.sr.ht/~cco/go-scopes" "github.com/rs/zerolog" ) diff --git a/logging/logging.go b/logging/logging.go index 432f57f..09f8255 100644 --- a/logging/logging.go +++ b/logging/logging.go @@ -6,8 +6,8 @@ import ( "os" "path/filepath" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) diff --git a/scopes.go b/scopes.go index 671813f..d21ff47 100644 --- a/scopes.go +++ b/scopes.go @@ -1 +1,137 @@ +// Package `scopes` provides a set of common types (mostly interfaces +// and function declarations) and some basic functions. package scopes + +import ( + stdlib_context "context" + "fmt" + "sync" +) + +// config + +type ActionSpec interface { + Handler() ActionHandler + Receivers() []string +} + +type Pattern interface { + fmt.Stringer + Slice() []string +} + +type ActionConfig interface { + Pattern() Pattern + Specs() []ActionSpec +} + +type Config interface { + Name() string + Starter() StartProc + Step() StepProc + MessageHandler() MessageHandler + DoneHandler() StepProc + Actions() []ActionConfig + AddAction(string, ...ActionSpec) Config + Children() []Config + Add(...Config) Config +} + +// services - context + +type Services map[string]Context + +type ContextState interface{} + +type Context interface { + stdlib_context.Context + Config() Config + Parent() Context + Services() Services + ChildContext(Config) Context + State() ContextState + WithState(ContextState) Context + Mailbox() chan Message + WaitGroup() *sync.WaitGroup + Stop() +} + +// message, address + +type MsgHead interface { + fmt.Stringer + Slice() []string + Domain() string + Action() string + Class() string + Item() string +} + +type Message interface { + MsgHead + Head() MsgHead + Sender() Address + Payload() Payload + WithSender(Address) Message + WithPayload(Payload) Message +} + +type Address interface { + fmt.Stringer + Url() string + Service() string + Interaction() (string, string) + SetUrl(string) + SetInteraction(string, string) +} + +type Payload interface { + fmt.Stringer + Data() interface{} + FromJson(string) Payload +} + +// action + +type Action interface { + Context() Context + Spec() ActionSpec + Message() Message + Handle() bool +} + +// procedures and handlers + +type Proc = func(Context) +type StartProc = Proc +type StepProc = func(Context) bool +type MessageHandler = func(Context, Message) bool +type ActionHandler = func(Action) bool + +// library functions + +func RunCtx(ctx Context, fct Proc) { + ctx.WaitGroup().Add(1) + go func() { + defer ctx.WaitGroup().Done() + fct(ctx) + }() +} + +func HandleMsg(ctx Context, msg Message) bool { + return ctx.Config().MessageHandler()(ctx, msg) +} + +func Send(ctx Context, addr Address, msg Message) { + if srv, ok := ctx.Services()[addr.Service()]; ok { + srv.Mailbox() <- msg + } +} + +func GetState[St ContextState](ctx Context) St { + return ctx.State().(St) +} + +func GetCfg[C Config](ctx Context) C { + return ctx.Config().(C) +} diff --git a/server/logger.go b/server/logger.go index 9297bb1..d08125c 100644 --- a/server/logger.go +++ b/server/logger.go @@ -3,7 +3,7 @@ package server import ( "fmt" - "git.sr.ht/~cco/go-scopes/lib" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/logging" "github.com/gin-gonic/gin" "github.com/rs/zerolog" diff --git a/server/server.go b/server/server.go index 0caca3e..7cb9207 100644 --- a/server/server.go +++ b/server/server.go @@ -3,9 +3,9 @@ package server import ( "net/http" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/core" + "git.sr.ht/~cco/go-scopes/core" "github.com/gin-gonic/gin" ) diff --git a/tests/lib_test.go b/tests/core_test.go similarity index 92% rename from tests/lib_test.go rename to tests/core_test.go index 3642861..ce86a45 100644 --- a/tests/lib_test.go +++ b/tests/core_test.go @@ -4,16 +4,16 @@ import ( "fmt" tbase "testing" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/common/testing" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/action" - "git.sr.ht/~cco/go-scopes/lib/context" - "git.sr.ht/~cco/go-scopes/lib/core" - "git.sr.ht/~cco/go-scopes/lib/message" + "git.sr.ht/~cco/go-scopes/core" + "git.sr.ht/~cco/go-scopes/core/action" + "git.sr.ht/~cco/go-scopes/core/context" + "git.sr.ht/~cco/go-scopes/core/message" ) -func TestLib(tb *tbase.T) { +func TestCore(tb *tbase.T) { t := testing.SetUp(tb) t.Run("address", AddressTest) t.Run("message", MessageTest) diff --git a/tests/etc/etc.go b/tests/etc/etc.go index 085982c..3396982 100644 --- a/tests/etc/etc.go +++ b/tests/etc/etc.go @@ -1,13 +1,13 @@ package etc import ( + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/app" "git.sr.ht/~cco/go-scopes/client" "git.sr.ht/~cco/go-scopes/common/testing" "git.sr.ht/~cco/go-scopes/config" - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/action" - "git.sr.ht/~cco/go-scopes/lib/core" + "git.sr.ht/~cco/go-scopes/core" + "git.sr.ht/~cco/go-scopes/core/action" "git.sr.ht/~cco/go-scopes/logging" "git.sr.ht/~cco/go-scopes/server" ) diff --git a/tests/scopes_test.go b/tests/scopes_test.go index a090e50..1e3c930 100644 --- a/tests/scopes_test.go +++ b/tests/scopes_test.go @@ -4,10 +4,10 @@ import ( "os" tbase "testing" + lib "git.sr.ht/~cco/go-scopes" "git.sr.ht/~cco/go-scopes/app" "git.sr.ht/~cco/go-scopes/common/testing" - "git.sr.ht/~cco/go-scopes/lib" - "git.sr.ht/~cco/go-scopes/lib/message" + "git.sr.ht/~cco/go-scopes/core/message" "git.sr.ht/~cco/go-scopes/tests/etc" )