-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhistory_listing_request_options.go
104 lines (87 loc) · 3.53 KB
/
history_listing_request_options.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
96
97
98
99
100
101
102
103
104
package moexiss
import (
"net/url"
"strconv"
)
// HistoryListingTradingStatus represents a type of trading status for listing of MoEx ISS API
type HistoryListingTradingStatus string
// A section of HistoryListingTradingStatus values
const (
ListingTradingStatusUndefined HistoryListingTradingStatus = ""
ListingTradingStatusAll HistoryListingTradingStatus = "all"
ListingTradingStatusNotTraded HistoryListingTradingStatus = "nottraded"
ListingTradingStatusTraded HistoryListingTradingStatus = "traded"
)
// String representations of HistoryListingTradingStatus values
func (hlt HistoryListingTradingStatus) String() string {
return string(hlt)
}
// HistoryListingRequestOptions contains options which can be used as arguments
// for building requests to get listing information.
// MoEx ISS API docs:
//
// https://iss.moex.com/iss/reference/118
// https://iss.moex.com/iss/reference/119
// https://iss.moex.com/iss/reference/120
type HistoryListingRequestOptions struct {
lang Language // `lang` query parameter in url.URL
start uint64 // `start` query parameter in url.URL
status HistoryListingTradingStatus // `status` query parameter in url.URL
}
// HistoryListingRequestOptionsBuilder represents a builder of HistoryListingRequestOptions struct
type HistoryListingRequestOptionsBuilder struct {
options *HistoryListingRequestOptions
}
// NewHistoryListingReqOptionsBuilder is a constructor of HistoryListingRequestOptionsBuilder
func NewHistoryListingReqOptionsBuilder() *HistoryListingRequestOptionsBuilder {
return &HistoryListingRequestOptionsBuilder{options: &HistoryListingRequestOptions{}}
}
// Build builds HistoryListingRequestOptions from HistoryListingRequestOptionsBuilder
func (b *HistoryListingRequestOptionsBuilder) Build() *HistoryListingRequestOptions {
return b.options
}
// Lang sets 'lang' parameter to a request
// Language of the result set: 'ru' or 'en'
// 'ru' by default
func (b *HistoryListingRequestOptionsBuilder) Lang(lang Language) *HistoryListingRequestOptionsBuilder {
b.options.lang = lang
return b
}
// Start sets 'start' parameter to a request
// Row number (the number of the first row is 0) to begin the result set with.
// If the result set contains no data then the specified number is greater than
// the total number of rows available.
// 0 by default
func (b *HistoryListingRequestOptionsBuilder) Start(start uint64) *HistoryListingRequestOptionsBuilder {
b.options.start = start
return b
}
// Status sets 'status' parameter to a request
// Trading status filter: ListingTradingStatusAll, ListingTradingStatusNotTraded or ListingTradingStatusTraded
// ListingTradingStatusAll status by default
func (b *HistoryListingRequestOptionsBuilder) Status(status HistoryListingTradingStatus) *HistoryListingRequestOptionsBuilder {
b.options.status = status
return b
}
// addHistoryListingRequestOptions sets parameters into *url.URL
// from HistoryListingRequestOptions struct and returns it back
func addHistoryListingRequestOptions(url *url.URL, options *HistoryListingRequestOptions) *url.URL {
q := url.Query()
q.Set("iss.meta", "off")
q.Set("iss.json", "extended")
if options == nil {
url.RawQuery = q.Encode()
return url
}
if options.lang != LangUndefined {
q.Set("lang", options.lang.String())
}
if options.start != 0 {
q.Set("start", strconv.FormatUint(options.start, 10))
}
if options.status != ListingTradingStatusUndefined && options.status != ListingTradingStatusAll {
q.Set("status", options.status.String())
}
url.RawQuery = q.Encode()
return url
}