summaryrefslogtreecommitdiff
path: root/cmd/filter.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/filter.go')
-rw-r--r--cmd/filter.go49
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
+}