mirror of
https://github.com/foomo/contentserver.git
synced 2025-10-16 12:25:44 +00:00
response wrapper to fix json unmarshal issues (#21)
* chore: change wrapping * fix: fix mapping bugs Co-authored-by: Stefan Martinov <stefan.martinov@gmail.com>
This commit is contained in:
parent
f75f3a09ae
commit
0ab7935a05
@ -33,49 +33,69 @@ func NewHTTPClient(server string) (c *Client, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update tell the server to update itself
|
// Update tell the server to update itself
|
||||||
func (c *Client) Update() (response *responses.Update, err error) {
|
func (c *Client) Update() (*responses.Update, error) {
|
||||||
response = &responses.Update{}
|
type serverResponse struct {
|
||||||
err = c.t.call(server.HandlerUpdate, &requests.Update{}, response)
|
Reply *responses.Update
|
||||||
return
|
}
|
||||||
|
resp := serverResponse{}
|
||||||
|
if err := c.t.call(server.HandlerUpdate, &requests.Update{}, &resp); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp.Reply, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetContent request site content
|
// GetContent request site content
|
||||||
func (c *Client) GetContent(request *requests.Content) (response *content.SiteContent, err error) {
|
func (c *Client) GetContent(request *requests.Content) (*content.SiteContent, error) {
|
||||||
response = &content.SiteContent{}
|
type serverResponse struct {
|
||||||
err = c.t.call(server.HandlerGetContent, request, response)
|
Reply *content.SiteContent
|
||||||
return
|
}
|
||||||
|
resp := serverResponse{}
|
||||||
|
if err := c.t.call(server.HandlerGetContent, request, &resp); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp.Reply, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetURIs resolve uris for ids in a dimension
|
// GetURIs resolve uris for ids in a dimension
|
||||||
func (c *Client) GetURIs(dimension string, IDs []string) (uriMap map[string]string, err error) {
|
func (c *Client) GetURIs(dimension string, IDs []string) (map[string]string, error) {
|
||||||
uriMap = map[string]string{}
|
type serverResponse struct {
|
||||||
err = c.t.call(
|
Reply map[string]string
|
||||||
server.HandlerGetURIs,
|
}
|
||||||
&requests.URIs{
|
|
||||||
Dimension: dimension,
|
resp := serverResponse{}
|
||||||
IDs: IDs,
|
if err := c.t.call(server.HandlerGetURIs, &requests.URIs{Dimension: dimension, IDs: IDs}, &resp); err != nil {
|
||||||
},
|
return nil, err
|
||||||
&uriMap,
|
}
|
||||||
)
|
return resp.Reply, nil
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNodes request nodes
|
// GetNodes request nodes
|
||||||
func (c *Client) GetNodes(env *requests.Env, nodes map[string]*requests.Node) (nodesResponse map[string]*content.Node, err error) {
|
func (c *Client) GetNodes(env *requests.Env, nodes map[string]*requests.Node) (map[string]*content.Node, error) {
|
||||||
r := &requests.Nodes{
|
r := &requests.Nodes{
|
||||||
Env: env,
|
Env: env,
|
||||||
Nodes: nodes,
|
Nodes: nodes,
|
||||||
}
|
}
|
||||||
nodesResponse = map[string]*content.Node{}
|
type serverResponse struct {
|
||||||
err = c.t.call(server.HandlerGetNodes, r, &nodesResponse)
|
Reply map[string]*content.Node
|
||||||
return
|
}
|
||||||
|
resp := serverResponse{}
|
||||||
|
if err := c.t.call(server.HandlerGetNodes, r, &resp); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp.Reply, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRepo get the whole repo
|
// GetRepo get the whole repo
|
||||||
func (c *Client) GetRepo() (response map[string]*content.RepoNode, err error) {
|
func (c *Client) GetRepo() (map[string]*content.RepoNode, error) {
|
||||||
response = map[string]*content.RepoNode{}
|
type serverResponse struct {
|
||||||
err = c.t.call(server.HandlerGetRepo, &requests.Repo{}, &response)
|
Reply map[string]*content.RepoNode
|
||||||
return
|
}
|
||||||
|
resp := serverResponse{}
|
||||||
|
if err := c.t.call(server.HandlerGetRepo, &requests.Repo{}, &resp); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp.Reply, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) ShutDown() {
|
func (c *Client) ShutDown() {
|
||||||
|
|||||||
@ -42,6 +42,8 @@ func (ht *httpTransport) call(handler server.Handler, request interface{}, respo
|
|||||||
if errDo != nil {
|
if errDo != nil {
|
||||||
return errDo
|
return errDo
|
||||||
}
|
}
|
||||||
|
defer httpResponse.Body.Close()
|
||||||
|
|
||||||
if httpResponse.StatusCode != http.StatusOK {
|
if httpResponse.StatusCode != http.StatusOK {
|
||||||
return errors.New("non 200 reply")
|
return errors.New("non 200 reply")
|
||||||
}
|
}
|
||||||
@ -49,13 +51,8 @@ func (ht *httpTransport) call(handler server.Handler, request interface{}, respo
|
|||||||
return errors.New("empty response body")
|
return errors.New("empty response body")
|
||||||
}
|
}
|
||||||
responseBytes, errRead := ioutil.ReadAll(httpResponse.Body)
|
responseBytes, errRead := ioutil.ReadAll(httpResponse.Body)
|
||||||
httpResponse.Body.Close()
|
|
||||||
if errRead != nil {
|
if errRead != nil {
|
||||||
return errRead
|
return errRead
|
||||||
}
|
}
|
||||||
errUnmarshal := json.Unmarshal(responseBytes, &serverResponse{Reply: response})
|
return json.Unmarshal(responseBytes, response)
|
||||||
if errUnmarshal != nil {
|
|
||||||
return errUnmarshal
|
|
||||||
}
|
|
||||||
return errUnmarshal
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,10 +15,6 @@ import (
|
|||||||
|
|
||||||
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
||||||
|
|
||||||
type serverResponse struct {
|
|
||||||
Reply interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
type connReturn struct {
|
type connReturn struct {
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
err error
|
err error
|
||||||
@ -113,8 +109,8 @@ func (c *socketTransport) call(handler server.Handler, request interface{}, resp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// unmarshal response
|
// unmarshal response
|
||||||
responseJSONErr := json.Unmarshal(responseBytes, &serverResponse{Reply: response})
|
errResponse := json.Unmarshal(responseBytes, response)
|
||||||
if responseJSONErr != nil {
|
if errResponse != nil {
|
||||||
// is it an error ?
|
// is it an error ?
|
||||||
var (
|
var (
|
||||||
remoteErr = responses.Error{}
|
remoteErr = responses.Error{}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user