diff --git a/pkg/exchange/max/maxapi/get_k_lines_request.go b/pkg/exchange/max/maxapi/get_k_lines_request.go new file mode 100644 index 000000000..194b23bcc --- /dev/null +++ b/pkg/exchange/max/maxapi/get_k_lines_request.go @@ -0,0 +1,27 @@ +package max + +import ( + "time" + + "github.com/c9s/requestgen" +) + +//go:generate -command GetRequest requestgen -method GET +//go:generate -command PostRequest requestgen -method POST +//go:generate -command DeleteRequest requestgen -method DELETE + +type KLineData []float64 + +//go:generate GetRequest -url "/api/v2/k" -type GetKLinesRequest -responseType []KLineData +type GetKLinesRequest struct { + client requestgen.AuthenticatedAPIClient + + market string `param:"market,required"` + limit *int `param:"limit"` + period *int `param:"period"` + timestamp time.Time `param:"timestamp,seconds"` +} + +func (s *PublicService) NewGetKLinesRequest() *GetKLinesRequest { + return &GetKLinesRequest{client: s.client} +} diff --git a/pkg/exchange/max/maxapi/get_k_lines_request_requestgen.go b/pkg/exchange/max/maxapi/get_k_lines_request_requestgen.go new file mode 100644 index 000000000..cd62fb1ea --- /dev/null +++ b/pkg/exchange/max/maxapi/get_k_lines_request_requestgen.go @@ -0,0 +1,193 @@ +// Code generated by "requestgen -method GET -url /api/v2/k -type GetKLinesRequest -responseType []KLineData"; DO NOT EDIT. + +package max + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "reflect" + "regexp" + "strconv" + "time" +) + +func (g *GetKLinesRequest) Market(market string) *GetKLinesRequest { + g.market = market + return g +} + +func (g *GetKLinesRequest) Limit(limit int) *GetKLinesRequest { + g.limit = &limit + return g +} + +func (g *GetKLinesRequest) Period(period int) *GetKLinesRequest { + g.period = &period + return g +} + +func (g *GetKLinesRequest) Timestamp(timestamp time.Time) *GetKLinesRequest { + g.timestamp = timestamp + return g +} + +// GetQueryParameters builds and checks the query parameters and returns url.Values +func (g *GetKLinesRequest) GetQueryParameters() (url.Values, error) { + var params = map[string]interface{}{} + + query := url.Values{} + for _k, _v := range params { + query.Add(_k, fmt.Sprintf("%v", _v)) + } + + return query, nil +} + +// GetParameters builds and checks the parameters and return the result in a map object +func (g *GetKLinesRequest) GetParameters() (map[string]interface{}, error) { + var params = map[string]interface{}{} + // check market field -> json key market + market := g.market + + // TEMPLATE check-required + if len(market) == 0 { + return nil, fmt.Errorf("market is required, empty string given") + } + // END TEMPLATE check-required + + // assign parameter of market + params["market"] = market + // check limit field -> json key limit + if g.limit != nil { + limit := *g.limit + + // assign parameter of limit + params["limit"] = limit + } else { + } + // check period field -> json key period + if g.period != nil { + period := *g.period + + // assign parameter of period + params["period"] = period + } else { + } + // check timestamp field -> json key timestamp + timestamp := g.timestamp + + // assign parameter of timestamp + // convert time.Time to seconds time stamp + params["timestamp"] = strconv.FormatInt(timestamp.Unix(), 10) + + return params, nil +} + +// GetParametersQuery converts the parameters from GetParameters into the url.Values format +func (g *GetKLinesRequest) GetParametersQuery() (url.Values, error) { + query := url.Values{} + + params, err := g.GetParameters() + if err != nil { + return query, err + } + + for _k, _v := range params { + if g.isVarSlice(_v) { + g.iterateSlice(_v, func(it interface{}) { + query.Add(_k+"[]", fmt.Sprintf("%v", it)) + }) + } else { + query.Add(_k, fmt.Sprintf("%v", _v)) + } + } + + return query, nil +} + +// GetParametersJSON converts the parameters from GetParameters into the JSON format +func (g *GetKLinesRequest) GetParametersJSON() ([]byte, error) { + params, err := g.GetParameters() + if err != nil { + return nil, err + } + + return json.Marshal(params) +} + +// GetSlugParameters builds and checks the slug parameters and return the result in a map object +func (g *GetKLinesRequest) GetSlugParameters() (map[string]interface{}, error) { + var params = map[string]interface{}{} + + return params, nil +} + +func (g *GetKLinesRequest) applySlugsToUrl(url string, slugs map[string]string) string { + for _k, _v := range slugs { + needleRE := regexp.MustCompile(":" + _k + "\\b") + url = needleRE.ReplaceAllString(url, _v) + } + + return url +} + +func (g *GetKLinesRequest) iterateSlice(slice interface{}, _f func(it interface{})) { + sliceValue := reflect.ValueOf(slice) + for _i := 0; _i < sliceValue.Len(); _i++ { + it := sliceValue.Index(_i).Interface() + _f(it) + } +} + +func (g *GetKLinesRequest) isVarSlice(_v interface{}) bool { + rt := reflect.TypeOf(_v) + switch rt.Kind() { + case reflect.Slice: + return true + } + return false +} + +func (g *GetKLinesRequest) GetSlugsMap() (map[string]string, error) { + slugs := map[string]string{} + params, err := g.GetSlugParameters() + if err != nil { + return slugs, nil + } + + for _k, _v := range params { + slugs[_k] = fmt.Sprintf("%v", _v) + } + + return slugs, nil +} + +func (g *GetKLinesRequest) Do(ctx context.Context) ([]KLineData, error) { + + // empty params for GET operation + var params interface{} + query, err := g.GetParametersQuery() + if err != nil { + return nil, err + } + + apiURL := "/api/v2/k" + + req, err := g.client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params) + if err != nil { + return nil, err + } + + response, err := g.client.SendRequest(req) + if err != nil { + return nil, err + } + + var apiResponse []KLineData + if err := response.DecodeJSON(&apiResponse); err != nil { + return nil, err + } + return apiResponse, nil +}