38 lines
817 B
Go
38 lines
817 B
Go
|
package sessionresolver
|
||
|
|
||
|
//
|
||
|
// JSON codec
|
||
|
//
|
||
|
|
||
|
import "encoding/json"
|
||
|
|
||
|
// jsonCodec encodes to/decodes from JSON.
|
||
|
type jsonCodec interface {
|
||
|
// Encode encodes v as a JSON stream of bytes.
|
||
|
Encode(v interface{}) ([]byte, error)
|
||
|
|
||
|
// Decode decodes b from a JSON stream of bytes.
|
||
|
Decode(b []byte, v interface{}) error
|
||
|
}
|
||
|
|
||
|
// codec always returns a valid jsonCodec.
|
||
|
func (r *Resolver) codec() jsonCodec {
|
||
|
if r.jsonCodec != nil {
|
||
|
return r.jsonCodec
|
||
|
}
|
||
|
return &jsonCodecStdlib{}
|
||
|
}
|
||
|
|
||
|
// jsonCodecStdlib is the default codec.
|
||
|
type jsonCodecStdlib struct{}
|
||
|
|
||
|
// Decode implements jsonCodec.Decode.
|
||
|
func (*jsonCodecStdlib) Decode(b []byte, v interface{}) error {
|
||
|
return json.Unmarshal(b, v)
|
||
|
}
|
||
|
|
||
|
// Encode implements jsonCodec.Encode.
|
||
|
func (*jsonCodecStdlib) Encode(v interface{}) ([]byte, error) {
|
||
|
return json.Marshal(v)
|
||
|
}
|