1package photocopy
2
3import (
4 "bytes"
5 "context"
6 "encoding/json"
7 "fmt"
8 "io"
9 "net/http"
10)
11
12type NervanaItem struct {
13 Text string `json:"text"`
14 Label string `json:"label"`
15 EntityId string `json:"entityId"`
16 Description string `json:"description"`
17}
18
19func (p *Photocopy) newNervanaRequest(ctx context.Context, text string) (*http.Request, error) {
20 payload := map[string]string{
21 "text": text,
22 "language": "en",
23 }
24
25 b, err := json.Marshal(payload)
26 if err != nil {
27 return nil, err
28 }
29
30 req, err := http.NewRequestWithContext(ctx, "GET", p.nervanaEndpoint, bytes.NewReader(b))
31
32 req.Header.Set("Authorization", "Bearer "+p.nervanaApiKey)
33
34 return req, err
35}
36
37func (p *Photocopy) makeNervanaRequest(ctx context.Context, text string) ([]NervanaItem, error) {
38 req, err := p.newNervanaRequest(ctx, text)
39 if err != nil {
40 return nil, err
41 }
42
43 resp, err := p.nervanaClient.Do(req)
44 if err != nil {
45 return nil, err
46 }
47 defer resp.Body.Close()
48
49 if resp.StatusCode != 200 {
50 io.Copy(io.Discard, resp.Body)
51 return nil, fmt.Errorf("received non-200 response code: %d", resp.StatusCode)
52 }
53
54 var nervanaResp []NervanaItem
55 if err := json.NewDecoder(resp.Body).Decode(&nervanaResp); err != nil {
56 return nil, err
57 }
58
59 return nervanaResp, nil
60}