mirror of https://gitlab.com/ngerakines/tavern.git
45 lines
810 B
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))
|
|
}
|