mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-26 16:55:15 +00:00
Merge pull request #508 from c9s/narumi/glassnode
feature: add Glassnode API
This commit is contained in:
commit
0d4cc7ab9b
17
pkg/glassnode/addresses.go
Normal file
17
pkg/glassnode/addresses.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type AddressesRequest -url "/v1/metrics/addresses/:metric" -responseType Response
|
||||||
|
type AddressesRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/addresses_request_requestgen.go
Normal file
196
pkg/glassnode/addresses_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type AddressesRequest -url /v1/metrics/addresses/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a *AddressesRequest) SetAsset(Asset string) *AddressesRequest {
|
||||||
|
a.Asset = Asset
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) SetSince(Since int64) *AddressesRequest {
|
||||||
|
a.Since = Since
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) SetUntil(Until int64) *AddressesRequest {
|
||||||
|
a.Until = Until
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) SetInterval(Interval Interval) *AddressesRequest {
|
||||||
|
a.Interval = Interval
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) SetFormat(Format Format) *AddressesRequest {
|
||||||
|
a.Format = Format
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) SetTimestampFormat(TimestampFormat string) *AddressesRequest {
|
||||||
|
a.TimestampFormat = TimestampFormat
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) SetMetric(Metric string) *AddressesRequest {
|
||||||
|
a.Metric = Metric
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (a *AddressesRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := a.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := a.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := a.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := a.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := a.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := a.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (a *AddressesRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (a *AddressesRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := a.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (a *AddressesRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := a.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 (a *AddressesRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := a.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) 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 (a *AddressesRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := a.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AddressesRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := a.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/addresses/:metric"
|
||||||
|
slugs, err := a.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = a.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := a.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := a.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/blockchain.go
Normal file
17
pkg/glassnode/blockchain.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type BlockchainRequest -url "/v1/metrics/blockchain/:metric" -responseType Response
|
||||||
|
type BlockchainRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/blockchain_request_requestgen.go
Normal file
196
pkg/glassnode/blockchain_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type BlockchainRequest -url /v1/metrics/blockchain/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) SetAsset(Asset string) *BlockchainRequest {
|
||||||
|
b.Asset = Asset
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) SetSince(Since int64) *BlockchainRequest {
|
||||||
|
b.Since = Since
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) SetUntil(Until int64) *BlockchainRequest {
|
||||||
|
b.Until = Until
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) SetInterval(Interval Interval) *BlockchainRequest {
|
||||||
|
b.Interval = Interval
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) SetFormat(Format Format) *BlockchainRequest {
|
||||||
|
b.Format = Format
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) SetTimestampFormat(TimestampFormat string) *BlockchainRequest {
|
||||||
|
b.TimestampFormat = TimestampFormat
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) SetMetric(Metric string) *BlockchainRequest {
|
||||||
|
b.Metric = Metric
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (b *BlockchainRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := b.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := b.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := b.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := b.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := b.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := b.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (b *BlockchainRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (b *BlockchainRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := b.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (b *BlockchainRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := b.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 (b *BlockchainRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := b.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) 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 (b *BlockchainRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := b.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlockchainRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := b.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/blockchain/:metric"
|
||||||
|
slugs, err := b.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = b.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := b.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := b.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
140
pkg/glassnode/client.go
Normal file
140
pkg/glassnode/client.go
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/c9s/requestgen"
|
||||||
|
)
|
||||||
|
|
||||||
|
const defaultHTTPTimeout = time.Second * 15
|
||||||
|
const glassnodeBaseURL = "https://api.glassnode.com"
|
||||||
|
|
||||||
|
type RestClient struct {
|
||||||
|
BaseURL *url.URL
|
||||||
|
Client *http.Client
|
||||||
|
|
||||||
|
apiKey string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient() *RestClient {
|
||||||
|
u, err := url.Parse(glassnodeBaseURL)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
client := &RestClient{
|
||||||
|
BaseURL: u,
|
||||||
|
Client: &http.Client{
|
||||||
|
Timeout: defaultHTTPTimeout,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return client
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *RestClient) Auth(apiKey string) {
|
||||||
|
c.apiKey = apiKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *RestClient) NewRequest(ctx context.Context, method string, refURL string, params url.Values, payload interface{}) (*http.Request, error) {
|
||||||
|
body, err := castPayload(payload)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
rel, err := url.Parse(refURL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if params != nil {
|
||||||
|
rel.RawQuery = params.Encode()
|
||||||
|
}
|
||||||
|
|
||||||
|
pathURL := c.BaseURL.ResolveReference(rel)
|
||||||
|
return http.NewRequestWithContext(ctx, method, pathURL.String(), bytes.NewReader(body))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *RestClient) SendRequest(req *http.Request) (*requestgen.Response, error) {
|
||||||
|
resp, err := c.Client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
response, err := requestgen.NewResponse(resp)
|
||||||
|
if err != nil {
|
||||||
|
return response, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check error, if there is an error, return the ErrorResponse struct type
|
||||||
|
if response.IsError() {
|
||||||
|
return response, errors.New(string(response.Body))
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *RestClient) NewAuthenticatedRequest(ctx context.Context, method, refURL string, params url.Values, payload interface{}) (*http.Request, error) {
|
||||||
|
rel, err := url.Parse(refURL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if params != nil {
|
||||||
|
rel.RawQuery = params.Encode()
|
||||||
|
}
|
||||||
|
|
||||||
|
pathURL := c.BaseURL.ResolveReference(rel)
|
||||||
|
|
||||||
|
path := pathURL.Path
|
||||||
|
if rel.RawQuery != "" {
|
||||||
|
path += "?" + rel.RawQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := castPayload(payload)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequestWithContext(ctx, method, pathURL.String(), bytes.NewReader(body))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add("Content-Type", "application/json")
|
||||||
|
req.Header.Add("Accept", "application/json")
|
||||||
|
|
||||||
|
// Build authentication headers
|
||||||
|
c.attachAuthHeaders(req, method, path, body)
|
||||||
|
return req, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *RestClient) attachAuthHeaders(req *http.Request, method string, path string, body []byte) {
|
||||||
|
// Attch API Key to header. https://docs.glassnode.com/basic-api/api-key#usage
|
||||||
|
req.Header.Add("X-Api-Key", c.apiKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
func castPayload(payload interface{}) ([]byte, error) {
|
||||||
|
if payload != nil {
|
||||||
|
switch v := payload.(type) {
|
||||||
|
case string:
|
||||||
|
return []byte(v), nil
|
||||||
|
|
||||||
|
case []byte:
|
||||||
|
return v, nil
|
||||||
|
|
||||||
|
default:
|
||||||
|
body, err := json.Marshal(v)
|
||||||
|
return body, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, nil
|
||||||
|
}
|
17
pkg/glassnode/defi.go
Normal file
17
pkg/glassnode/defi.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type DefiRequest -url "/v1/metrics/defi/:metric" -responseType Response
|
||||||
|
type DefiRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/defi_request_requestgen.go
Normal file
196
pkg/glassnode/defi_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type DefiRequest -url /v1/metrics/defi/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d *DefiRequest) SetAsset(Asset string) *DefiRequest {
|
||||||
|
d.Asset = Asset
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) SetSince(Since int64) *DefiRequest {
|
||||||
|
d.Since = Since
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) SetUntil(Until int64) *DefiRequest {
|
||||||
|
d.Until = Until
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) SetInterval(Interval Interval) *DefiRequest {
|
||||||
|
d.Interval = Interval
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) SetFormat(Format Format) *DefiRequest {
|
||||||
|
d.Format = Format
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) SetTimestampFormat(TimestampFormat string) *DefiRequest {
|
||||||
|
d.TimestampFormat = TimestampFormat
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) SetMetric(Metric string) *DefiRequest {
|
||||||
|
d.Metric = Metric
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (d *DefiRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := d.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := d.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := d.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := d.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := d.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := d.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (d *DefiRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (d *DefiRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := d.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (d *DefiRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := d.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 (d *DefiRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := d.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) 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 (d *DefiRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := d.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefiRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := d.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/defi/:metric"
|
||||||
|
slugs, err := d.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = d.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := d.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := d.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/derivatives.go
Normal file
17
pkg/glassnode/derivatives.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type DerivativesRequest -url "/v1/metrics/derivatives/:metric" -responseType Response
|
||||||
|
type DerivativesRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/derivatives_request_requestgen.go
Normal file
196
pkg/glassnode/derivatives_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type DerivativesRequest -url /v1/metrics/derivatives/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) SetAsset(Asset string) *DerivativesRequest {
|
||||||
|
d.Asset = Asset
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) SetSince(Since int64) *DerivativesRequest {
|
||||||
|
d.Since = Since
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) SetUntil(Until int64) *DerivativesRequest {
|
||||||
|
d.Until = Until
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) SetInterval(Interval Interval) *DerivativesRequest {
|
||||||
|
d.Interval = Interval
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) SetFormat(Format Format) *DerivativesRequest {
|
||||||
|
d.Format = Format
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) SetTimestampFormat(TimestampFormat string) *DerivativesRequest {
|
||||||
|
d.TimestampFormat = TimestampFormat
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) SetMetric(Metric string) *DerivativesRequest {
|
||||||
|
d.Metric = Metric
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (d *DerivativesRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := d.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := d.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := d.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := d.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := d.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := d.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (d *DerivativesRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (d *DerivativesRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := d.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (d *DerivativesRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := d.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 (d *DerivativesRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := d.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) 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 (d *DerivativesRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := d.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DerivativesRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := d.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/derivatives/:metric"
|
||||||
|
slugs, err := d.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = d.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := d.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := d.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/distribution.go
Normal file
17
pkg/glassnode/distribution.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type DistributionRequest -url "/v1/metrics/distribution/:metric" -responseType Response
|
||||||
|
type DistributionRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/distribution_request_requestgen.go
Normal file
196
pkg/glassnode/distribution_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type DistributionRequest -url /v1/metrics/distribution/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d *DistributionRequest) SetAsset(Asset string) *DistributionRequest {
|
||||||
|
d.Asset = Asset
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) SetSince(Since int64) *DistributionRequest {
|
||||||
|
d.Since = Since
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) SetUntil(Until int64) *DistributionRequest {
|
||||||
|
d.Until = Until
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) SetInterval(Interval Interval) *DistributionRequest {
|
||||||
|
d.Interval = Interval
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) SetFormat(Format Format) *DistributionRequest {
|
||||||
|
d.Format = Format
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) SetTimestampFormat(TimestampFormat string) *DistributionRequest {
|
||||||
|
d.TimestampFormat = TimestampFormat
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) SetMetric(Metric string) *DistributionRequest {
|
||||||
|
d.Metric = Metric
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (d *DistributionRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := d.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := d.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := d.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := d.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := d.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := d.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (d *DistributionRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (d *DistributionRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := d.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (d *DistributionRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := d.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 (d *DistributionRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := d.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) 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 (d *DistributionRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := d.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DistributionRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := d.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/distribution/:metric"
|
||||||
|
slugs, err := d.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = d.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := d.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := d.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/entities.go
Normal file
17
pkg/glassnode/entities.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type EntitiesRequest -url "/v1/metrics/entities/:metric" -responseType Response
|
||||||
|
type EntitiesRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/entities_request_requestgen.go
Normal file
196
pkg/glassnode/entities_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type EntitiesRequest -url /v1/metrics/entities/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) SetAsset(Asset string) *EntitiesRequest {
|
||||||
|
e.Asset = Asset
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) SetSince(Since int64) *EntitiesRequest {
|
||||||
|
e.Since = Since
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) SetUntil(Until int64) *EntitiesRequest {
|
||||||
|
e.Until = Until
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) SetInterval(Interval Interval) *EntitiesRequest {
|
||||||
|
e.Interval = Interval
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) SetFormat(Format Format) *EntitiesRequest {
|
||||||
|
e.Format = Format
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) SetTimestampFormat(TimestampFormat string) *EntitiesRequest {
|
||||||
|
e.TimestampFormat = TimestampFormat
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) SetMetric(Metric string) *EntitiesRequest {
|
||||||
|
e.Metric = Metric
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (e *EntitiesRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := e.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := e.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := e.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := e.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := e.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := e.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (e *EntitiesRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (e *EntitiesRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := e.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (e *EntitiesRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := e.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 (e *EntitiesRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := e.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) 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 (e *EntitiesRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := e.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *EntitiesRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := e.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/entities/:metric"
|
||||||
|
slugs, err := e.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = e.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := e.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := e.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/eth2.go
Normal file
17
pkg/glassnode/eth2.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type ETH2Request -url "/v1/metrics/eth2/:metric" -responseType Response
|
||||||
|
type ETH2Request struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/eth_2_request_requestgen.go
Normal file
196
pkg/glassnode/eth_2_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type ETH2Request -url /v1/metrics/eth2/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (e *ETH2Request) SetAsset(Asset string) *ETH2Request {
|
||||||
|
e.Asset = Asset
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) SetSince(Since int64) *ETH2Request {
|
||||||
|
e.Since = Since
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) SetUntil(Until int64) *ETH2Request {
|
||||||
|
e.Until = Until
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) SetInterval(Interval Interval) *ETH2Request {
|
||||||
|
e.Interval = Interval
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) SetFormat(Format Format) *ETH2Request {
|
||||||
|
e.Format = Format
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) SetTimestampFormat(TimestampFormat string) *ETH2Request {
|
||||||
|
e.TimestampFormat = TimestampFormat
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) SetMetric(Metric string) *ETH2Request {
|
||||||
|
e.Metric = Metric
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (e *ETH2Request) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := e.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := e.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := e.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := e.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := e.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := e.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (e *ETH2Request) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (e *ETH2Request) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := e.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (e *ETH2Request) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := e.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 (e *ETH2Request) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := e.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) 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 (e *ETH2Request) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := e.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ETH2Request) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := e.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/eth2/:metric"
|
||||||
|
slugs, err := e.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = e.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := e.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := e.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/fees.go
Normal file
17
pkg/glassnode/fees.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type FeesRequest -url "/v1/metrics/fees/:metric" -responseType Response
|
||||||
|
type FeesRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/fees_request_requestgen.go
Normal file
196
pkg/glassnode/fees_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type FeesRequest -url /v1/metrics/fees/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (f *FeesRequest) SetAsset(Asset string) *FeesRequest {
|
||||||
|
f.Asset = Asset
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) SetSince(Since int64) *FeesRequest {
|
||||||
|
f.Since = Since
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) SetUntil(Until int64) *FeesRequest {
|
||||||
|
f.Until = Until
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) SetInterval(Interval Interval) *FeesRequest {
|
||||||
|
f.Interval = Interval
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) SetFormat(Format Format) *FeesRequest {
|
||||||
|
f.Format = Format
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) SetTimestampFormat(TimestampFormat string) *FeesRequest {
|
||||||
|
f.TimestampFormat = TimestampFormat
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) SetMetric(Metric string) *FeesRequest {
|
||||||
|
f.Metric = Metric
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (f *FeesRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := f.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := f.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := f.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := f.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := f.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := f.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (f *FeesRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (f *FeesRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := f.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (f *FeesRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := f.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 (f *FeesRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := f.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) 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 (f *FeesRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := f.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FeesRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := f.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/fees/:metric"
|
||||||
|
slugs, err := f.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = f.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := f.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := f.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/indicators.go
Normal file
17
pkg/glassnode/indicators.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type IndicatorsRequest -url "/v1/metrics/indicators/:metric" -responseType Response
|
||||||
|
type IndicatorsRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/indicators_request_requestgen.go
Normal file
196
pkg/glassnode/indicators_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type IndicatorsRequest -url /v1/metrics/indicators/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) SetAsset(Asset string) *IndicatorsRequest {
|
||||||
|
i.Asset = Asset
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) SetSince(Since int64) *IndicatorsRequest {
|
||||||
|
i.Since = Since
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) SetUntil(Until int64) *IndicatorsRequest {
|
||||||
|
i.Until = Until
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) SetInterval(Interval Interval) *IndicatorsRequest {
|
||||||
|
i.Interval = Interval
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) SetFormat(Format Format) *IndicatorsRequest {
|
||||||
|
i.Format = Format
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) SetTimestampFormat(TimestampFormat string) *IndicatorsRequest {
|
||||||
|
i.TimestampFormat = TimestampFormat
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) SetMetric(Metric string) *IndicatorsRequest {
|
||||||
|
i.Metric = Metric
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (i *IndicatorsRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := i.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := i.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := i.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := i.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := i.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := i.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (i *IndicatorsRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (i *IndicatorsRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := i.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (i *IndicatorsRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := i.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 (i *IndicatorsRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := i.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) 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 (i *IndicatorsRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := i.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IndicatorsRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := i.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/indicators/:metric"
|
||||||
|
slugs, err := i.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = i.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := i.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := i.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/institutions.go
Normal file
17
pkg/glassnode/institutions.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type InstitutionsRequest -url "/v1/metrics/institutions/:metric" -responseType Response
|
||||||
|
type InstitutionsRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/institutions_request_requestgen.go
Normal file
196
pkg/glassnode/institutions_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type InstitutionsRequest -url /v1/metrics/institutions/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) SetAsset(Asset string) *InstitutionsRequest {
|
||||||
|
i.Asset = Asset
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) SetSince(Since int64) *InstitutionsRequest {
|
||||||
|
i.Since = Since
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) SetUntil(Until int64) *InstitutionsRequest {
|
||||||
|
i.Until = Until
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) SetInterval(Interval Interval) *InstitutionsRequest {
|
||||||
|
i.Interval = Interval
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) SetFormat(Format Format) *InstitutionsRequest {
|
||||||
|
i.Format = Format
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) SetTimestampFormat(TimestampFormat string) *InstitutionsRequest {
|
||||||
|
i.TimestampFormat = TimestampFormat
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) SetMetric(Metric string) *InstitutionsRequest {
|
||||||
|
i.Metric = Metric
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (i *InstitutionsRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := i.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := i.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := i.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := i.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := i.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := i.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (i *InstitutionsRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (i *InstitutionsRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := i.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (i *InstitutionsRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := i.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 (i *InstitutionsRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := i.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) 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 (i *InstitutionsRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := i.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstitutionsRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := i.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/institutions/:metric"
|
||||||
|
slugs, err := i.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = i.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := i.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := i.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/lightning.go
Normal file
17
pkg/glassnode/lightning.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type LightningRequest -url "/v1/metrics/lightning/:metric" -responseType Response
|
||||||
|
type LightningRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/lightning_request_requestgen.go
Normal file
196
pkg/glassnode/lightning_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type LightningRequest -url /v1/metrics/lightning/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (l *LightningRequest) SetAsset(Asset string) *LightningRequest {
|
||||||
|
l.Asset = Asset
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) SetSince(Since int64) *LightningRequest {
|
||||||
|
l.Since = Since
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) SetUntil(Until int64) *LightningRequest {
|
||||||
|
l.Until = Until
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) SetInterval(Interval Interval) *LightningRequest {
|
||||||
|
l.Interval = Interval
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) SetFormat(Format Format) *LightningRequest {
|
||||||
|
l.Format = Format
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) SetTimestampFormat(TimestampFormat string) *LightningRequest {
|
||||||
|
l.TimestampFormat = TimestampFormat
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) SetMetric(Metric string) *LightningRequest {
|
||||||
|
l.Metric = Metric
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (l *LightningRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := l.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := l.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := l.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := l.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := l.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := l.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (l *LightningRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (l *LightningRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := l.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (l *LightningRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := l.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 (l *LightningRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := l.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) 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 (l *LightningRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := l.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *LightningRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := l.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/lightning/:metric"
|
||||||
|
slugs, err := l.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = l.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := l.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := l.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/market.go
Normal file
17
pkg/glassnode/market.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type MarketRequest -url "/v1/metrics/market/:metric" -responseType Response
|
||||||
|
type MarketRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/market_request_requestgen.go
Normal file
196
pkg/glassnode/market_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type MarketRequest -url /v1/metrics/market/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *MarketRequest) SetAsset(Asset string) *MarketRequest {
|
||||||
|
m.Asset = Asset
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) SetSince(Since int64) *MarketRequest {
|
||||||
|
m.Since = Since
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) SetUntil(Until int64) *MarketRequest {
|
||||||
|
m.Until = Until
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) SetInterval(Interval Interval) *MarketRequest {
|
||||||
|
m.Interval = Interval
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) SetFormat(Format Format) *MarketRequest {
|
||||||
|
m.Format = Format
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) SetTimestampFormat(TimestampFormat string) *MarketRequest {
|
||||||
|
m.TimestampFormat = TimestampFormat
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) SetMetric(Metric string) *MarketRequest {
|
||||||
|
m.Metric = Metric
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (m *MarketRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := m.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := m.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := m.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := m.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := m.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := m.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (m *MarketRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (m *MarketRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := m.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (m *MarketRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := m.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 (m *MarketRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := m.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) 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 (m *MarketRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := m.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MarketRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := m.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/market/:metric"
|
||||||
|
slugs, err := m.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = m.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := m.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := m.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/mempool.go
Normal file
17
pkg/glassnode/mempool.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type MempoolRequest -url "/v1/metrics/mempool/:metric" -responseType Response
|
||||||
|
type MempoolRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/mempool_request_requestgen.go
Normal file
196
pkg/glassnode/mempool_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type MempoolRequest -url /v1/metrics/mempool/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *MempoolRequest) SetAsset(Asset string) *MempoolRequest {
|
||||||
|
m.Asset = Asset
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) SetSince(Since int64) *MempoolRequest {
|
||||||
|
m.Since = Since
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) SetUntil(Until int64) *MempoolRequest {
|
||||||
|
m.Until = Until
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) SetInterval(Interval Interval) *MempoolRequest {
|
||||||
|
m.Interval = Interval
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) SetFormat(Format Format) *MempoolRequest {
|
||||||
|
m.Format = Format
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) SetTimestampFormat(TimestampFormat string) *MempoolRequest {
|
||||||
|
m.TimestampFormat = TimestampFormat
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) SetMetric(Metric string) *MempoolRequest {
|
||||||
|
m.Metric = Metric
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (m *MempoolRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := m.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := m.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := m.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := m.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := m.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := m.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (m *MempoolRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (m *MempoolRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := m.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (m *MempoolRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := m.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 (m *MempoolRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := m.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) 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 (m *MempoolRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := m.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MempoolRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := m.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/mempool/:metric"
|
||||||
|
slugs, err := m.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = m.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := m.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := m.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/mining.go
Normal file
17
pkg/glassnode/mining.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type MiningRequest -url "/v1/metrics/mining/:metric" -responseType Response
|
||||||
|
type MiningRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/mining_request_requestgen.go
Normal file
196
pkg/glassnode/mining_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type MiningRequest -url /v1/metrics/mining/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *MiningRequest) SetAsset(Asset string) *MiningRequest {
|
||||||
|
m.Asset = Asset
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) SetSince(Since int64) *MiningRequest {
|
||||||
|
m.Since = Since
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) SetUntil(Until int64) *MiningRequest {
|
||||||
|
m.Until = Until
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) SetInterval(Interval Interval) *MiningRequest {
|
||||||
|
m.Interval = Interval
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) SetFormat(Format Format) *MiningRequest {
|
||||||
|
m.Format = Format
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) SetTimestampFormat(TimestampFormat string) *MiningRequest {
|
||||||
|
m.TimestampFormat = TimestampFormat
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) SetMetric(Metric string) *MiningRequest {
|
||||||
|
m.Metric = Metric
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (m *MiningRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := m.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := m.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := m.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := m.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := m.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := m.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (m *MiningRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (m *MiningRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := m.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (m *MiningRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := m.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 (m *MiningRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := m.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) 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 (m *MiningRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := m.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiningRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := m.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/mining/:metric"
|
||||||
|
slugs, err := m.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = m.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := m.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := m.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/protocols.go
Normal file
17
pkg/glassnode/protocols.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type ProtocolsRequest -url "/v1/metrics/protocols/:metric" -responseType Response
|
||||||
|
type ProtocolsRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/protocols_request_requestgen.go
Normal file
196
pkg/glassnode/protocols_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type ProtocolsRequest -url /v1/metrics/protocols/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) SetAsset(Asset string) *ProtocolsRequest {
|
||||||
|
p.Asset = Asset
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) SetSince(Since int64) *ProtocolsRequest {
|
||||||
|
p.Since = Since
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) SetUntil(Until int64) *ProtocolsRequest {
|
||||||
|
p.Until = Until
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) SetInterval(Interval Interval) *ProtocolsRequest {
|
||||||
|
p.Interval = Interval
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) SetFormat(Format Format) *ProtocolsRequest {
|
||||||
|
p.Format = Format
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) SetTimestampFormat(TimestampFormat string) *ProtocolsRequest {
|
||||||
|
p.TimestampFormat = TimestampFormat
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) SetMetric(Metric string) *ProtocolsRequest {
|
||||||
|
p.Metric = Metric
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (p *ProtocolsRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := p.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := p.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := p.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := p.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := p.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := p.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (p *ProtocolsRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (p *ProtocolsRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := p.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (p *ProtocolsRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := p.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 (p *ProtocolsRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := p.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) 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 (p *ProtocolsRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := p.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ProtocolsRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := p.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/protocols/:metric"
|
||||||
|
slugs, err := p.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = p.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := p.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := p.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/supply.go
Normal file
17
pkg/glassnode/supply.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type SupplyRequest -url "/v1/metrics/supply/:metric" -responseType Response
|
||||||
|
type SupplyRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/supply_request_requestgen.go
Normal file
196
pkg/glassnode/supply_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type SupplyRequest -url /v1/metrics/supply/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *SupplyRequest) SetAsset(Asset string) *SupplyRequest {
|
||||||
|
s.Asset = Asset
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) SetSince(Since int64) *SupplyRequest {
|
||||||
|
s.Since = Since
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) SetUntil(Until int64) *SupplyRequest {
|
||||||
|
s.Until = Until
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) SetInterval(Interval Interval) *SupplyRequest {
|
||||||
|
s.Interval = Interval
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) SetFormat(Format Format) *SupplyRequest {
|
||||||
|
s.Format = Format
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) SetTimestampFormat(TimestampFormat string) *SupplyRequest {
|
||||||
|
s.TimestampFormat = TimestampFormat
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) SetMetric(Metric string) *SupplyRequest {
|
||||||
|
s.Metric = Metric
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (s *SupplyRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := s.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := s.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := s.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := s.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := s.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := s.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (s *SupplyRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (s *SupplyRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := s.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (s *SupplyRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := s.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 (s *SupplyRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := s.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) 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 (s *SupplyRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := s.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SupplyRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := s.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/supply/:metric"
|
||||||
|
slugs, err := s.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = s.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := s.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := s.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
17
pkg/glassnode/transactions.go
Normal file
17
pkg/glassnode/transactions.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import "github.com/c9s/requestgen"
|
||||||
|
|
||||||
|
//go:generate requestgen -method GET -type TransactionsRequest -url "/v1/metrics/transactions/:metric" -responseType Response
|
||||||
|
type TransactionsRequest struct {
|
||||||
|
Client requestgen.AuthenticatedAPIClient
|
||||||
|
|
||||||
|
Asset string `param:"a,required,query"`
|
||||||
|
Since int64 `param:"s,query"`
|
||||||
|
Until int64 `param:"u,query"`
|
||||||
|
Interval Interval `param:"i,query"`
|
||||||
|
Format Format `param:"f,query"`
|
||||||
|
TimestampFormat string `param:"timestamp_format,query"`
|
||||||
|
|
||||||
|
Metric string `param:"metric,slug"`
|
||||||
|
}
|
196
pkg/glassnode/transactions_request_requestgen.go
Normal file
196
pkg/glassnode/transactions_request_requestgen.go
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Code generated by "requestgen -method GET -type TransactionsRequest -url /v1/metrics/transactions/:metric -responseType Response"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) SetAsset(Asset string) *TransactionsRequest {
|
||||||
|
t.Asset = Asset
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) SetSince(Since int64) *TransactionsRequest {
|
||||||
|
t.Since = Since
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) SetUntil(Until int64) *TransactionsRequest {
|
||||||
|
t.Until = Until
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) SetInterval(Interval Interval) *TransactionsRequest {
|
||||||
|
t.Interval = Interval
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) SetFormat(Format Format) *TransactionsRequest {
|
||||||
|
t.Format = Format
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) SetTimestampFormat(TimestampFormat string) *TransactionsRequest {
|
||||||
|
t.TimestampFormat = TimestampFormat
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) SetMetric(Metric string) *TransactionsRequest {
|
||||||
|
t.Metric = Metric
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryParameters builds and checks the query parameters and returns url.Values
|
||||||
|
func (t *TransactionsRequest) GetQueryParameters() (url.Values, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Asset field -> json key a
|
||||||
|
Asset := t.Asset
|
||||||
|
|
||||||
|
// TEMPLATE check-required
|
||||||
|
if len(Asset) == 0 {
|
||||||
|
return nil, fmt.Errorf("a is required, empty string given")
|
||||||
|
}
|
||||||
|
// END TEMPLATE check-required
|
||||||
|
|
||||||
|
// assign parameter of Asset
|
||||||
|
params["a"] = Asset
|
||||||
|
// check Since field -> json key s
|
||||||
|
Since := t.Since
|
||||||
|
|
||||||
|
// assign parameter of Since
|
||||||
|
params["s"] = Since
|
||||||
|
// check Until field -> json key u
|
||||||
|
Until := t.Until
|
||||||
|
|
||||||
|
// assign parameter of Until
|
||||||
|
params["u"] = Until
|
||||||
|
// check Interval field -> json key i
|
||||||
|
Interval := t.Interval
|
||||||
|
|
||||||
|
// assign parameter of Interval
|
||||||
|
params["i"] = Interval
|
||||||
|
// check Format field -> json key f
|
||||||
|
Format := t.Format
|
||||||
|
|
||||||
|
// assign parameter of Format
|
||||||
|
params["f"] = Format
|
||||||
|
// check TimestampFormat field -> json key timestamp_format
|
||||||
|
TimestampFormat := t.TimestampFormat
|
||||||
|
|
||||||
|
// assign parameter of TimestampFormat
|
||||||
|
params["timestamp_format"] = TimestampFormat
|
||||||
|
|
||||||
|
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 (t *TransactionsRequest) GetParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersQuery converts the parameters from GetParameters into the url.Values format
|
||||||
|
func (t *TransactionsRequest) GetParametersQuery() (url.Values, error) {
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
params, err := t.GetParameters()
|
||||||
|
if err != nil {
|
||||||
|
return query, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
query.Add(k, fmt.Sprintf("%v", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetParametersJSON converts the parameters from GetParameters into the JSON format
|
||||||
|
func (t *TransactionsRequest) GetParametersJSON() ([]byte, error) {
|
||||||
|
params, err := t.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 (t *TransactionsRequest) GetSlugParameters() (map[string]interface{}, error) {
|
||||||
|
var params = map[string]interface{}{}
|
||||||
|
// check Metric field -> json key metric
|
||||||
|
Metric := t.Metric
|
||||||
|
|
||||||
|
// assign parameter of Metric
|
||||||
|
params["metric"] = Metric
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) 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 (t *TransactionsRequest) GetSlugsMap() (map[string]string, error) {
|
||||||
|
slugs := map[string]string{}
|
||||||
|
params, err := t.GetSlugParameters()
|
||||||
|
if err != nil {
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
slugs[k] = fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TransactionsRequest) Do(ctx context.Context) (Response, error) {
|
||||||
|
|
||||||
|
// no body params
|
||||||
|
var params interface{}
|
||||||
|
query, err := t.GetQueryParameters()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL := "/v1/metrics/transactions/:metric"
|
||||||
|
slugs, err := t.GetSlugsMap()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiURL = t.applySlugsToUrl(apiURL, slugs)
|
||||||
|
|
||||||
|
req, err := t.Client.NewAuthenticatedRequest(ctx, "GET", apiURL, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := t.Client.SendRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiResponse Response
|
||||||
|
if err := response.DecodeJSON(&apiResponse); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiResponse, nil
|
||||||
|
}
|
66
pkg/glassnode/types.go
Normal file
66
pkg/glassnode/types.go
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
package glassnode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Interval string
|
||||||
|
|
||||||
|
const (
|
||||||
|
Interval1h Interval = "1h"
|
||||||
|
Interval24h Interval = "24h"
|
||||||
|
Interval10m Interval = "10m"
|
||||||
|
Interval1w Interval = "1w"
|
||||||
|
Interval1m Interval = "1month"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Format string
|
||||||
|
|
||||||
|
const (
|
||||||
|
FormatJSON Format = "JSON"
|
||||||
|
FormatCSV Format = "CSV"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Timestamp time.Time
|
||||||
|
|
||||||
|
func (t Timestamp) Unix() float64 {
|
||||||
|
return float64(time.Time(t).Unix())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Timestamp) String() string {
|
||||||
|
return time.Time(t).String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Timestamp) UnmarshalJSON(o []byte) error {
|
||||||
|
var timestamp int64
|
||||||
|
if err := json.Unmarshal(o, ×tamp); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*t = Timestamp(time.Unix(timestamp, 0))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// [{"t":1614556800,"v":927789865185.0476}]
|
||||||
|
type Response []Data
|
||||||
|
type Data struct {
|
||||||
|
Timestamp Timestamp `json:"t"`
|
||||||
|
Value float64 `json:"v"`
|
||||||
|
Options map[string]float64 `json:"o"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Response) Last() Data {
|
||||||
|
if len(s) == 0 {
|
||||||
|
return Data{}
|
||||||
|
}
|
||||||
|
return s[len(s)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Response) LastValue() float64 {
|
||||||
|
return s.Last().Value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Response) LastOptions() map[string]float64 {
|
||||||
|
return s.Last().Options
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user