// Copyright (C) 2018 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) } }