Add dqs cmd
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"code.chimeric.al/dwrz/dqs/internal/dqs/entry"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultDir = ""
|
||||
dirUsage = "path to the dqs directory (default: $XDG_CONFIG_HOME/dqs)"
|
||||
|
||||
defaultDate = ""
|
||||
dateUsage = "entry date in YYYYMMDD format (default: today)"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Date time.Time
|
||||
Dir string
|
||||
}
|
||||
|
||||
func Get() (*Config, error) {
|
||||
var (
|
||||
cfg = &Config{}
|
||||
date string
|
||||
)
|
||||
|
||||
flag.StringVar(&cfg.Dir, "dir", defaultDir, dirUsage)
|
||||
flag.StringVar(&date, "d", defaultDate, dateUsage)
|
||||
flag.StringVar(&date, "date", defaultDate, dateUsage)
|
||||
|
||||
flag.Parse()
|
||||
|
||||
// If unset, use the default directory.
|
||||
if cfg.Dir == "" {
|
||||
dir, err := DefaultDirectory()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cfg.Dir = dir
|
||||
}
|
||||
|
||||
// Parse and set the date.
|
||||
// If unset, use the current date.
|
||||
switch date {
|
||||
case defaultDate:
|
||||
now := time.Now()
|
||||
cfg.Date = time.Date(
|
||||
now.Year(), now.Month(), now.Day(),
|
||||
0, 0, 0, 0, time.Local,
|
||||
)
|
||||
default:
|
||||
var err error
|
||||
cfg.Date, err = time.Parse(entry.DateFormat, date)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid date: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func DefaultDirectory() (string, error) {
|
||||
dir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf(
|
||||
"failed to get user config dir: %w", err,
|
||||
)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s/dqs", dir), nil
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"code.chimeric.al/dwrz/dqs/cmd/dqs/config"
|
||||
"code.chimeric.al/dwrz/dqs/internal/dqs"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var log = slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
|
||||
AddSource: true,
|
||||
Level: slog.LevelDebug,
|
||||
}))
|
||||
|
||||
cfg, err := config.Get()
|
||||
if err != nil {
|
||||
log.Error("bad config", slog.Any("error", err))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
cmd, err := dqs.New(dqs.Config{Dir: cfg.Dir})
|
||||
if err != nil {
|
||||
log.Error("failed to initialize dqs", slog.Any("error", err))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := cmd.Run(flag.Args(), cfg.Date); err != nil {
|
||||
log.Error("failed", slog.Any("error", err))
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user