tavern/storage/payload.go

45 lines
810 B
Go

package storage
import (
"bytes"
"encoding/json"
"io"
"strings"
)
type Payload map[string]interface{}
func (p Payload) Write(w io.Writer) error {
e := json.NewEncoder(w)
e.SetEscapeHTML(false)
return e.Encode(p)
}
func (p Payload) Bytes() []byte {
var buf bytes.Buffer
p.Write(&buf)
return buf.Bytes()
}
func EmptyPayload() Payload {
return make(map[string]interface{})
}
func PayloadFromReader(r io.Reader) (Payload, error) {
lr := io.LimitReader(r, 1048576)
decoder := json.NewDecoder(lr)
var p Payload
if err := decoder.Decode(&p); err != nil {
return nil, err
}
return p, nil
}
func PayloadFromBytes(b []byte) (Payload, error) {
return PayloadFromReader(bytes.NewReader(b))
}
func PayloadFromString(s string) (Payload, error) {
return PayloadFromReader(strings.NewReader(s))
}