From b796d5ac3b8e59a16c1a211b73dd347c94d6287a Mon Sep 17 00:00:00 2001 From: Nikita Tokarchuk Date: Wed, 22 Jul 2020 04:45:32 +0200 Subject: [PATCH] Make callback type --- mongox/database/callbacks.go | 19 ------------------- mongox/database/loadarray.go | 2 +- mongox/database/loadone.go | 2 +- mongox/database/streamloader.go | 2 +- mongox/query/callbacks.go | 18 +++++++++++++++++- mongox/query/compose.go | 2 +- mongox/query/query.go | 4 ++-- 7 files changed, 23 insertions(+), 26 deletions(-) delete mode 100644 mongox/database/callbacks.go diff --git a/mongox/database/callbacks.go b/mongox/database/callbacks.go deleted file mode 100644 index e062f5a..0000000 --- a/mongox/database/callbacks.go +++ /dev/null @@ -1,19 +0,0 @@ -package database - -import ( - "context" - - "github.com/mainnika/mongox-go-driver/v2/mongox/query" -) - -func onDecode(ctx context.Context, iter interface{}, callbacks ...query.OnDecode) (err error) { - - for _, cb := range callbacks { - err = cb(ctx, iter) - if err != nil { - return - } - } - - return -} diff --git a/mongox/database/loadarray.go b/mongox/database/loadarray.go index b6eb7c9..61d128e 100644 --- a/mongox/database/loadarray.go +++ b/mongox/database/loadarray.go @@ -69,7 +69,7 @@ func (d *Database) LoadArray(target interface{}, filters ...interface{}) (err er return } - err = onDecode(d.ctx, elem, composed.OnDecode()...) + err = composed.OnDecode().Invoke(d.Context(), elem) if err != nil { _ = result.Close(d.Context()) return diff --git a/mongox/database/loadone.go b/mongox/database/loadone.go index 37cef08..5ab5f41 100644 --- a/mongox/database/loadone.go +++ b/mongox/database/loadone.go @@ -40,7 +40,7 @@ func (d *Database) LoadOne(target interface{}, filters ...interface{}) (err erro return } - err = onDecode(d.ctx, target, composed.OnDecode()...) + err = composed.OnDecode().Invoke(d.Context(), target) if err != nil { return } diff --git a/mongox/database/streamloader.go b/mongox/database/streamloader.go index 2efe11c..0146bff 100644 --- a/mongox/database/streamloader.go +++ b/mongox/database/streamloader.go @@ -42,7 +42,7 @@ func (l *StreamLoader) Decode() (err error) { return } - err = onDecode(l.ctx, l.target, l.query.OnDecode()...) + err = l.query.OnDecode().Invoke(l.ctx, l.target) if err != nil { return } diff --git a/mongox/query/callbacks.go b/mongox/query/callbacks.go index 26adeee..ef8da3a 100644 --- a/mongox/query/callbacks.go +++ b/mongox/query/callbacks.go @@ -4,4 +4,20 @@ import ( "context" ) -type OnDecode func(ctx context.Context, iter interface{}) (err error) +type Callback func(ctx context.Context, iter interface{}) (err error) +type Callbacks []Callback + +type OnDecode Callback + +// Invoke callbacks sequence +func (c Callbacks) Invoke(ctx context.Context, iter interface{}) (err error) { + + for _, cb := range c { + err = cb(ctx, iter) + if err != nil { + return + } + } + + return +} diff --git a/mongox/query/compose.go b/mongox/query/compose.go index d8b64b4..21da20f 100644 --- a/mongox/query/compose.go +++ b/mongox/query/compose.go @@ -129,7 +129,7 @@ func applyCallbacks(q *Query, f interface{}) (ok bool) { switch cb := f.(type) { case OnDecode: - q.ondecode = append(q.ondecode, cb) + q.ondecode = append(q.ondecode, Callback(cb)) ok = true } diff --git a/mongox/query/query.go b/mongox/query/query.go index 643b6e0..a4f05ea 100644 --- a/mongox/query/query.go +++ b/mongox/query/query.go @@ -11,7 +11,7 @@ type Query struct { sorter Sorter skipper Skipper preloader Preloader - ondecode []OnDecode + ondecode Callbacks } // And function pushes the elem query to the $and array of the query @@ -77,7 +77,7 @@ func (q *Query) Preloader() (ok bool, preloads []string) { } // OnDecode callback is called after the mongo decode function -func (q *Query) OnDecode() (callbacks []OnDecode) { +func (q *Query) OnDecode() (callbacks Callbacks) { return q.ondecode }