Add onclose callback

This commit is contained in:
Nikita Tokarchuk
2020-07-22 04:45:32 +02:00
parent b796d5ac3b
commit 951e5f5bef
6 changed files with 22 additions and 2 deletions
+2
View File
@@ -48,6 +48,8 @@ func (d *Database) LoadArray(target interface{}, filters ...interface{}) (err er
return
}
defer composed.OnClose().Invoke(d.Context(), target)
for i = 0; result.Next(d.Context()); {
var elem interface{}
+2
View File
@@ -25,6 +25,8 @@ func (d *Database) LoadOne(target interface{}, filters ...interface{}) (err erro
return fmt.Errorf("can't create find result: %w", err)
}
defer composed.OnClose().Invoke(d.Context(), target)
hasNext := result.Next(d.Context())
if result.Err() != nil {
return err
+3
View File
@@ -72,6 +72,9 @@ func (l *StreamLoader) Cursor() (cursor *mongox.Cursor) {
// Close cursor
func (l *StreamLoader) Close() (err error) {
_ = l.query.OnClose().Invoke(l.ctx, l.target)
return l.cur.Close(l.ctx)
}
+4 -1
View File
@@ -7,7 +7,10 @@ import (
type Callback func(ctx context.Context, iter interface{}) (err error)
type Callbacks []Callback
type OnDecode Callback
type (
OnDecode Callback
OnClose Callback
)
// Invoke callbacks sequence
func (c Callbacks) Invoke(ctx context.Context, iter interface{}) (err error) {
+6 -1
View File
@@ -130,8 +130,13 @@ func applyCallbacks(q *Query, f interface{}) (ok bool) {
switch cb := f.(type) {
case OnDecode:
q.ondecode = append(q.ondecode, Callback(cb))
ok = true
case OnClose:
q.onclose = append(q.onclose, Callback(cb))
default:
return
}
ok = true
return
}
+5
View File
@@ -12,6 +12,7 @@ type Query struct {
skipper Skipper
preloader Preloader
ondecode Callbacks
onclose Callbacks
}
// And function pushes the elem query to the $and array of the query
@@ -81,6 +82,10 @@ func (q *Query) OnDecode() (callbacks Callbacks) {
return q.ondecode
}
func (q *Query) OnClose() (callbacks Callbacks) {
return q.onclose
}
// Empty checks the query for any content
func (q *Query) Empty() (isEmpty bool) {
return len(q.m) == 0