summaryrefslogtreecommitdiff
path: root/cmd
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 /cmd
parentd741a3187f0e8abb00ee34356b3e61ab9087c0d9 (diff)
feat: restructure project + add a basic cli arg parser
Diffstat (limited to 'cmd')
-rw-r--r--cmd/filter.go49
-rw-r--r--cmd/filters.go46
-rw-r--r--cmd/linked_token_list.go28
-rw-r--r--cmd/token.go30
-rw-r--r--cmd/uptfs.go56
-rw-r--r--cmd/uptfs/main.go60
6 files changed, 60 insertions, 209 deletions
diff --git a/cmd/filter.go b/cmd/filter.go
deleted file mode 100644
index 9d8ccac..0000000
--- a/cmd/filter.go
+++ /dev/null
@@ -1,49 +0,0 @@
-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
-}
diff --git a/cmd/filters.go b/cmd/filters.go
deleted file mode 100644
index 28592ba..0000000
--- a/cmd/filters.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package cmd
-
-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
-}
diff --git a/cmd/linked_token_list.go b/cmd/linked_token_list.go
deleted file mode 100644
index c8c876f..0000000
--- a/cmd/linked_token_list.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package cmd
-
-type LinkedTokenList struct {
- head, tail *Token
-}
-
-func (lts *LinkedTokenList) AddToken(content string) {
- newToken := &Token{
- content: content,
- prev: nil,
- next: nil,
- }
-
- if lts.head == nil {
- lts.head = newToken
- lts.tail = newToken
- } else {
- newToken.SetPreviousToken(lts.tail)
- lts.tail.SetNextToken(newToken)
- lts.tail = newToken
- }
-}
-
-func SliceToLinkedTokenSlice(slice []string, tokenSlice *LinkedTokenList) {
- for _, item := range slice {
- tokenSlice.AddToken(item)
- }
-}
diff --git a/cmd/token.go b/cmd/token.go
deleted file mode 100644
index 7652be7..0000000
--- a/cmd/token.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package cmd
-
-type Token struct {
- content string
- prev, next *Token
-}
-
-func (t *Token) GetContent() string {
- return t.content
-}
-
-func (t *Token) SetContent(content string) {
- t.content = content
-}
-
-func (t *Token) GetPreviousToken() *Token {
- return t.prev
-}
-
-func (t *Token) SetPreviousToken(newToken *Token) {
- t.prev = newToken
-}
-
-func (t *Token) GetNextToken() *Token {
- return t.next
-}
-
-func (t *Token) SetNextToken(newToken *Token) {
- t.next = newToken
-}
diff --git a/cmd/uptfs.go b/cmd/uptfs.go
deleted file mode 100644
index 531b102..0000000
--- a/cmd/uptfs.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package cmd
-
-import (
- "bufio"
- "errors"
- "fmt"
- "os"
- "strings"
- "uptfs/util/split"
-)
-
-func Run() {
- scanner := bufio.NewScanner(os.Stdin)
- scanner.Scan()
- inputString := scanner.Text()
-
- if inputString == "" {
- err := errors.New("the input string is empty")
- fmt.Printf("%v\n", err)
- os.Exit(1)
- }
-
- additionalDelimeters := []string{",", "."}
- tokens := strings.Split(inputString, " ")
- tokens = formatInput(tokens, additionalDelimeters)
-
- if len(tokens) == 0 {
- err := errors.New("the slice is empty")
- fmt.Printf("%v\n", err)
- os.Exit(1)
- }
-
- var linkedTokens LinkedTokenList
- SliceToLinkedTokenSlice(tokens, &linkedTokens)
-
- lowercaseFilter := NewLowercaseFilterWithExtraSteps()
- uppercaseFilter := NewUppercaseFilter()
-
- for current := linkedTokens.head; current != nil; current = current.GetNextToken() {
- current.content = lowercaseFilter.Filter(current.content)
- current.content = uppercaseFilter.Filter(current.content)
- }
-
- fmt.Println("Head: ", linkedTokens.head.content)
- fmt.Println("Tail: ", linkedTokens.tail.content)
-}
-
-func formatInput(tokenArray []string, delimeterArray []string) []string {
- for _, delimeter := range delimeterArray {
- for index, element := range tokenArray {
- tokenArray = split.NewArrayWithSplit(tokenArray, index, element, delimeter)
- }
- }
-
- return tokenArray
-}
diff --git a/cmd/uptfs/main.go b/cmd/uptfs/main.go
new file mode 100644
index 0000000..4ecb045
--- /dev/null
+++ b/cmd/uptfs/main.go
@@ -0,0 +1,60 @@
+package main
+
+import (
+ "bufio"
+ "errors"
+ "fmt"
+ "os"
+ "strings"
+
+ "github.com/alexflint/go-arg"
+ "github.com/ayyansea/uptfs/internal/filter"
+ "github.com/ayyansea/uptfs/internal/split"
+ "github.com/ayyansea/uptfs/internal/token"
+)
+
+var args struct {
+ Foo string `help:"it's a foo"`
+ Bar bool `help:"it's a bar"`
+}
+
+func main() {
+ arg.MustParse(&args)
+ fmt.Println(args.Foo, args.Bar)
+
+ scanner := bufio.NewScanner(os.Stdin)
+ scanner.Scan()
+ inputString := scanner.Text()
+
+ if inputString == "" {
+ err := errors.New("the input string is empty")
+ fmt.Printf("%v\n", err)
+ os.Exit(1)
+ }
+
+ additionalDelimeters := []string{",", "."}
+ tokens := strings.Split(inputString, " ")
+ tokens = split.FormatInput(tokens, additionalDelimeters)
+
+ if len(tokens) == 0 {
+ err := errors.New("the slice is empty")
+ fmt.Printf("%v\n", err)
+ os.Exit(1)
+ }
+
+ var linkedTokens token.LinkedTokenList
+ token.SliceToLinkedTokenSlice(tokens, &linkedTokens)
+
+ lowercaseFilter := filter.NewLowercaseFilterWithExtraSteps()
+ uppercaseFilter := filter.NewUppercaseFilter()
+
+ for current := linkedTokens.GetHead(); current != nil; current = current.GetNextToken() {
+ current.SetContent(lowercaseFilter.Filter(current.GetContent()))
+ current.SetContent(uppercaseFilter.Filter(current.GetContent()))
+ }
+
+ head := linkedTokens.GetHead()
+ tail := linkedTokens.GetTail()
+ fmt.Println("Head: ", head.GetContent())
+ fmt.Println("Tail: ", tail.GetContent())
+}