filter/cmd/main.go
2018-01-17 23:08:10 +01:00

78 lines
1.5 KiB
Go

// 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)
}
}