diff options
Diffstat (limited to 'util')
| -rw-r--r-- | util/config/config.go | 56 | ||||
| -rw-r--r-- | util/split/split.go | 45 |
2 files changed, 101 insertions, 0 deletions
diff --git a/util/config/config.go b/util/config/config.go new file mode 100644 index 0000000..ad35ee7 --- /dev/null +++ b/util/config/config.go @@ -0,0 +1,56 @@ +package config + +import ( + "errors" + "fmt" + "os" + "path/filepath" + + "gopkg.in/yaml.v3" +) + +type Config struct { + Filters []string `yaml:"filters"` + Iterations int `yaml:"iterations"` +} + +func getDefaultConfigPath() (defaultPath string, err error) { + programName := "uptfs" + configFileName := "config.yaml" + + if xdg := os.Getenv("XDG_CONFIG_HOME"); xdg != "" { + return filepath.Join(xdg, programName, configFileName), nil + } + + if home := os.Getenv("HOME"); home != "" { + return filepath.Join(home, programName, configFileName), nil + } + + return "", errors.New("both XDG_CONFIG_HOME and HOME are not set, can't proceed") +} + +func (c *Config) LoadConfig(filepath string) *Config { + if filepath == "" { + var err error + filepath, err = getDefaultConfigPath() + + if err != nil { + fmt.Printf("%v\n", err) + os.Exit(1) + } + } + + yamlFile, err := os.ReadFile(filepath) + + if err != nil { + fmt.Printf("%v\n", err) + os.Exit(1) + } + err = yaml.Unmarshal(yamlFile, c) + if err != nil { + fmt.Printf("%v\n", err) + os.Exit(1) + } + + return c +} diff --git a/util/split/split.go b/util/split/split.go new file mode 100644 index 0000000..2fc29db --- /dev/null +++ b/util/split/split.go @@ -0,0 +1,45 @@ +package split + +import ( + "strings" +) + +func checkArrayElementsEmpty(array []string) bool { + for _, str := range array { + if str != "" { + return false + } + } + return true +} + +func NewArrayWithSplit(initialArray []string, index int, token string, delimeter string) (result []string) { + split := strings.Split(token, delimeter) + splitLength := len(split) + + /* + When a token only consists of delimeter * N (N >= 0), + the resulting split consists of N empty elements. + Here we check if it is so and essentialy remove that token + from resulting array. + */ + + splitIsEmpty := checkArrayElementsEmpty(split) + if splitIsEmpty { + result = append(initialArray[:index], initialArray[index+1:]...) + return result + } + + if splitLength > 1 { + if split[splitLength-1] == "" { + split = split[:splitLength-1] + } + + result = append(initialArray[:index], append(split, initialArray[index+1:]...)...) + } + if splitLength == 1 { + result = initialArray + } + + return result +} |
