-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathagerating.go
135 lines (110 loc) · 3.79 KB
/
agerating.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package igdb
import (
"github.com/Henry-Sarabia/sliceconv"
"github.com/pkg/errors"
"strconv"
)
//go:generate gomodifytags -file $GOFILE -struct AgeRating -add-tags json -w
// AgeRating describes an age rating according to various organizations.
// For more information visit: https://api-docs.igdb.com/#age-rating
type AgeRating struct {
ID int `json:"id"`
Category AgeRatingCategory `json:"category"`
ContentDescriptions []int `json:"content_descriptions"`
Rating AgeRatingEnum `json:"rating"`
RatingCoverURL string `json:"rating_cover_url"`
Synopsis string `json:"synopsis"`
}
// AgeRatingCategory specifies a regulatory organization.
type AgeRatingCategory int
//go:generate stringer -type=AgeRatingCategory,AgeRatingEnum
// Expected AgeRatingCategory enums from the IGDB.
const (
AgeRatingESRB AgeRatingCategory = iota + 1
AgeRatingPEGI
)
// AgeRatingEnum specifies a specific age rating.
type AgeRatingEnum int
// Expected AgeRatingEnum enums from the IGDB.
const (
AgeRatingThree AgeRatingEnum = iota + 1
AgeRatingSeven
AgeRatingTwelve
AgeRatingSixteen
AgeRatingEighteen
AgeRatingRP
AgeRatingEC
AgeRatingE
AgeRatingE10
AgeRatingT
AgeRatingM
AgeRatingAO
)
// AgeRatingService handles all the API calls for the IGDB AgeRating endpoint.
type AgeRatingService service
// Get returns a single AgeRating identified by the provided IGDB ID. Provide
// the SetFields functional option if you need to specify which fields to
// retrieve. If the ID does not match any AgeRatings, an error is returned.
func (as *AgeRatingService) Get(id int, opts ...Option) (*AgeRating, error) {
if id < 0 {
return nil, ErrNegativeID
}
var age []*AgeRating
opts = append(opts, SetFilter("id", OpEquals, strconv.Itoa(id)))
err := as.client.post(as.end, &age, opts...)
if err != nil {
return nil, errors.Wrapf(err, "cannot get AgeRating with ID %v", id)
}
return age[0], nil
}
// List returns a list of AgeRatings identified by the provided list of IGDB IDs.
// Provide functional options to sort, filter, and paginate the results.
// Any ID that does not match a AgeRating is ignored. If none of the IDs
// match a AgeRating, an error is returned.
func (as *AgeRatingService) List(ids []int, opts ...Option) ([]*AgeRating, error) {
for len(ids) < 1 {
return nil, ErrEmptyIDs
}
for _, id := range ids {
if id < 0 {
return nil, ErrNegativeID
}
}
var age []*AgeRating
opts = append(opts, SetFilter("id", OpContainsAtLeast, sliceconv.Itoa(ids)...))
err := as.client.post(as.end, &age, opts...)
if err != nil {
return nil, errors.Wrapf(err, "cannot get AgeRatings with IDs %v", ids)
}
return age, nil
}
// Index returns an index of AgeRatings based solely on the provided functional
// options used to sort, filter, and paginate the results. If no AgeRatings can
// be found using the provided options, an error is returned.
func (as *AgeRatingService) Index(opts ...Option) ([]*AgeRating, error) {
var age []*AgeRating
err := as.client.post(as.end, &age, opts...)
if err != nil {
return nil, errors.Wrap(err, "cannot get index of AgeRatings")
}
return age, nil
}
// Count returns the number of AgeRatings available in the IGDB.
// Provide the SetFilter functional option if you need to filter
// which AgeRatings to count.
func (as *AgeRatingService) Count(opts ...Option) (int, error) {
ct, err := as.client.getCount(as.end, opts...)
if err != nil {
return 0, errors.Wrap(err, "cannot count AgeRatings")
}
return ct, nil
}
// Fields returns the up-to-date list of fields in an
// IGDB AgeRating object.
func (as *AgeRatingService) Fields() ([]string, error) {
f, err := as.client.getFields(as.end)
if err != nil {
return nil, errors.Wrap(err, "cannot get AgeRating fields")
}
return f, nil
}