From f631b025a4d087634b87ddc300537c6db2bf68d1 Mon Sep 17 00:00:00 2001 From: Luiz Aoqui Date: Tue, 15 Oct 2024 20:07:52 -0400 Subject: [PATCH] level: implement pflag.Value interface (#8) Implement pflag.Value interface for Level so it can be used as a CLI flag. Signed-off-by: Luiz Aoqui --- types/types.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/types/types.go b/types/types.go index af48f32..8755395 100644 --- a/types/types.go +++ b/types/types.go @@ -2,7 +2,15 @@ package types -import "net" +import ( + "errors" + "net" + "strings" +) + +var ( + ErrInvalidLogLevel = errors.New("invalid log level") +) type Level int @@ -15,6 +23,50 @@ const ( TraceLevel ) +func (l Level) String() string { + switch l { + case FatalLevel: + return "FATAL" + case ErrorLevel: + return "ERROR" + case WarnLevel: + return "WARN" + case InfoLevel: + return "INFO" + case DebugLevel: + return "DEBUG" + case TraceLevel: + return "TRACE" + default: + return "invalid" + } +} + +func (l Level) Type() string { + return "log level" +} + +func (l *Level) Set(v string) error { + switch strings.ToLower(v) { + case "fatal": + *l = FatalLevel + case "error": + *l = ErrorLevel + case "warn": + *l = WarnLevel + case "info": + *l = InfoLevel + case "debug": + *l = DebugLevel + case "trace": + *l = TraceLevel + default: + return ErrInvalidLogLevel + } + + return nil +} + const ( TimestampKey = "time" ErrorKey = "error"