78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
// Copyright (C) 2017 Marius Schellenberger
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"git.giftfish.de/ston1th/filter"
|
|
)
|
|
|
|
// Example data structure
|
|
type Example struct {
|
|
String string
|
|
Int int
|
|
Bool bool
|
|
Struct Struct1
|
|
}
|
|
|
|
type Struct1 struct {
|
|
String string
|
|
Struct Struct2
|
|
}
|
|
|
|
type Struct2 struct {
|
|
Int int
|
|
}
|
|
|
|
// Filter implements the filter.Filter interface
|
|
type Filter []Example
|
|
|
|
func (v Filter) Len() int { return len(v) }
|
|
func (v Filter) Index(i int) interface{} { return v[i] }
|
|
|
|
//func (v Filter) Remove(i, j int) { v = append(v[:i], v[j:]...) }
|
|
|
|
func (v *Filter) Remove(i, j int) { *v = append((*v)[:i], (*v)[j:]...) }
|
|
|
|
// Example data
|
|
var data = Filter{
|
|
{"str3", 42, true, Struct1{"s3", Struct2{3}}},
|
|
{"2str", 42, true, Struct1{"s2", Struct2{2}}},
|
|
{"str1", 42, false, Struct1{"s1", Struct2{1}}},
|
|
{":*", 42, false, Struct1{"s4", Struct2{4}}},
|
|
}
|
|
|
|
func main() {
|
|
f, err := filter.NewQuery("AND String:s*")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
d := f.GenericFilter(data)
|
|
if d != nil {
|
|
for _, v := range d.(Filter) {
|
|
fmt.Println("Generic:", v)
|
|
}
|
|
}
|
|
f, err = filter.NewQuery("OR Struct.Struct.Int:1 Struct.Struct.Int:2 String::")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
err = f.Filter(&data)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
for _, v := range data {
|
|
fmt.Println("Interface:", v)
|
|
}
|
|
s, err := filter.NewQuery("sort:Bool:desc")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
err = s.Filter(&data)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
for _, v := range data {
|
|
fmt.Println("Sort:", v)
|
|
}
|
|
}
|