forked from Henry-Sarabia/igdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
platformversion.go
131 lines (109 loc) · 4.85 KB
/
platformversion.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
package igdb
import (
"encoding/json"
"github.com/Henry-Sarabia/sliceconv"
"github.com/pkg/errors"
"strconv"
)
//go:generate gomodifytags -file $GOFILE -struct PlatformVersion -add-tags json -w
// PlatformVersion represents a particular version of a platform.
// For more information visit: https://api-docs.igdb.com/#platform-version
type PlatformVersion struct {
ID int `json:"id"`
Companies []PlatformVersionCompanyWrapper `json:"companies"`
Connectivity string `json:"connectivity"`
CPU string `json:"cpu"`
Graphics string `json:"graphics"`
MainManufacturer PlatformVersionCompanyWrapper `json:"main_manufacturer"`
Media string `json:"media"`
Memory string `json:"memory"`
Name string `json:"name"`
OS string `json:"os"`
Output string `json:"output"`
PlatformLogo PlatformLogoWrapper `json:"platform_logo"`
PlatformVersionReleaseDates []PlatformVersionReleaseDateWrapper `json:"platform_version_release_dates"`
Resolutions string `json:"resolutions"`
Slug string `json:"slug"`
Sound string `json:"sound"`
Storage string `json:"storage"`
Summary string `json:"summary"`
URL string `json:"url"`
}
// PlatformVersionService handles all the API calls for the IGDB PlatformVersion endpoint.
type PlatformVersionService service
// Get returns a single PlatformVersion 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 PlatformVersions, an error is returned.
func (ps *PlatformVersionService) Get(id int, opts ...Option) (*PlatformVersion, error) {
if id < 0 {
return nil, ErrNegativeID
}
var ver []*PlatformVersion
opts = append(opts, SetFilter("id", OpEquals, strconv.Itoa(id)))
err := ps.client.post(ps.end, &ver, opts...)
if err != nil {
return nil, errors.Wrapf(err, "cannot get PlatformVersion with ID %v", id)
}
return ver[0], nil
}
// List returns a list of PlatformVersions 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 PlatformVersion is ignored. If none of the IDs
// match a PlatformVersion, an error is returned.
func (ps *PlatformVersionService) List(ids []int, opts ...Option) ([]*PlatformVersion, error) {
for len(ids) < 1 {
return nil, ErrEmptyIDs
}
for _, id := range ids {
if id < 0 {
return nil, ErrNegativeID
}
}
var ver []*PlatformVersion
opts = append(opts, SetFilter("id", OpContainsAtLeast, sliceconv.Itoa(ids)...))
err := ps.client.post(ps.end, &ver, opts...)
if err != nil {
return nil, errors.Wrapf(err, "cannot get PlatformVersions with IDs %v", ids)
}
return ver, nil
}
// Index returns an index of PlatformVersions based solely on the provided functional
// options used to sort, filter, and paginate the results. If no PlatformVersions can
// be found using the provided options, an error is returned.
func (ps *PlatformVersionService) Index(opts ...Option) ([]*PlatformVersion, error) {
var ver []*PlatformVersion
err := ps.client.post(ps.end, &ver, opts...)
if err != nil {
return nil, errors.Wrap(err, "cannot get index of PlatformVersions")
}
return ver, nil
}
// Count returns the number of PlatformVersions available in the IGDB.
// Provide the SetFilter functional option if you need to filter
// which PlatformVersions to count.
func (ps *PlatformVersionService) Count(opts ...Option) (int, error) {
ct, err := ps.client.getCount(ps.end, opts...)
if err != nil {
return 0, errors.Wrap(err, "cannot count PlatformVersions")
}
return ct, nil
}
// Fields returns the up-to-date list of fields in an
// IGDB PlatformVersion object.
func (ps *PlatformVersionService) Fields() ([]string, error) {
f, err := ps.client.getFields(ps.end)
if err != nil {
return nil, errors.Wrap(err, "cannot get PlatformVersion fields")
}
return f, nil
}
type PlatformVersionWrapper struct {
PlatformVersion
}
func (pv *PlatformVersionWrapper) UnmarshalJSON(data []byte) error {
if id, err := strconv.Atoi(string(data)); err == nil {
pv.ID = id
return nil
}
return json.Unmarshal(data, &pv.PlatformVersion)
}