From f2e0a7b413f38f41c1ee90c5dda3ef743b8f87d4 Mon Sep 17 00:00:00 2001 From: plastikfan Date: Fri, 10 May 2024 18:01:41 +0100 Subject: [PATCH] ref: internalise (#26) --- core/core-defs.go | 32 ++++++++++++++++--- driver.go | 13 ++++---- hiber/hibernation-defs.go | 8 ++--- {core => internal/services}/broker.go | 9 +++--- internal/types/definitions.go | 14 ++++++-- kernel/options.go | 46 --------------------------- pref/options.go | 6 ++-- session.go | 9 ++---- traverse_test.go | 32 +++++++------------ 9 files changed, 70 insertions(+), 99 deletions(-) rename {core => internal/services}/broker.go (85%) delete mode 100644 kernel/options.go diff --git a/core/core-defs.go b/core/core-defs.go index 6f9ed50..e5f44b7 100644 --- a/core/core-defs.go +++ b/core/core-defs.go @@ -3,10 +3,32 @@ package core // core contains universal definitions and handles cross cutting concerns // try to keep to a minimum to reduce rippling changes -type TraverseResult interface { -} +type ( + // TraverseResult + TraverseResult interface { + } -type DuffResult struct { -} + // Client is the callback invoked for each file system node found + // during traversal. + Client func(node *Node) error +) -type Client func(node *Node) error +type ( + // SimpleHandler is a function that takes no parameters and can + // be used by any notification with this signature. + SimpleHandler func() + + // BeginHandler invoked before traversal begins + BeginHandler func(root string) + + // EndHandler invoked at the end of traversal + EndHandler func(result TraverseResult) + + // HibernateHandler is a generic handler that is used by hibernation + // to indicate wake or sleep. + HibernateHandler func(description string) + + // NodeHandler is a generic handler that is for any notification that contains + // the traversal node, such as directory ascend or descend. + NodeHandler func(node *Node) +) diff --git a/driver.go b/driver.go index 0afdb07..7e7c2d0 100644 --- a/driver.go +++ b/driver.go @@ -5,6 +5,7 @@ import ( "github.com/snivilised/extendio/bus" "github.com/snivilised/traverse/core" + "github.com/snivilised/traverse/internal/services" "github.com/snivilised/traverse/internal/types" "github.com/snivilised/traverse/kernel" "github.com/snivilised/traverse/pref" @@ -22,7 +23,7 @@ type duffNavigator struct { } func (n *duffNavigator) Navigate() (core.TraverseResult, error) { - return core.DuffResult{}, nil + return types.NavigateResult{}, nil } func init() { @@ -30,10 +31,10 @@ func init() { Handle: func(_ context.Context, m bus.Message) { m.Data.(types.ContextExpiry).Expired() }, - Matcher: core.TopicContextExpired, + Matcher: services.TopicContextExpired, } - core.Broker.RegisterHandler(badge, h) + services.Broker.RegisterHandler(badge, h) } // replaces the runner in extendio, although it not @@ -54,11 +55,9 @@ func Walk() Driver { } } -func Run(options ...pref.Option) Driver { +func Run() Driver { return &driver{ - session: &session{ - accelerationOptions: options, - }, + session: &session{}, } } diff --git a/hiber/hibernation-defs.go b/hiber/hibernation-defs.go index 399f1d3..1df0293 100644 --- a/hiber/hibernation-defs.go +++ b/hiber/hibernation-defs.go @@ -4,7 +4,7 @@ import ( "context" "github.com/snivilised/extendio/bus" - "github.com/snivilised/traverse/core" + "github.com/snivilised/traverse/internal/services" ) const ( @@ -29,14 +29,14 @@ func init() { // _ = m.Data }, - Matcher: core.TopicOptionsAnnounce, + Matcher: services.TopicOptionsAnnounce, } - core.Broker.RegisterHandler(badge, h) + services.Broker.RegisterHandler(badge, h) } // subscribe to options.before func RestoreOptions() { - // called bny resume to load options from json file and + // called by resume to load options from json file and // setup registry to reflect this } diff --git a/core/broker.go b/internal/services/broker.go similarity index 85% rename from core/broker.go rename to internal/services/broker.go index 2a3bf87..f23c258 100644 --- a/core/broker.go +++ b/internal/services/broker.go @@ -1,20 +1,19 @@ -package core +package services -import ( - "github.com/snivilised/extendio/bus" -) +import "github.com/snivilised/extendio/bus" const ( format = "%03d" + TopicContextExpired = "context.expired" TopicOptionsAnnounce = "options.announce" TopicOptionsBefore = "options.before" TopicOptionsComplete = "options.complete" - TopicContextExpired = "context.expired" ) var ( Broker *bus.Broker topics = []string{ + TopicContextExpired, TopicOptionsAnnounce, TopicOptionsBefore, TopicOptionsComplete, diff --git a/internal/types/definitions.go b/internal/types/definitions.go index 11bdba1..811ae56 100644 --- a/internal/types/definitions.go +++ b/internal/types/definitions.go @@ -1,5 +1,13 @@ package types -type ContextExpiry interface { - Expired() // ??? ctx context.Context, cancel context.CancelFunc -} +// package types + +type ( + ContextExpiry interface { + Expired() // ??? ctx context.Context, cancel context.CancelFunc + } + + // NavigateResult + NavigateResult struct { + } +) diff --git a/kernel/options.go b/kernel/options.go deleted file mode 100644 index 8569494..0000000 --- a/kernel/options.go +++ /dev/null @@ -1,46 +0,0 @@ -package kernel - -// nav defines the core navigators - -// mediator to coordinate initialisation? - -/* -// WithStandardStyle sets a TermRenderer's styles with a standard (builtin) -// style. -func WithStandardStyle(style string) TermRendererOption { - return func(tr *TermRenderer) error { - styles, err := getDefaultStyle(style) - if err != nil { - return err - } - tr.ansiOptions.Styles = *styles - return nil - } -} -*/ - -// We need to define and formalise the life-cycle of a navigation session from what -// has been learnt from extendio. Do we also need to also allow the client to pass in -// custom callbacks for different stages of the sequence. (These concerns should possibly -// be delegated to the cycle package). -// -// The navigator should have 2 methods: -// - Walk implements sequential navigation; cancellation occurs via a ctrl-c, -// but note that the interrupt process still uses a context, so it is valid -// to pass in a context to Walk (actually, this may not be totally correct, so -// re-check this; ie how does the interrupt work and how to handle; chan/context). -// -// - Run implements concurrent navigation using rx observable - -// TraverseOptions can be used to render markdown content, posing a depth of -// customization and styles to fit your needs. -type TraverseOptions struct { - Persist Persistables -} - -// Persistables represents the traverse options that can be persisted via marshalling -type Persistables struct { -} - -// A TraverseOptionFunc sets an option on a TraverseOptions. -type TraverseOptionFunc func(*TraverseOptions) error diff --git a/pref/options.go b/pref/options.go index f97faa9..45f4efa 100644 --- a/pref/options.go +++ b/pref/options.go @@ -6,9 +6,9 @@ import ( "runtime" "github.com/snivilised/extendio/bus" - "github.com/snivilised/traverse/core" "github.com/snivilised/traverse/cycle" "github.com/snivilised/traverse/enums" + "github.com/snivilised/traverse/internal/services" ) // package: pref contains user option definitions; do not use anything in kernel (cyclic) @@ -22,10 +22,10 @@ func init() { Handle: func(_ context.Context, m bus.Message) { _ = m.Data }, - Matcher: core.TopicOptionsAnnounce, + Matcher: services.TopicOptionsAnnounce, } - core.Broker.RegisterHandler(badge, h) + services.Broker.RegisterHandler(badge, h) } type ( diff --git a/session.go b/session.go index a0e8172..b183163 100644 --- a/session.go +++ b/session.go @@ -3,8 +3,6 @@ package traverse import ( "context" "time" - - "github.com/snivilised/traverse/pref" ) type Session interface { @@ -13,10 +11,9 @@ type Session interface { } type session struct { - started time.Time - ctx context.Context - cancel context.CancelFunc - accelerationOptions []pref.Option + started time.Time + ctx context.Context + cancel context.CancelFunc } func (s *session) StartedAt() time.Time { diff --git a/traverse_test.go b/traverse_test.go index 55d461a..5c82a4d 100644 --- a/traverse_test.go +++ b/traverse_test.go @@ -25,9 +25,7 @@ var _ = Describe("Traverse", func() { _, err := traverse.Walk().Primary( "/root-path", - func(node *core.Node) error { - _ = node - + func(_ *core.Node) error { return nil }, pref.WithSubscription(enums.SubscribeFiles), @@ -67,16 +65,13 @@ var _ = Describe("Traverse", func() { // something like "context.expired" // ctx := context.Background() - _, err := traverse.Run( - pref.WithContext(ctx), - ).Primary( + _, err := traverse.Run().Primary( "/root-path", - func(node *core.Node) error { - _ = node - + func(_ *core.Node) error { return nil }, pref.WithSubscription(enums.SubscribeFiles), + pref.WithContext(ctx), ).Navigate() Expect(err).To(Succeed()) }) @@ -87,17 +82,14 @@ var _ = Describe("Traverse", func() { defer leaktest.Check(GinkgoT())() ctx, cancel := context.WithCancel(context.Background()) - _, err := traverse.Run( - pref.WithContext(ctx), - pref.WithCancel(cancel), - ).Primary( + _, err := traverse.Run().Primary( "/root-path", - func(node *core.Node) error { - _ = node - + func(_ *core.Node) error { return nil }, pref.WithSubscription(enums.SubscribeFiles), + pref.WithContext(ctx), + pref.WithCancel(cancel), ).Navigate() Expect(err).To(Succeed()) }) @@ -107,10 +99,10 @@ var _ = Describe("Traverse", func() { It("should: run primary navigation successfully", func() { defer leaktest.Check(GinkgoT())() - ctx := context.Background() - _, err := traverse.Run( - pref.WithContext(ctx), - ).Resume( + // for resume, the context should be set in the + // restore function + // + _, err := traverse.Run().Resume( "/from-restore-path", ).Navigate() Expect(err).To(Succeed())