package middleware

import (
	"context"
	"fmt"
)

// keyWrapper is wrapper for context keys.
type keyWrapper string

const nsKey = keyWrapper("namespace")

// GetNamespace extract namespace from context.
func GetNamespace(ctx context.Context) (string, error) {
	ns, ok := ctx.Value(nsKey).(string)
	if !ok {
		return "", fmt.Errorf("couldn't get namespace from context")
	}

	return ns, nil
}

// SetNamespace sets namespace in the context.
func SetNamespace(ctx context.Context, ns string) context.Context {
	return context.WithValue(ctx, nsKey, ns)
}