| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package cachex
- import (
- "encoding/json"
- "fmt"
- "strconv"
- "strings"
- )
- type ValueCodec[V any] interface {
- Encode(v V) (string, error)
- Decode(s string) (V, error)
- }
- type IntCodec struct{}
- func (c IntCodec) Encode(v int) (string, error) {
- return strconv.Itoa(v), nil
- }
- func (c IntCodec) Decode(s string) (int, error) {
- s = strings.TrimSpace(s)
- if s == "" {
- return 0, fmt.Errorf("empty int value")
- }
- return strconv.Atoi(s)
- }
- type StringCodec struct{}
- func (c StringCodec) Encode(v string) (string, error) { return v, nil }
- func (c StringCodec) Decode(s string) (string, error) { return s, nil }
- type JSONCodec[V any] struct{}
- func (c JSONCodec[V]) Encode(v V) (string, error) {
- b, err := json.Marshal(v)
- if err != nil {
- return "", err
- }
- return string(b), nil
- }
- func (c JSONCodec[V]) Decode(s string) (V, error) {
- var v V
- if strings.TrimSpace(s) == "" {
- return v, fmt.Errorf("empty json value")
- }
- if err := json.Unmarshal([]byte(s), &v); err != nil {
- return v, err
- }
- return v, nil
- }
|