feat: better structured internal
This commit is contained in:
35
internal/config/parse_from_args.go
Normal file
35
internal/config/parse_from_args.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// Extract the program configuration from the command-line arguments.
|
||||
func FromArgs() (*Config, error) {
|
||||
// Parse flags.
|
||||
verbose := flag.Bool("v", false, "Verbosity. If set, the program will print logs.")
|
||||
explanation := flag.Bool("x", false, "Explanation. Whether or not to show all reduction steps.")
|
||||
flag.Parse()
|
||||
|
||||
// Parse non-flag arguments.
|
||||
if flag.NArg() == 0 {
|
||||
return nil, fmt.Errorf("No input given.")
|
||||
} else if flag.NArg() > 1 {
|
||||
return nil, fmt.Errorf("More than 1 command-line argument.")
|
||||
}
|
||||
|
||||
// Parse source type.
|
||||
var source Source
|
||||
if flag.Arg(0) == "-" {
|
||||
source = StdinSource{}
|
||||
} else {
|
||||
source = StringSource{data: flag.Arg(0)}
|
||||
}
|
||||
|
||||
return &Config{
|
||||
Source: source,
|
||||
Verbose: *verbose,
|
||||
Explanation: *explanation,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user