From 9dd79fc6205b5217088142af79631ca1b19801a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Matczuk?= Date: Thu, 3 Dec 2020 11:33:14 +0100 Subject: [PATCH] migrate: Add CallbackRegister --- migrate/callback.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/migrate/callback.go b/migrate/callback.go index 1d6921e..0288261 100644 --- a/migrate/callback.go +++ b/migrate/callback.go @@ -6,6 +6,7 @@ package migrate import ( "context" + "errors" "github.com/scylladb/gocqlx/v2" ) @@ -31,3 +32,30 @@ type CallbackFunc func(ctx context.Context, session gocqlx.Session, ev CallbackE // Use this variable to register a global callback dispatching function. // See CallbackFunc for details. var Callback CallbackFunc + +type nameEvent struct { + name string + event CallbackEvent +} + +// CallbackRegister allows to register a handlers for an event type and a name. +// It dispatches calls to the registered handlers. +// If there is no handler registered for CallComment an error is returned. +type CallbackRegister map[nameEvent]CallbackFunc + +// Add registers a callback handler. +func (r CallbackRegister) Add(ev CallbackEvent, name string, f CallbackFunc) { + r[nameEvent{name, ev}] = f +} + +// Callback is CallbackFunc. +func (r CallbackRegister) Callback(ctx context.Context, session gocqlx.Session, ev CallbackEvent, name string) error { + f, ok := r[nameEvent{name, ev}] + if !ok { + if ev == CallComment { + return errors.New("missing handler") + } + return nil + } + return f(ctx, session, ev, name) +}