package cache

import (
	"encoding/json"
	"uauth/internal/interfaces"
)

const (
	Prefix = "sys:uauth:"
)

var (
	Client interfaces.Cacher
)

type encoded_value interface {
	MarshalBinary() ([]byte, error)
}

type decoded_value interface {
	UnmarshalBinary(bs []byte) error
}

func handleValue(value any) ([]byte, error) {
	var (
		bs  []byte
		err error
	)

	switch value.(type) {
	case []byte:
		return value.([]byte), nil
	}

	if imp, ok := value.(encoded_value); ok {
		bs, err = imp.MarshalBinary()
	} else {
		bs, err = json.Marshal(value)
	}

	return bs, err
}