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 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 }