diff options
Diffstat (limited to 'cmd/filter.go')
| -rw-r--r-- | cmd/filter.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/cmd/filter.go b/cmd/filter.go new file mode 100644 index 0000000..9d8ccac --- /dev/null +++ b/cmd/filter.go @@ -0,0 +1,49 @@ +package cmd + +import ( + "fmt" +) + +type Filter struct { + name string + action func(string) string + subfilters []Filter +} + +type Greeter interface { + Greet() +} + +type Filterer interface { + Greeter + Filter(string) string +} + +func (f Filter) Greet() { + subfilterCount := len(f.subfilters) + + fmt.Printf("I am a filter and my name is %v\n", f.name) + if subfilterCount > 0 { + fmt.Println("My subfilters are:") + + for _, subfilter := range f.subfilters { + fmt.Printf("- %v\n", subfilter.name) + } + } +} + +func (f Filter) Filter(token string) (modifiedToken string) { + subfilterCount := len(f.subfilters) + modifiedToken = token + + if subfilterCount > 0 { + for _, subfilter := range f.subfilters { + modifiedToken = subfilter.action(modifiedToken) + } + + return modifiedToken + } + + modifiedToken = f.action(token) + return modifiedToken +} |
