forked from mailgun/mailgun-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tag.go
143 lines (113 loc) · 3.17 KB
/
tag.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
136
137
138
139
140
141
142
143
package main
import (
"encoding/json"
"fmt"
mailgun "github.com/mailgun/mailgun-go"
"github.com/thrawn01/args"
)
func Tag(parser *args.ArgParser, data interface{}) (int, error) {
mg := data.(mailgun.Mailgun)
desc := args.Dedent(`Manage tags via the mailgun HTTP API
Examples:
list all available tags
$ mailgun tag list
list tags with a specific prefix
$ mailgun tag list -p foo
get a single tag
$ mailgun tag get my-tag
delete a tag
$ mailgun tag delete my-tag`)
parser.SetDesc(desc)
// Commands
parser.AddCommand("list", ListTag)
parser.AddCommand("get", GetTag)
parser.AddCommand("delete", DeleteTag)
// Run the command chosen by our user
return parser.ParseAndRun(nil, mg)
}
func ListTag(parser *args.ArgParser, data interface{}) (int, error) {
mg := data.(mailgun.Mailgun)
desc := args.Dedent(`list tags via the mailgun HTTP API
Examples:
list all available tags
$ mailgun tag list
list the first 2,000 tags
$ mailgun tag list -l 2000
list tags with a specific prefix
$ mailgun tag list -p foo`)
parser.SetDesc(desc)
parser.AddOption("--prefix").Alias("-p").Help("list only tags with the given prefix")
parser.AddOption("--limit").Alias("-l").IsInt().Help("Limit the result set")
parser.AddOption("--tag").Alias("-t").Help("The tag that marks piviot point for the --page parameter")
parser.AddOption("--page").Alias("-pg").
Help("The page direction based off the tag parameter; valid choices are (first, last, next, prev)")
opts := parser.ParseSimple(nil)
if opts == nil {
return 1, nil
}
// Calculate our request limit
limit := opts.Int("limit")
// Create the tag iterator
it := mg.ListTags(&mailgun.TagOptions{
Limit: limit,
Prefix: opts.String("prefix"),
Page: opts.String("page"),
Tag: opts.String("tag"),
})
var count int
var page mailgun.TagsPage
for it.Next(&page) {
for _, tag := range page.Items {
fmt.Printf("%s\n", tag.Value)
count += 1
if limit != 0 && count > limit {
return 0, nil
}
}
}
if it.Err() != nil {
return 1, it.Err()
}
return 0, nil
}
func GetTag(parser *args.ArgParser, data interface{}) (int, error) {
mg := data.(mailgun.Mailgun)
desc := args.Dedent(`get metatdata about a tag via the mailgun HTTP API
Examples:
fetch the tag metatdata and print it in json
$ mailgun tag get my-tag`)
parser.SetDesc(desc)
parser.AddArgument("tag").Required().Help("the tag to retrieve")
opts := parser.ParseSimple(nil)
if opts == nil {
return 1, nil
}
tag, err := mg.GetTag(opts.String("tag"))
if err != nil {
return 1, err
}
output, err := json.Marshal(tag)
if err != nil {
return 1, fmt.Errorf("Json Error: %s\n", err)
}
fmt.Print(string(output))
return 0, nil
}
func DeleteTag(parser *args.ArgParser, data interface{}) (int, error) {
mg := data.(mailgun.Mailgun)
desc := args.Dedent(`delete a tag via the mailgun HTTP API
Examples:
delete my-tag
$ mailgun tag delete my-tag`)
parser.SetDesc(desc)
parser.AddArgument("tag").Required().Help("the tag to delete")
opts := parser.ParseSimple(nil)
if opts == nil {
return 1, nil
}
err := mg.DeleteTag(opts.String("tag"))
if err != nil {
return 1, err
}
return 0, nil
}