mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 10:41:03 +01:00
0297afdc6b
Former-commit-id: 3a907d20eaf2be4b0ee21aa2be3fcc2558b7fb4e
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 Transcoder = 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)
|
|
}
|