ofxgo/cmd/ofx/main.go

83 lines
1.4 KiB
Go

package main
import (
"fmt"
"os"
"strconv"
)
var commands = []command{
profileDownloadCommand,
getAccountsCommand,
downloadCommand,
ccDownloadCommand,
invDownloadCommand,
bankTransactionsCommand,
ccTransactionsCommand,
invTransactionsCommand,
detectSettingsCommand,
}
func usage() {
fmt.Println(`The ofxgo command-line client provides a simple interface to
query, parse, and display financial data via the OFX specification.
Usage:
ofx command [arguments]
The commands are:`)
maxlen := 0
for _, cmd := range commands {
if len(cmd.Name) > maxlen {
maxlen = len(cmd.Name)
}
}
formatString := " %-" + strconv.Itoa(maxlen) + "s %s\n"
for _, cmd := range commands {
fmt.Printf(formatString, cmd.Name, cmd.Description)
}
}
func runCmd(c *command) {
err := c.Flags.Parse(os.Args[2:])
if err != nil {
fmt.Printf("Error parsing flags: %s\n", err)
c.usage()
os.Exit(1)
}
if !c.CheckFlags() {
fmt.Println()
c.usage()
os.Exit(1)
}
c.Do()
}
func main() {
if len(os.Args) < 2 {
fmt.Printf("Error: Please supply a sub-command. Usage:\n\n")
usage()
os.Exit(1)
}
cmdName := os.Args[1]
for _, cmd := range commands {
if cmd.Name == cmdName {
runCmd(&cmd)
os.Exit(0)
}
}
switch cmdName {
case "-h", "-help", "--help", "help":
usage()
default:
fmt.Println("Error: Invalid sub-command. Usage:")
usage()
os.Exit(1)
}
}