/* Copyright © 2026 Craig Williams This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ package config import ( "errors" "log/slog" "reflect" ) const JSCKLogging string = "logging" type JobSearchConfigLogging struct { Level string `cfg:"level" default:"warn"` File string `cfg:"file"` } /* * General section functions * See related methods in section.go */ func (c *JobSearchConfigLogging) Keys() []string { return keysOf(c) } func (c JobSearchConfigLogging) Map() map[string]any { return mapOf(c) } func (c JobSearchConfigLogging) Flatten() map[string]any { return flattenOf(JSCKLogging, c) } func (c JobSearchConfigLogging) TypeOf(key string) (reflect.Kind, error) { return typeOf(c, key) } func (c JobSearchConfigLogging) ValueOf(key string) (any, error) { return valueOf(c, key) } func (c *JobSearchConfigLogging) SetValue(key string, value any) error { return setValue(c, key, value) } /* Section specific functions */ // Checks values before they are stored (see validator) func (c *JobSearchConfigLogging) validate(key string, value any) error { switch key { case "level": switch value.(string) { case "debug", "info", "warn", "error": default: return errors.New( "invalid log level. Must be one of: debug, info, warn, error") } } return nil } // Utility methods for converting level strings to slog levels func ConfigLevelToLogLevel(level string) slog.Level { switch level { case "debug": return slog.LevelDebug case "info": return slog.LevelInfo case "warn": return slog.LevelWarn case "error": return slog.LevelError default: return 99 } } func (c *JobSearchConfigLogging) LogLevel() slog.Level { return ConfigLevelToLogLevel(c.Level) }