Add context.go to identity, used for attaching identities to and retrieving them from a context.Context

Luke Granger-Brown created

Change summary

identity/context.go | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)

Detailed changes

identity/context.go 🔗

@@ -0,0 +1,26 @@
+package identity
+
+import (
+	"context"
+
+	"github.com/MichaelMure/git-bug/repository"
+)
+
+// identityCtxKey is a unique context key, accessible only in this struct.
+type identityCtxKey struct {
+	repo string
+}
+
+// AttachToContext attaches an Identity to a context.
+func AttachToContext(ctx context.Context, r repository.RepoCommon, u *Identity) context.Context {
+	return context.WithValue(ctx, identityCtxKey{r.GetPath()}, u)
+}
+
+// ForContext retrieves an Identity from the context, or nil if no Identity is present.
+func ForContext(ctx context.Context, r repository.RepoCommon) *Identity {
+	u, ok := ctx.Value(identityCtxKey{r.GetPath()}).(*Identity)
+	if !ok {
+		return nil
+	}
+	return u
+}