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