Skip to content

Commit

Permalink
add context logger middleware and fixed get request decoding
Browse files Browse the repository at this point in the history
  • Loading branch information
dkotik committed Feb 28, 2024
1 parent 6b005b3 commit 49ee6a2
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
48 changes: 48 additions & 0 deletions middleware/ctxlogger/ctxlogger.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
Package ctxlogger provides an [htadaptor.Middleware] that injects
a given logger into context so that it can be recovered
later in the stack for use.
*/
package ctxlogger

import (
"context"
"log/slog"
"net/http"

"github.com/dkotik/htadaptor"
)

type contextKeyType struct{}

var contextKey = contextKeyType{}

func FromContext(ctx context.Context) *slog.Logger {
logger, ok := ctx.Value(contextKey).(*slog.Logger)
if ok {
return logger
}
return slog.Default()
}

func NewContext(parent context.Context, l *slog.Logger) context.Context {
if l == nil {
l = slog.Default()
}
return context.WithValue(parent, contextKey, l)
}

// New creates an [htadaptor.Middleware] that injects [slog.Logger]
// into request context so it can be recovered later using [FromContext].
func New(logger *slog.Logger) htadaptor.Middleware {
return func(next http.Handler) http.Handler {
if next == nil {
panic("cannot use a <nil> next handler")
}
return http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
next.ServeHTTP(w, r.WithContext(NewContext(r.Context(), logger)))
},
)
}
}
8 changes: 8 additions & 0 deletions reflectd/decoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@ func (d *Decoder) applyExtractors(values url.Values, r *http.Request) (err error
}

func (d *Decoder) Decode(v any, r *http.Request) (err error) {
if r.Method == http.MethodGet || r.Body == nil {
values := make(url.Values)
if err = d.applyExtractors(values, r); err != nil {
return err
}
return structSchema.Decode(v, values)
}

ct := r.Header.Get("Content-Type")
switch ct {
case "application/x-www-form-urlencoded":
Expand Down

0 comments on commit 49ee6a2

Please sign in to comment.