From 6a53435ee149008a7a240378b8145b396475d8a4 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Tue, 6 Oct 2020 11:15:35 -0400 Subject: [PATCH] redis: import middleware from gql.sr.ht --- redis/middleware.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 redis/middleware.go diff --git a/redis/middleware.go b/redis/middleware.go new file mode 100644 index 0000000000000000000000000000000000000000..af718d138ab8c542708b50c6a42e23936cb53121 --- /dev/null +++ b/redis/middleware.go @@ -0,0 +1,34 @@ +package redis + +import ( + "context" + "errors" + "net/http" + + goRedis "github.com/go-redis/redis/v8" +) + +var redisCtxKey = &contextKey{"redis"} + +type contextKey struct { + name string +} + +func Middleware(client *goRedis.Client) func(http.Handler) http.Handler { + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx := context.WithValue(r.Context(), redisCtxKey, client) + + r = r.WithContext(ctx) + next.ServeHTTP(w, r) + }) + } +} + +func ForContext(ctx context.Context) *goRedis.Client { + raw, ok := ctx.Value(redisCtxKey).(*goRedis.Client) + if !ok { + panic(errors.New("Invalid redis context")) + } + return raw +}