mirror of
https://github.com/mainnika/mongox-go-driver.git
synced 2026-05-22 15:53:36 +00:00
Now all query filters can validate themselves using Valider interface
This commit is contained in:
+14
-3
@@ -12,12 +12,16 @@ import (
|
||||
type applyFilterFunc = func(query *Query, filter interface{}) (ok bool)
|
||||
|
||||
// Compose is a function to compose filters into a single query
|
||||
func Compose(filters ...interface{}) (query *Query) {
|
||||
func Compose(filters ...interface{}) (query *Query, err error) {
|
||||
|
||||
query = &Query{}
|
||||
|
||||
for _, filter := range filters {
|
||||
if !Push(query, filter) {
|
||||
ok, err := Push(query, filter)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid filter %v, %w", filter, err)
|
||||
}
|
||||
if !ok {
|
||||
panic(fmt.Errorf("unknown filter %v", filter))
|
||||
}
|
||||
}
|
||||
@@ -26,12 +30,19 @@ func Compose(filters ...interface{}) (query *Query) {
|
||||
}
|
||||
|
||||
// Push applies single filter to a query
|
||||
func Push(query *Query, filter interface{}) (ok bool) {
|
||||
func Push(query *Query, filter interface{}) (ok bool, err error) {
|
||||
|
||||
ok = reflect2.IsNil(filter)
|
||||
if ok {
|
||||
return
|
||||
}
|
||||
|
||||
valider, hasValider := filter.(Valider)
|
||||
if hasValider {
|
||||
err = valider.Valid()
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, applier := range []applyFilterFunc{
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package query
|
||||
|
||||
// Valider is a filter to validate the filter
|
||||
type Valider interface {
|
||||
Valid() (err error)
|
||||
}
|
||||
Reference in New Issue
Block a user