mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
b62080c4bb
Former-commit-id: 49fcdb93106a78f0a24ad3fb4d8725e35e98451a
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package sessions
|
|
|
|
import "encoding/json"
|
|
|
|
type (
|
|
// Marshaler is the common marshaler interface, used by transcoder.
|
|
Marshaler interface {
|
|
Marshal(interface{}) ([]byte, error)
|
|
}
|
|
// Unmarshaler is the common unmarshaler interface, used by transcoder.
|
|
Unmarshaler interface {
|
|
Unmarshal([]byte, interface{}) error
|
|
}
|
|
// Transcoder is the interface that transcoders should implement, it includes just the `Marshaler` and the `Unmarshaler`.
|
|
Transcoder interface {
|
|
Marshaler
|
|
Unmarshaler
|
|
}
|
|
)
|
|
|
|
// DefaultTranscoder is the default transcoder across databases, it's the JSON by default.
|
|
// Change it if you want a different serialization/deserialization inside your session databases (when `UseDatabase` is used).
|
|
var DefaultTranscoder = defaultTranscoder{}
|
|
|
|
type defaultTranscoder struct{}
|
|
|
|
func (d defaultTranscoder) Marshal(value interface{}) ([]byte, error) {
|
|
if tr, ok := value.(Marshaler); ok {
|
|
return tr.Marshal(value)
|
|
}
|
|
|
|
if jsonM, ok := value.(json.Marshaler); ok {
|
|
return jsonM.MarshalJSON()
|
|
}
|
|
|
|
return json.Marshal(value)
|
|
}
|
|
|
|
func (d defaultTranscoder) Unmarshal(b []byte, outPtr interface{}) error {
|
|
if tr, ok := outPtr.(Unmarshaler); ok {
|
|
return tr.Unmarshal(b, outPtr)
|
|
}
|
|
|
|
if jsonUM, ok := outPtr.(json.Unmarshaler); ok {
|
|
return jsonUM.UnmarshalJSON(b)
|
|
}
|
|
|
|
return json.Unmarshal(b, outPtr)
|
|
}
|