52 lines
1,021 B
Go
52 lines
1,021 B
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:]...) }
|
|
|
|
// Example data
|
|
var data = Filter{
|
|
{"str1", 42, true, Struct1{"s1", Struct2{1}}},
|
|
{"2str", 42, true, Struct1{"s2", Struct2{2}}},
|
|
{"str3", 42, false, Struct1{"s3", Struct2{3}}},
|
|
}
|
|
|
|
func main() {
|
|
f := filter.NewQuery("String:s*").GenericFilter(data)
|
|
if f != nil {
|
|
for _, v := range f.(Filter) {
|
|
fmt.Println("Generic:", v)
|
|
}
|
|
}
|
|
filter.NewQuery("String:s*").Filter(&data)
|
|
for _, v := range data {
|
|
fmt.Println("Interface:", v)
|
|
}
|
|
}
|