forked from fastly/go-fastly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
errors.go
116 lines (91 loc) · 4.03 KB
/
errors.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
package fastly
import (
"bytes"
"errors"
"fmt"
"net/http"
)
// ErrMissingService is an error that is returned when an input struct requires
// a "Service" key, but one was not set.
var ErrMissingService = errors.New("Missing required field 'Service'")
// ErrMissingVersion is an error that is returned when an input struct requires
// a "Version" key, but one was not set.
var ErrMissingVersion = errors.New("Missing required field 'Version'")
// ErrMissingName is an error that is returned when an input struct requires a
// "Name" key, but one was not set.
var ErrMissingName = errors.New("Missing required field 'Name'")
// ErrMissingKey is an error that is returned when an input struct requires a
// "Name" key, but one was not set.
var ErrMissingKey = errors.New("Missing required field 'Key'")
// ErrMissingURL is an error that is returned when an input struct requires a
// "Name" key, but one was not set.
var ErrMissingURL = errors.New("Missing required field 'URL'")
// ErrMissingID is an error that is returned when an input struct requires an
// "ID" key, but one was not set.
var ErrMissingID = errors.New("Missing required field 'ID'")
// ErrMissingDictionary is an error that is returned when an input struct
// requires a "Dictionary" key, but one was not set.
var ErrMissingDictionary = errors.New("Missing required field 'Dictionary'")
// ErrMissingItemKey is an error that is returned when an input struct
// requires a "ItemKey" key, but one was not set.
var ErrMissingItemKey = errors.New("Missing required field 'ItemKey'")
// ErrMissingFrom is an error that is returned when an input struct
// requires a "From" key, but one was not set.
var ErrMissingFrom = errors.New("Missing required field 'From'")
// ErrMissingTo is an error that is returned when an input struct
// requires a "To" key, but one was not set.
var ErrMissingTo = errors.New("Missing required field 'To'")
// ErrMissingDirector is an error that is returned when an input struct
// requires a "From" key, but one was not set.
var ErrMissingDirector = errors.New("Missing required field 'Director'")
// ErrMissingBackend is an error that is returned when an input struct
// requires a "Backend" key, but one was not set.
var ErrMissingBackend = errors.New("Missing required field 'Backend'")
// ErrMissingYear is an error that is returned when an input struct
// requires a "Year" key, but one was not set.
var ErrMissingYear = errors.New("Missing required field 'Year'")
// ErrMissingMonth is an error that is returned when an input struct
// requires a "Month" key, but one was not set.
var ErrMissingMonth = errors.New("Missing required field 'Month'")
// Ensure HTTPError is, in fact, an error.
var _ error = (*HTTPError)(nil)
// HTTPError is a custom error type that wraps an HTTP status code with some
// helper functions.
type HTTPError struct {
// StatusCode is the HTTP status code (2xx-5xx).
StatusCode int
// Message and Detail are information returned by the Fastly API.
Message string `mapstructure:"msg"`
Detail string `mapstructure:"detail"`
}
// NewHTTPError creates a new HTTP error from the given code.
func NewHTTPError(resp *http.Response) *HTTPError {
var e HTTPError
if resp.Body != nil {
decodeJSON(&e, resp.Body)
}
e.StatusCode = resp.StatusCode
return &e
}
// Error implements the error interface and returns the string representing the
// error text that includes the status code and the corresponding status text.
func (e *HTTPError) Error() string {
var r bytes.Buffer
fmt.Fprintf(&r, "%d - %s", e.StatusCode, http.StatusText(e.StatusCode))
if e.Message != "" {
fmt.Fprintf(&r, "\nMessage: %s", e.Message)
}
if e.Detail != "" {
fmt.Fprintf(&r, "\nDetail: %s", e.Detail)
}
return r.String()
}
// String implements the stringer interface and returns the string representing
// the string text that includes the status code and corresponding status text.
func (e *HTTPError) String() string {
return e.Error()
}
// IsNotFound returns true if the HTTP error code is a 404, false otherwise.
func (e *HTTPError) IsNotFound() bool {
return e.StatusCode == 404
}