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")
}
}()