Refactored main.go into cmd/jobsearch/main.go (in case separate commands are introduced later) which has required the options mechanism to change slightly as well as the logging.

This commit is contained in:
bwilliams committed 2026-10-09 09:29:42 +01:00
1 parent de3ebf68c5
commit 6436253629
14 files changed
+273 -224

No files matched your search

+9 -1
View File
@@ -24,6 +24,7 @@ import (
type JobSearchConfigLogging struct {
Level string
File string
}
// Default configuration
@@ -37,6 +38,7 @@ func defaultConfigLogging() JobSearchConfigLogging {
func (conf JobSearchConfigLogging) Map() map[string]any {
return map[string]any{
"level": conf.Level,
"file": conf.File,
}
}
@@ -55,6 +57,8 @@ func (c JobSearchConfigLogging) TypeOf(key string) (reflect.Kind, error) {
switch key {
case "level":
return reflect.String, nil
case "file":
return reflect.String, nil
default:
return reflect.Invalid, errors.New("unknown configuration key")
}
@@ -65,6 +69,8 @@ func (c JobSearchConfigLogging) ValueOf(key string) (any, error) {
switch key {
case "level":
return c.Level, nil
case "file":
return c.File, nil
default:
return "", errors.New("unknown configuration key")
}
@@ -82,12 +88,15 @@ func (c *JobSearchConfigLogging) SetValue(key string, value any) error {
return errors.New(
"invalid log level. Must be one of: debug, info, warn, error")
}
case "file":
c.File = value.(string)
default:
return errors.New("unknown configuration key")
}
return nil
}
// Utility methods for converting level strings to slog levels
func ConfigLevelToLogLevel(level string) slog.Level {
switch level {
case "debug":
@@ -102,7 +111,6 @@ func ConfigLevelToLogLevel(level string) slog.Level {
return 99
}
}
func (c *JobSearchConfigLogging) LogLevel() slog.Level {
return ConfigLevelToLogLevel(c.Level)
}
+7 -3
View File
@@ -81,10 +81,14 @@ func Init(cfgFile string, conf *JobSearchConfig) error {
return err
}
oldLogLevel := conf.Logging.Level
// Load configuration from Viper, ensure -debug and -quiet are retained
oldLogLevel := conf.Logging.LogLevel()
LoadFromViper(conf)
if ConfigLevelToLogLevel(oldLogLevel) < conf.Logging.LogLevel() {
conf.Logging.Level = oldLogLevel
if oldLogLevel == slog.LevelDebug {
conf.Logging.Level = "debug"
}
if oldLogLevel == slog.LevelError {
conf.Logging.Level = "error"
}
if conf.Logging.LogLevel() <= slog.LevelDebug {