feat: better structured internal

This commit is contained in:
2025-12-25 17:21:16 -05:00
parent d9deee0734
commit 3351eaddfc
8 changed files with 102 additions and 31 deletions

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