52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package coperator
|
|
|
|
import "errors"
|
|
|
|
func operatorAnd(doc *Document, filter Filter, key string, value interface{}) (bool, error) {
|
|
vfilter, ok := filter.([]interface{})
|
|
if !ok {
|
|
return false, errors.New("filter must be a slice")
|
|
}
|
|
for _, v := range vfilter {
|
|
ret, err := DocumentOperator(doc, v.(Filter), "", nil)
|
|
if !ret {
|
|
return ret, err
|
|
}
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
func operatorOr(doc *Document, filter Filter, key string, value interface{}) (bool, error) {
|
|
vfilter, ok := filter.([]interface{})
|
|
if !ok {
|
|
return false, errors.New("filter must be a slice")
|
|
}
|
|
for _, v := range vfilter {
|
|
ret, err := DocumentOperator(doc, v.(Filter), "", nil)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if ret {
|
|
return ret, err
|
|
}
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
func operatorNor(doc *Document, filter Filter, key string, value interface{}) (bool, error) {
|
|
vfilter, ok := filter.([]interface{})
|
|
if !ok {
|
|
return false, errors.New("filter must be a slice")
|
|
}
|
|
for _, v := range vfilter {
|
|
ret, err := DocumentOperator(doc, v.(Filter), "", nil)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if ret {
|
|
return false, nil
|
|
}
|
|
}
|
|
return true, nil
|
|
}
|