mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"github.com/muety/wakapi/models"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
func ParseHeartbeats(r *http.Request) ([]*models.Heartbeat, error) {
|
||
|
heartbeats, err := tryParseBulk(r)
|
||
|
if err == nil {
|
||
|
return heartbeats, err
|
||
|
}
|
||
|
|
||
|
heartbeats, err = tryParseSingle(r)
|
||
|
if err == nil {
|
||
|
return heartbeats, err
|
||
|
}
|
||
|
|
||
|
return []*models.Heartbeat{}, err
|
||
|
}
|
||
|
|
||
|
func tryParseBulk(r *http.Request) ([]*models.Heartbeat, error) {
|
||
|
var heartbeats []*models.Heartbeat
|
||
|
|
||
|
body, _ := ioutil.ReadAll(r.Body)
|
||
|
r.Body.Close()
|
||
|
r.Body = ioutil.NopCloser(bytes.NewBuffer(body))
|
||
|
|
||
|
dec := json.NewDecoder(ioutil.NopCloser(bytes.NewBuffer(body)))
|
||
|
if err := dec.Decode(&heartbeats); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return heartbeats, nil
|
||
|
}
|
||
|
|
||
|
func tryParseSingle(r *http.Request) ([]*models.Heartbeat, error) {
|
||
|
var heartbeat models.Heartbeat
|
||
|
|
||
|
body, _ := ioutil.ReadAll(r.Body)
|
||
|
r.Body.Close()
|
||
|
r.Body = ioutil.NopCloser(bytes.NewBuffer(body))
|
||
|
|
||
|
dec := json.NewDecoder(ioutil.NopCloser(bytes.NewBuffer(body)))
|
||
|
if err := dec.Decode(&heartbeat); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return []*models.Heartbeat{&heartbeat}, nil
|
||
|
}
|