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 i := 0; i < len(split); i++ { if split[i][0:2] == "--" { var result = strings.TrimSpace(split[i]) flags = append(flags, string(result[2:])) continue } else if split[i][0] == '-' { var result = strings.TrimSpace(split[i]) for _, c := range result[1:] { flags = append(flags, string(c)) } continue } else if i != 0 { args = append(args, strings.TrimSpace(split[i])) } } 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 }