Skip to content

Commit

Permalink
feat: increased slog.Attr typing protection
Browse files Browse the repository at this point in the history
  • Loading branch information
dd84ai committed Jan 27, 2024
1 parent 3e3b4c4 commit 6dc5129
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 28 deletions.
8 changes: 4 additions & 4 deletions examples/params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ func TestSlogging(t *testing.T) {

func NestedParam(value string) logcore.SlogParam {
return func(c *logcore.SlogGroup) {
c.Slogs = append(c.Slogs, slog.Group("nested", logcore.TurnMapToAttrs(map[string]any{
c.Append(slog.Group("nested", logcore.AttrsToAny(logcore.TurnMapToAttrs(map[string]any{
"smth": "abc",
"number": 123,
})...))
}))...))
}
}

Expand All @@ -49,8 +49,8 @@ type Smth struct {

func NestedStructParam(value string) logcore.SlogParam {
return func(c *logcore.SlogGroup) {
c.Slogs = append(c.Slogs,
slog.Group("nested", logcore.TurnStructToAttrs(Smth{Value1: "123", Number1: 4})...),
c.Append(
slog.Group("nested", logcore.AttrsToAny(logcore.TurnStructToAttrs(Smth{Value1: "123", Number1: 4}))...),
slog.Int("not_nested", 345),
)
}
Expand Down
47 changes: 27 additions & 20 deletions logcore/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,17 @@ import (
)

type SlogGroup struct {
Slogs []SlogAttr
slogs []SlogAttr
}

func (s SlogGroup) Render() []SlogAttr {
return s.Slogs
return s.slogs
}

func (s SlogGroup) Append(params ...slog.Attr) {
for _, param := range params {
s.slogs = append(s.slogs, param)
}
}

type SlogParam func(r *SlogGroup)
Expand All @@ -29,67 +35,67 @@ func newSlogArgs(opts ...SlogParam) []SlogAttr {

func TestParam(value int) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Int("test_param", value))
c.Append(slog.Int("test_param", value))
}
}

func Any(key string, value any) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.String(key, fmt.Sprintf("%v", value)))
c.Append(slog.String(key, fmt.Sprintf("%v", value)))
}
}

func String(key string, value string) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.String(key, value))
c.Append(slog.String(key, value))
}
}

func Int(key string, value int) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Int(key, value))
c.Append(slog.Int(key, value))
}
}
func Int64(key string, value int64) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Int64(key, value))
c.Append(slog.Int64(key, value))
}
}
func Float32(key string, value float32) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Float64(key, float64(value)))
c.Append(slog.Float64(key, float64(value)))
}
}
func Time(key string, value time.Time) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Time(key, value))
c.Append(slog.Time(key, value))
}
}
func Float64(key string, value float64) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Float64(key, value))
c.Append(slog.Float64(key, value))
}
}
func Bool(key string, value bool) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Bool(key, value))
c.Append(slog.Bool(key, value))
}
}

func Expected(value any) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.String("expected", fmt.Sprintf("%v", value)))
c.Append(slog.String("expected", fmt.Sprintf("%v", value)))
}
}
func Actual(value any) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.String("actual", fmt.Sprintf("%v", value)))
c.Append(slog.String("actual", fmt.Sprintf("%v", value)))
}
}

func OptError(err error) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs,
c.Append(
slog.String("error_msg", fmt.Sprintf("%v", err)),
slog.String("error_type", fmt.Sprintf("%T", err)),
)
Expand All @@ -102,8 +108,8 @@ func Items[T any](value []T, item_name string) SlogParam {
if len(sliced_string) > 300 {
sliced_string = sliced_string[:300] + "...sliced string"
}
c.Slogs = append(c.Slogs, slog.String(item_name, fmt.Sprintf("%v", value)))
c.Slogs = append(c.Slogs, slog.String(fmt.Sprintf("%s_len", item_name), fmt.Sprintf("%d", len(value))))
c.Append(slog.String(item_name, fmt.Sprintf("%v", value)))
c.Append(slog.String(fmt.Sprintf("%s_len", item_name), fmt.Sprintf("%d", len(value))))
}
}

Expand All @@ -117,24 +123,25 @@ func Args(value []string) SlogParam {

func Bytes(key string, value []byte) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.String(key, string(value)))
c.Append(slog.String(key, string(value)))
}
}

func Struct(value any) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, TurnMapToAttrs(StructToMap(value))...)
c.Append(TurnMapToAttrs(StructToMap(value))...)
}
}

func NestedStruct(key string, value any) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, slog.Group(key, TurnMapToAttrs(StructToMap(value))...))
attrs := TurnMapToAttrs(StructToMap(value))
c.Append(slog.Group(key, AttrsToAny(attrs)...))
}
}

func Map(value map[string]any) SlogParam {
return func(c *SlogGroup) {
c.Slogs = append(c.Slogs, TurnMapToAttrs(value)...)
c.Append(TurnMapToAttrs(value)...)
}
}
20 changes: 16 additions & 4 deletions logcore/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,18 @@ import (
"time"
)

func CompL[T any, V any](objs []T, lambda func(x T) V) []V {
results := make([]V, 0, len(objs))
for _, obj := range objs {
results = append(results, lambda(obj))
}
return results
}

func AttrsToAny(attrs []slog.Attr) []any {
return CompL(attrs, func(x slog.Attr) any { return any(x) })
}

func logGroupFiles() slog.Attr {
return slog.Group("files",
"file3", GetCallingFile(3),
Expand All @@ -30,8 +42,8 @@ func StructToMap(somestruct any) map[string]any {
return mapresult
}

func TurnMapToAttrs(params map[string]any) []SlogAttr {
anies := []any{}
func TurnMapToAttrs(params map[string]any) []slog.Attr {
anies := []slog.Attr{}
for key, value := range params {
switch v := value.(type) {
case string:
Expand All @@ -49,7 +61,7 @@ func TurnMapToAttrs(params map[string]any) []SlogAttr {
case time.Time:
anies = append(anies, slog.Time(key, v))
case map[string]any:
anies = append(anies, slog.Group(key, TurnMapToAttrs(v)...))
anies = append(anies, slog.Group(key, AttrsToAny(TurnMapToAttrs(v))...))
default:
anies = append(anies, slog.String(key, fmt.Sprintf("%v", v)))
}
Expand All @@ -58,6 +70,6 @@ func TurnMapToAttrs(params map[string]any) []SlogAttr {
return anies
}

func TurnStructToAttrs(somestruct any) []SlogAttr {
func TurnStructToAttrs(somestruct any) []slog.Attr {
return TurnMapToAttrs(StructToMap(somestruct))
}

0 comments on commit 6dc5129

Please sign in to comment.