holidayapi-go/holidayapi.go
gelleson 9c712ca63c add structs (#2)
* fix: added models
2019-06-01 13:49:30 -05:00

82 lines
1.4 KiB
Go

package holidayapi
import (
"encoding/json"
"github.com/pkg/errors"
"github.com/simplereach/timeutils"
"io/ioutil"
"net/http"
"net/url"
)
type V1 struct {
Url string
Key string
}
func NewV1(key string) *V1 {
v1 := &V1{
Key: key,
Url: "https://holidayapi.com/v1/holidays?",
}
return v1
}
type Respone struct {
Status int32 `json:"status"`
Requests Request `json:"requests"`
Holidays []Holiday `json:"holidays"`
}
type Request struct {
Used int32 `json:"used"`
Available int32 `json:"available"`
Resets timeutils.Time `json:"resets"`
}
type Holiday struct {
Name string `json:"name"`
Date timeutils.Time `json:"date,omniempty"`
Observed timeutils.Time `json:"observed"`
Public bool `json:"public"`
}
func (v1 *V1) Holidays(args map[string]string) (Respone, error) {
var data Respone
if _, ok := args["key"]; !ok {
args["key"] = v1.Key
}
params := url.Values{}
for k, v := range args {
params.Add(k, v)
}
resp, err := http.Get(v1.Url + params.Encode())
if err != nil {
return Respone{}, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return Respone{}, err
}
err = json.Unmarshal(body, &data)
if err != nil {
return Respone{}, err
}
if resp.StatusCode != 200 {
return Respone{}, errors.New("Unknown error!")
}
return data, nil
}