summaryrefslogtreecommitdiff
path: root/cmd/filter.go
blob: 9d8ccaca8c5f7b4f380ede17d7381e5264cecc1d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
}