/
search_stream.go
95 lines (77 loc) · 2.02 KB
/
search_stream.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package actions
import (
"encoding/json"
"net/url"
"strings"
"github.com/appbaseio/go-appbase/connection"
)
type SearchStreamResponse struct {
responseDecoder *json.Decoder
}
func (s *SearchStreamResponse) Next() (getResponse *GetResponse, err error) {
getResponse = &GetResponse{}
err = s.responseDecoder.Decode(getResponse)
if err != nil {
return nil, err
}
return getResponse, nil
}
type SearchStreamService struct {
SearchService
}
func NewSearchStreamService(conn *connection.Connection) *SearchStreamService {
return &SearchStreamService{
SearchService{
conn: conn,
options: &SearchServiceOptions{},
},
}
}
func (s *SearchStreamService) Type(_type string) *SearchStreamService {
s.options.Type = []string{_type}
return s
}
func (s *SearchStreamService) Types(_types []string) *SearchStreamService {
s.options.Type = _types
return s
}
func (s *SearchStreamService) Body(body string) *SearchStreamService {
s.options.Body = body
return s
}
func (s *SearchStreamService) Pretty() *SearchStreamService {
if s.options.Params != nil {
s.options.Params.Set("pretty", "true")
} else {
params := url.Values{}
params.Set("pretty", "true")
s.options.Params = params
}
return s
}
func (s *SearchStreamService) URLParams(params url.Values) *SearchStreamService {
if s.options.Params.Get("pretty") == "true" {
s.options.Params = params
s.options.Params.Set("pretty", "true")
} else {
s.options.Params = params
}
return s
}
func (s *SearchStreamService) Do() (*SearchStreamResponse, error) {
err := validate(s.options)
if err != nil {
return nil, err
}
if s.options.Params == nil {
s.options.Params = make(url.Values)
}
s.options.Params.Del("stream")
s.options.Params.Set("streamonly", "true")
responseDecoder, err := s.conn.PerformRequest("POST", strings.Join([]string{strings.Join(s.options.Type, ","), "_search"}, "/"), s.options.Params, s.options.Body)
if err != nil {
return nil, err
}
searchStreamResponse := &SearchStreamResponse{responseDecoder}
return searchStreamResponse, nil
}