62 lines
1.2 KiB
Go
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
|
|
}
|