summaryrefslogtreecommitdiff
path: root/internal/filter
diff options
context:
space:
mode:
authorayyansea <ayyansea@gmail.com>2024-11-18 21:53:29 +0300
committerayyansea <ayyansea@gmail.com>2024-11-18 21:53:29 +0300
commit574e76ae935c4931ec50b14a94dee930ed6f3d5a (patch)
treea289a98536930cd90a0d8e7e05420f3a35934923 /internal/filter
parentd741a3187f0e8abb00ee34356b3e61ab9087c0d9 (diff)
feat: restructure project + add a basic cli arg parser
Diffstat (limited to 'internal/filter')
-rw-r--r--internal/filter/filter.go49
-rw-r--r--internal/filter/filters.go46
2 files changed, 95 insertions, 0 deletions
diff --git a/internal/filter/filter.go b/internal/filter/filter.go
new file mode 100644
index 0000000..3fff07f
--- /dev/null
+++ b/internal/filter/filter.go
@@ -0,0 +1,49 @@
+package filter
+
+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
+}
diff --git a/internal/filter/filters.go b/internal/filter/filters.go
new file mode 100644
index 0000000..8532fef
--- /dev/null
+++ b/internal/filter/filters.go
@@ -0,0 +1,46 @@
+package filter
+
+import (
+ "strings"
+)
+
+var filterList = map[string]interface{}{
+ "uppercase": NewUppercaseFilter,
+ "lowercase": NewLowercaseFilter,
+ "lowercase_extra": NewLowercaseFilterWithExtraSteps,
+}
+
+func NewUppercaseFilter() Filter {
+ uppercaseFilter := Filter{
+ name: "Uppercase",
+ action: strings.ToUpper,
+ subfilters: []Filter{},
+ }
+
+ return uppercaseFilter
+}
+
+func NewLowercaseFilter() Filter {
+ lowercaseFilter := Filter{
+ name: "Lowercase",
+ action: strings.ToLower,
+ subfilters: []Filter{},
+ }
+
+ return lowercaseFilter
+}
+
+func NewLowercaseFilterWithExtraSteps() Filter {
+ var subfilters []Filter
+
+ subfilters = append(subfilters, NewUppercaseFilter())
+ subfilters = append(subfilters, NewLowercaseFilter())
+
+ filter := Filter{
+ name: "Lowercase (extra dumb)",
+ action: func(string) string { return "" },
+ subfilters: subfilters,
+ }
+
+ return filter
+}