| 1234567891011121314151617181920212223242526272829303132333435363738 | package protocolimport (	"context")type key intconst (	userKey key = iota	requestKey)// ContextWithUser returns a context combined with a User.func ContextWithUser(ctx context.Context, user *User) context.Context {	return context.WithValue(ctx, userKey, user)}// UserFromContext extracts a User from the given context, if any.func UserFromContext(ctx context.Context) *User {	v := ctx.Value(userKey)	if v == nil {		return nil	}	return v.(*User)}func ContextWithRequestHeader(ctx context.Context, request *RequestHeader) context.Context {	return context.WithValue(ctx, requestKey, request)}func RequestHeaderFromContext(ctx context.Context) *RequestHeader {	request := ctx.Value(requestKey)	if request == nil {		return nil	}	return request.(*RequestHeader)}
 |