bbash/input_parser/input_parser.go
2025-01-12 14:26:50 +01:00

62 lines
1.2 KiB
Go

package input_parser
import (
"bufio"
"log"
"os"
"strings"
)
type Input struct {
// The instruction a.k.a first argument
Instruction string
// The args, currently just the string after the instruction
Args []string
Args_raw string
Flags []string
}
func Parse() Input {
input := input_str()
return parse(input)
}
func parse(input string) Input {
split := strings.Split(string(input), " ")
instruction := strings.TrimSpace(split[0])
var flags []string
var args []string
for _, arg := range split[1:] {
if len(arg) == 1 && arg[0] == '-' {
continue
} else if arg[0:2] == "--" {
var result = strings.TrimSpace(arg)
flags = append(flags, string(result[2:]))
continue
} else if arg[0] == '-' {
var result = strings.TrimSpace(arg)
for _, c := range result[1:] {
flags = append(flags, string(c))
}
continue
} else {
args = append(args, strings.TrimSpace(arg))
}
}
return Input{
Instruction: instruction,
Args: args,
Flags: flags,
}
}
func input_str() string {
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err.Error())
}
return input
}