diff --git a/settings.go b/settings.go index db9c458..9433661 100644 --- a/settings.go +++ b/settings.go @@ -9,6 +9,7 @@ import ( "log" "os" "path/filepath" + "strconv" "strings" "sync" "sync/atomic" @@ -174,3 +175,44 @@ func ParseBool(value string) (bool, error) { return false, fmt.Errorf("cannot parse '%s' as bool", value) } } + +func (s *Settings) GetStringOrDefault(key, defaultValue string) string { + if got := s.GetKeyValue(key); len(got) > 0 { + return got + } else { + return defaultValue + } +} + +func (s *Settings) GetBoolOrDefault(key string, defaultValue bool) bool { + got := s.GetKeyValue(key) + parsed, err := ParseBool(got) + if err == nil { + return parsed + } else if len(got) > 0 { + log.Printf("Settings::GetBoolOrDefault error parsing key %q value %q as bool: %v\n", key, got, err) + } + return defaultValue +} + +func (s *Settings) GetDurationOrDefault(key string, defaultValue time.Duration) time.Duration { + got := s.GetKeyValue(key) + dur, err := time.ParseDuration(got) + if err == nil { + return dur + } else if len(got) > 0 { + log.Printf("Settings::GetDurationOrDefault error parsing key %q value %q as time.Duration: %v\n", key, got, err) + } + return defaultValue +} + +func (s *Settings) GetIntOrDefault(key string, defaultValue int) int { + got := s.GetKeyValue(key) + n, err := strconv.Atoi(got) + if err == nil { + return n + } else if len(got) > 0 { + log.Printf("Settings::GetIntOrDefault error parsing key %q value %q as int: %v\n", key, got, err) + } + return defaultValue +}