Use kong instead of flag
diff --git a/cmd/termmapper/main.go b/cmd/termmapper/main.go
index c31b6b1..0f619c1 100644
--- a/cmd/termmapper/main.go
+++ b/cmd/termmapper/main.go
@@ -1,7 +1,6 @@
package main
import (
- "flag"
"fmt"
"os"
"os/signal"
@@ -9,6 +8,7 @@
"syscall"
"github.com/KorAP/KoralPipe-TermMapper/mapper"
+ "github.com/alecthomas/kong"
"github.com/gofiber/fiber/v2"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
@@ -20,38 +20,21 @@
)
type config struct {
- port int
- config string
- logLevel string
+ Port int `kong:"short='p',default='8080',help='Port to listen on'"`
+ Config string `kong:"short='c',required,help='YAML configuration file containing mapping directives'"`
+ LogLevel string `kong:"short='l',default='info',help='Log level (debug, info, warn, error)'"`
}
-func parseFlags() *config {
+func parseConfig() *config {
cfg := &config{}
-
- flag.IntVar(&cfg.port, "port", 8080, "Port to listen on")
- flag.IntVar(&cfg.port, "p", 8080, "Port to listen on (shorthand)")
-
- flag.StringVar(&cfg.config, "config", "", "YAML configuration file containing mapping directives")
- flag.StringVar(&cfg.config, "c", "", "YAML configuration file containing mapping directives (shorthand)")
-
- flag.StringVar(&cfg.logLevel, "log-level", "info", "Log level (debug, info, warn, error)")
- flag.StringVar(&cfg.logLevel, "l", "info", "Log level (shorthand)")
-
- flag.Usage = func() {
- fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
- fmt.Fprintf(os.Stderr, "\nA web service for transforming JSON objects using term mapping rules.\n\n")
- fmt.Fprintf(os.Stderr, "Options:\n")
- flag.PrintDefaults()
- }
-
- flag.Parse()
-
- if cfg.config == "" {
- fmt.Fprintln(os.Stderr, "Error: config file is required")
- flag.Usage()
+ ctx := kong.Parse(cfg,
+ kong.Description("A web service for transforming JSON objects using term mapping rules."),
+ kong.UsageOnError(),
+ )
+ if ctx.Error != nil {
+ fmt.Fprintln(os.Stderr, ctx.Error)
os.Exit(1)
}
-
return cfg
}
@@ -70,13 +53,13 @@
func main() {
// Parse command line flags
- cfg := parseFlags()
+ cfg := parseConfig()
// Set up logging
- setupLogger(cfg.logLevel)
+ setupLogger(cfg.LogLevel)
// Create a new mapper instance
- m, err := mapper.NewMapper(cfg.config)
+ m, err := mapper.NewMapper(cfg.Config)
if err != nil {
log.Fatal().Err(err).Msg("Failed to create mapper")
}
@@ -92,8 +75,8 @@
// Start server
go func() {
- log.Info().Int("port", cfg.port).Msg("Starting server")
- if err := app.Listen(fmt.Sprintf(":%d", cfg.port)); err != nil {
+ log.Info().Int("port", cfg.Port).Msg("Starting server")
+ if err := app.Listen(fmt.Sprintf(":%d", cfg.Port)); err != nil {
log.Fatal().Err(err).Msg("Server error")
}
}()
diff --git a/go.mod b/go.mod
index e6f4c32..c166c3b 100644
--- a/go.mod
+++ b/go.mod
@@ -5,6 +5,7 @@
toolchain go1.23.9
require (
+ github.com/alecthomas/kong v1.11.0
github.com/alecthomas/participle/v2 v2.1.4
github.com/gofiber/fiber/v2 v2.52.8
github.com/rs/zerolog v1.34.0
diff --git a/go.sum b/go.sum
index 7d1da80..a793d95 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,7 @@
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
+github.com/alecthomas/kong v1.11.0 h1:y++1gI7jf8O7G7l4LZo5ASFhrhJvzc+WgF/arranEmM=
+github.com/alecthomas/kong v1.11.0/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU=
github.com/alecthomas/participle/v2 v2.1.4 h1:W/H79S8Sat/krZ3el6sQMvMaahJ+XcM9WSI2naI7w2U=
github.com/alecthomas/participle/v2 v2.1.4/go.mod h1:8tqVbpTX20Ru4NfYQgZf4mP18eXPTBViyMWiArNEgGI=
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=