pve-go/helper.go
2020-11-01 20:09:16 +01:00

68 lines
1.1 KiB
Go

// Copyright (C) 2020 Marius Schellenberger
package pve
import (
"bytes"
"encoding/json"
"errors"
"io"
"net/http"
"net/url"
"strings"
)
type data struct {
Data json.RawMessage `json:"data"`
Errors json.RawMessage `json:"errors"`
}
func unwrapData(resp *http.Response, v interface{}) error {
if resp.Body == nil {
return nil
}
var d data
err := json.NewDecoder(resp.Body).Decode(&d)
if err != nil {
return err
}
if d.Errors != nil {
return errors.New(string(d.Errors))
}
if v == nil {
return nil
}
return json.Unmarshal(d.Data, &v)
}
type httpbody map[string]string
func (b httpbody) Reader() io.Reader {
data := url.Values{}
for k, v := range b {
data.Set(k, v)
}
return strings.NewReader(data.Encode())
}
type unreadBuffer struct {
b *bytes.Buffer
save []byte
}
func newUnreadBuffer() (ub *unreadBuffer, buf *bytes.Buffer) {
buf = new(bytes.Buffer)
ub = &unreadBuffer{b: buf}
return
}
func (u *unreadBuffer) Save() {
u.save = u.b.Bytes()
}
func (u *unreadBuffer) Reset(b **bytes.Buffer) {
if u.save != nil && b != nil {
u.b = bytes.NewBuffer(u.save)
*b = u.b
}
}