summaryrefslogtreecommitdiff
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
parentd741a3187f0e8abb00ee34356b3e61ab9087c0d9 (diff)
feat: restructure project + add a basic cli arg parser
-rw-r--r--.gitignore1
-rw-r--r--Makefile2
-rw-r--r--cmd/uptfs.go56
-rw-r--r--cmd/uptfs/main.go60
-rw-r--r--go.mod9
-rw-r--r--go.sum8
-rw-r--r--internal/config/config.go (renamed from util/config/config.go)0
-rw-r--r--internal/filter/filter.go (renamed from cmd/filter.go)2
-rw-r--r--internal/filter/filters.go (renamed from cmd/filters.go)2
-rw-r--r--internal/split/split.go (renamed from util/split/split.go)10
-rw-r--r--internal/token/linked_token_list.go (renamed from cmd/linked_token_list.go)10
-rw-r--r--internal/token/token.go (renamed from cmd/token.go)2
-rw-r--r--main.go7
13 files changed, 99 insertions, 70 deletions
diff --git a/.gitignore b/.gitignore
index 50ea6e5..6038b91 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@ go.work.sum
# binary
uptfs
+!cmd/uptfs/
# config
config.yaml
diff --git a/Makefile b/Makefile
index 0f55e78..8e66ee7 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@ all: build
.PHONY: build
build:
@echo "Building Go uptfs..."
- go build
+ go build ./cmd/uptfs
.PHONY: clean
clean:
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())
+}
diff --git a/go.mod b/go.mod
index 53c34e3..79ff641 100644
--- a/go.mod
+++ b/go.mod
@@ -1,5 +1,10 @@
-module uptfs
+module github.com/ayyansea/uptfs
go 1.23.2
-require gopkg.in/yaml.v3 v3.0.1 // indirect
+require gopkg.in/yaml.v3 v3.0.1
+
+require (
+ github.com/alexflint/go-arg v1.5.1 // indirect
+ github.com/alexflint/go-scalar v1.2.0 // indirect
+)
diff --git a/go.sum b/go.sum
index 4bc0337..e8c83d5 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,11 @@
+github.com/alexflint/go-arg v1.5.1 h1:nBuWUCpuRy0snAG+uIJ6N0UvYxpxA0/ghA/AaHxlT8Y=
+github.com/alexflint/go-arg v1.5.1/go.mod h1:A7vTJzvjoaSTypg4biM5uYNTkJ27SkNTArtYXnlqVO8=
+github.com/alexflint/go-scalar v1.2.0 h1:WR7JPKkeNpnYIOfHRa7ivM21aWAdHD0gEWHCx+WQBRw=
+github.com/alexflint/go-scalar v1.2.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/util/config/config.go b/internal/config/config.go
index ad35ee7..ad35ee7 100644
--- a/util/config/config.go
+++ b/internal/config/config.go
diff --git a/cmd/filter.go b/internal/filter/filter.go
index 9d8ccac..3fff07f 100644
--- a/cmd/filter.go
+++ b/internal/filter/filter.go
@@ -1,4 +1,4 @@
-package cmd
+package filter
import (
"fmt"
diff --git a/cmd/filters.go b/internal/filter/filters.go
index 28592ba..8532fef 100644
--- a/cmd/filters.go
+++ b/internal/filter/filters.go
@@ -1,4 +1,4 @@
-package cmd
+package filter
import (
"strings"
diff --git a/util/split/split.go b/internal/split/split.go
index 2fc29db..e03335c 100644
--- a/util/split/split.go
+++ b/internal/split/split.go
@@ -4,6 +4,16 @@ import (
"strings"
)
+func FormatInput(tokenArray []string, delimeterArray []string) []string {
+ for _, delimeter := range delimeterArray {
+ for index, element := range tokenArray {
+ tokenArray = NewArrayWithSplit(tokenArray, index, element, delimeter)
+ }
+ }
+
+ return tokenArray
+}
+
func checkArrayElementsEmpty(array []string) bool {
for _, str := range array {
if str != "" {
diff --git a/cmd/linked_token_list.go b/internal/token/linked_token_list.go
index c8c876f..5fe42a9 100644
--- a/cmd/linked_token_list.go
+++ b/internal/token/linked_token_list.go
@@ -1,9 +1,17 @@
-package cmd
+package token
type LinkedTokenList struct {
head, tail *Token
}
+func (lts *LinkedTokenList) GetHead() *Token {
+ return lts.head
+}
+
+func (lts *LinkedTokenList) GetTail() *Token {
+ return lts.tail
+}
+
func (lts *LinkedTokenList) AddToken(content string) {
newToken := &Token{
content: content,
diff --git a/cmd/token.go b/internal/token/token.go
index 7652be7..c4dffd8 100644
--- a/cmd/token.go
+++ b/internal/token/token.go
@@ -1,4 +1,4 @@
-package cmd
+package token
type Token struct {
content string
diff --git a/main.go b/main.go
deleted file mode 100644
index 10c5c9a..0000000
--- a/main.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package main
-
-import "uptfs/cmd"
-
-func main() {
- cmd.Run()
-}