diff options
| author | ayyansea <ayyansea@gmail.com> | 2024-11-18 21:53:29 +0300 |
|---|---|---|
| committer | ayyansea <ayyansea@gmail.com> | 2024-11-18 21:53:29 +0300 |
| commit | 574e76ae935c4931ec50b14a94dee930ed6f3d5a (patch) | |
| tree | a289a98536930cd90a0d8e7e05420f3a35934923 /cmd | |
| parent | d741a3187f0e8abb00ee34356b3e61ab9087c0d9 (diff) | |
feat: restructure project + add a basic cli arg parser
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/filter.go | 49 | ||||
| -rw-r--r-- | cmd/filters.go | 46 | ||||
| -rw-r--r-- | cmd/linked_token_list.go | 28 | ||||
| -rw-r--r-- | cmd/token.go | 30 | ||||
| -rw-r--r-- | cmd/uptfs.go | 56 | ||||
| -rw-r--r-- | cmd/uptfs/main.go | 60 |
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()) +} |
