package config import ( "encoding/json" "fmt" "os" "github.com/sirupsen/logrus" ) type TelegramConfig struct { ChannelID int64 `json:"channel_id"` Token string `json:"token"` } type LogConfig struct { Level logrus.Level } type jsonLogConfig struct { Level string `json:"level"` } type ListenerConfig struct { SockPath string `json:"sock_path"` } type Config struct { Telegram TelegramConfig Log LogConfig Listener ListenerConfig } type jsonConfig struct { Telegram TelegramConfig `json:"telegram"` Log jsonLogConfig `json:"log"` Listener ListenerConfig `json:"listener"` } func parseLevel(lvlStr string) logrus.Level { for _, lvl := range logrus.AllLevels { if lvl.String() == lvlStr { return lvl } } return logrus.InfoLevel } func New(filepath string) (*Config, error) { content, err := os.ReadFile(filepath) if err != nil { return nil, fmt.Errorf("failed to read config file %q: %w", filepath, err) } var jsonConf jsonConfig if err := json.Unmarshal(content, &jsonConf); err != nil { return nil, fmt.Errorf("failed to parse config file: %w", err) } return &Config{ Telegram: jsonConf.Telegram, Log: LogConfig{ Level: parseLevel(jsonConf.Log.Level), }, Listener: jsonConf.Listener, }, nil }