forked from plouc/go-gitlab-client
/
badges.go
101 lines (77 loc) · 2.52 KB
/
badges.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
package gitlab
import (
"encoding/json"
"io"
"strconv"
)
const (
ProjectBadgesApiPath = "/projects/:id/badges"
ProjectBadgeApiPath = "/projects/:id/badges/:badge_id"
)
type Badge struct {
Id int `json:"id" yaml:"id"`
LinkUrl string `json:"link_url" yaml:"link_url"`
ImageUrl string `json:"image_url" yaml:"image_url"`
RenderedLinkUrl string `json:"rendered_link_url" yaml:"rendered_link_url"`
RenderedImageUrl string `json:"rendered_image_url" yaml:"rendered_image_url"`
Kind string `json:"kind" yaml:"kind"`
}
type BadgeCollection struct {
Items []*Badge
}
func (b *Badge) RenderJson(w io.Writer) error {
return renderJson(w, b)
}
func (b *Badge) RenderYaml(w io.Writer) error {
return renderYaml(w, b)
}
func (c *BadgeCollection) RenderJson(w io.Writer) error {
return renderJson(w, c.Items)
}
func (c *BadgeCollection) RenderYaml(w io.Writer) error {
return renderYaml(w, c.Items)
}
func (g *Gitlab) ProjectBadges(projectId string, o *PaginationOptions) (*BadgeCollection, *ResponseMeta, error) {
u := g.ResourceUrlQ(ProjectBadgesApiPath, map[string]string{":id": projectId}, o)
collection := new(BadgeCollection)
badges := make([]*Badge, 0)
contents, meta, err := g.buildAndExecRequest("GET", u.String(), nil)
if err == nil {
err = json.Unmarshal(contents, &badges)
}
collection.Items = badges
return collection, meta, err
}
func (g *Gitlab) ProjectBadge(projectId string, badgeId int) (*Badge, *ResponseMeta, error) {
u := g.ResourceUrl(ProjectBadgeApiPath, map[string]string{
":id": projectId,
":badge_id": strconv.Itoa(badgeId),
})
badge := new(Badge)
contents, meta, err := g.buildAndExecRequest("GET", u.String(), nil)
if err == nil {
err = json.Unmarshal(contents, &badge)
}
return badge, meta, err
}
func (g *Gitlab) AddProjectBadge(projectId string, badge *Badge) (*Badge, *ResponseMeta, error) {
u := g.ResourceUrl(ProjectBadgesApiPath, map[string]string{":id": projectId})
badgeJson, err := json.Marshal(badge)
if err != nil {
return nil, nil, err
}
var createdBadge *Badge
contents, meta, err := g.buildAndExecRequest("POST", u.String(), badgeJson)
if err == nil {
err = json.Unmarshal(contents, &createdBadge)
}
return createdBadge, meta, err
}
func (g *Gitlab) RemoveProjectBadge(projectId, badgeId string) (*ResponseMeta, error) {
u := g.ResourceUrl(ProjectBadgeApiPath, map[string]string{
":id": projectId,
":badge_id": badgeId,
})
_, meta, err := g.buildAndExecRequest("DELETE", u.String(), nil)
return meta, err
}