# HG changeset patch # User Mikael Berthe # Date 1492111510 -7200 # Node ID bb9aaa5440c1ec983a911fe46aabb2daef2c87d7 # Parent 467dd91bf1f90b026d2f0bd62578a7652fc27baa Add Search() (using endpoint /search) diff -r 467dd91bf1f9 -r bb9aaa5440c1 search.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search.go Thu Apr 13 21:25:10 2017 +0200 @@ -0,0 +1,41 @@ +package gondole + +import ( + "encoding/json" + "fmt" + + "github.com/sendgrid/rest" +) + +// Search search for contents (accounts or statuses) and returns a Results +func (g *Client) Search(query string, resolve bool) (*Results, error) { + if query == "" { + return nil, ErrInvalidParameter + } + req := g.prepareRequest("search") + req.QueryParams["q"] = query + if resolve { + req.QueryParams["resolve"] = "true" + } + r, err := rest.API(req) + if err != nil { + return nil, fmt.Errorf("search: %s", err.Error()) + } + + // Check for error reply + var errorResult Error + if err := json.Unmarshal([]byte(r.Body), &errorResult); err == nil { + // The empty object is not an error + if errorResult.Text != "" { + return nil, fmt.Errorf("%s", errorResult.Text) + } + } + + // Not an error reply; let's unmarshal the data + var results Results + err = json.Unmarshal([]byte(r.Body), &results) + if err != nil { + return nil, fmt.Errorf("search API: %s", err.Error()) + } + return &results, nil +}