From e9a369ec3151a480671119d676bdea1520eb20c9 Mon Sep 17 00:00:00 2001 From: Chen Asraf Date: Sat, 31 Aug 2024 20:51:12 +0300 Subject: [PATCH] feat: initial commit --- go.mod | 3 +++ treelike.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 go.mod create mode 100644 treelike.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..747a3d6 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/chenasraf/treelike + +go 1.22.3 diff --git a/treelike.go b/treelike.go new file mode 100644 index 0000000..427cfac --- /dev/null +++ b/treelike.go @@ -0,0 +1,76 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +func helpText() { + fmt.Println("Usage: treelike [OPTIONS] [PATH]") +} + +func main() { + args := os.Args[1:] + fromStdin := false + fromFile := "" + _ = fromFile + + var input strings.Builder + + for len(args) > 0 { + switch args[0] { + case "-h", "--help": + { + helpText() + os.Exit(0) + } + case "-", "--stdin": + { + fromStdin = true + args = args[1:] + } + case "-f", "--file": + { + fromFile = args[1] + args = args[1:] + } + default: + { + input.WriteString(args[0] + "\n") + args = args[1:] + } + } + } + + if fromStdin { + scanner := bufio.NewScanner(os.Stdin) + for scanner.Scan() { + input.WriteString(scanner.Text() + "\n") + } + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "Error reading from stdin:", err) + os.Exit(1) + } + } else if fromFile != "" { + file, err := os.Open(fromFile) + if err != nil { + fmt.Fprintf(os.Stderr, "Error opening file %s: %v\n", fromFile, err) + os.Exit(1) + } + defer file.Close() + scanner := bufio.NewScanner(file) + for scanner.Scan() { + input.WriteString(scanner.Text() + "\n") + } + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "Error reading from file:", err) + os.Exit(1) + } + } else { + helpText() + os.Exit(1) + } + fmt.Printf("input:\n%s", input.String()) +}