package protocol

import (
	"context"
)

type key int

const (
	userKey key = iota
	requestKey
)

// ContextWithUser returns a context combined with a User.
func ContextWithUser(ctx context.Context, user *MemoryUser) context.Context {
	return context.WithValue(ctx, userKey, user)
}

// UserFromContext extracts a User from the given context, if any.
func UserFromContext(ctx context.Context) *MemoryUser {
	v := ctx.Value(userKey)
	if v == nil {
		return nil
	}
	return v.(*MemoryUser)
}

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)
}