-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
82 lines (66 loc) · 1.88 KB
/
main.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
package main
import (
"context"
"io"
"net/http"
"net/url"
"os"
"strings"
"github.com/alecthomas/kong"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/wolfeidau/rest-cli/pkg/dump"
"github.com/wolfeidau/rest-cli/pkg/rest"
"github.com/wolfeidau/rest-cli/pkg/sigv4"
)
var (
version = "unknown"
flags struct {
Version kong.VersionFlag
Verbose bool `description:"Enable DEBUG level logging"`
Dump bool `description:"Dump the content of the request and response to stderr"`
Method string `enum:"GET,POST,PATCH,PUT,DELETE" default:"GET" short:"X"`
Service string `default:"execute-api"`
Data string `short:"d"`
Headers map[string]string `short:"H"`
URL *url.URL `arg:""`
}
)
func main() {
kong.Parse(&flags,
kong.Vars{"version": version},
kong.Name("rest-cli"),
kong.Description("A basic REST cli."),
kong.UsageOnError(),
kong.ConfigureHelp(kong.HelpOptions{
Compact: false,
Summary: true,
}))
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
zerolog.SetGlobalLevel(zerolog.InfoLevel)
if flags.Verbose {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
}
ctx := context.Background()
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
log.Fatal().Err(err).Msg("failed to load config")
}
transport := http.DefaultTransport
if flags.Dump {
transport = dump.WrapTransport(os.Stderr, transport)
}
httpClient := &http.Client{
Transport: sigv4.NewTransport(cfg, flags.Service, cfg.Region, transport),
}
var body io.Reader
if len(flags.Data) > 0 {
body = strings.NewReader(flags.Data)
}
restClient := rest.New(httpClient)
err = restClient.DoRequest(flags.Method, flags.URL.String(), flags.Headers, body, os.Stdout)
if err != nil {
log.Fatal().Err(err).Msg("failed to perform rest call")
}
}