]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/aws/aws-sdk-go/aws/request/validation.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / aws / aws-sdk-go / aws / request / validation.go
CommitLineData
bae9f6d2
JC
1package request
2
3import (
4 "bytes"
5 "fmt"
6
7 "github.com/aws/aws-sdk-go/aws/awserr"
8)
9
10const (
11 // InvalidParameterErrCode is the error code for invalid parameters errors
12 InvalidParameterErrCode = "InvalidParameter"
13 // ParamRequiredErrCode is the error code for required parameter errors
14 ParamRequiredErrCode = "ParamRequiredError"
15 // ParamMinValueErrCode is the error code for fields with too low of a
16 // number value.
17 ParamMinValueErrCode = "ParamMinValueError"
18 // ParamMinLenErrCode is the error code for fields without enough elements.
19 ParamMinLenErrCode = "ParamMinLenError"
107c1cdb
ND
20 // ParamMaxLenErrCode is the error code for value being too long.
21 ParamMaxLenErrCode = "ParamMaxLenError"
22
23 // ParamFormatErrCode is the error code for a field with invalid
24 // format or characters.
25 ParamFormatErrCode = "ParamFormatInvalidError"
bae9f6d2
JC
26)
27
28// Validator provides a way for types to perform validation logic on their
29// input values that external code can use to determine if a type's values
30// are valid.
31type Validator interface {
32 Validate() error
33}
34
35// An ErrInvalidParams provides wrapping of invalid parameter errors found when
36// validating API operation input parameters.
37type ErrInvalidParams struct {
38 // Context is the base context of the invalid parameter group.
39 Context string
40 errs []ErrInvalidParam
41}
42
43// Add adds a new invalid parameter error to the collection of invalid
44// parameters. The context of the invalid parameter will be updated to reflect
45// this collection.
46func (e *ErrInvalidParams) Add(err ErrInvalidParam) {
47 err.SetContext(e.Context)
48 e.errs = append(e.errs, err)
49}
50
51// AddNested adds the invalid parameter errors from another ErrInvalidParams
52// value into this collection. The nested errors will have their nested context
53// updated and base context to reflect the merging.
54//
55// Use for nested validations errors.
56func (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInvalidParams) {
57 for _, err := range nested.errs {
58 err.SetContext(e.Context)
59 err.AddNestedContext(nestedCtx)
60 e.errs = append(e.errs, err)
61 }
62}
63
64// Len returns the number of invalid parameter errors
65func (e ErrInvalidParams) Len() int {
66 return len(e.errs)
67}
68
69// Code returns the code of the error
70func (e ErrInvalidParams) Code() string {
71 return InvalidParameterErrCode
72}
73
74// Message returns the message of the error
75func (e ErrInvalidParams) Message() string {
76 return fmt.Sprintf("%d validation error(s) found.", len(e.errs))
77}
78
79// Error returns the string formatted form of the invalid parameters.
80func (e ErrInvalidParams) Error() string {
81 w := &bytes.Buffer{}
82 fmt.Fprintf(w, "%s: %s\n", e.Code(), e.Message())
83
84 for _, err := range e.errs {
85 fmt.Fprintf(w, "- %s\n", err.Message())
86 }
87
88 return w.String()
89}
90
91// OrigErr returns the invalid parameters as a awserr.BatchedErrors value
92func (e ErrInvalidParams) OrigErr() error {
93 return awserr.NewBatchError(
94 InvalidParameterErrCode, e.Message(), e.OrigErrs())
95}
96
97// OrigErrs returns a slice of the invalid parameters
98func (e ErrInvalidParams) OrigErrs() []error {
99 errs := make([]error, len(e.errs))
100 for i := 0; i < len(errs); i++ {
101 errs[i] = e.errs[i]
102 }
103
104 return errs
105}
106
107// An ErrInvalidParam represents an invalid parameter error type.
108type ErrInvalidParam interface {
109 awserr.Error
110
111 // Field name the error occurred on.
112 Field() string
113
114 // SetContext updates the context of the error.
115 SetContext(string)
116
117 // AddNestedContext updates the error's context to include a nested level.
118 AddNestedContext(string)
119}
120
121type errInvalidParam struct {
122 context string
123 nestedContext string
124 field string
125 code string
126 msg string
127}
128
129// Code returns the error code for the type of invalid parameter.
130func (e *errInvalidParam) Code() string {
131 return e.code
132}
133
134// Message returns the reason the parameter was invalid, and its context.
135func (e *errInvalidParam) Message() string {
136 return fmt.Sprintf("%s, %s.", e.msg, e.Field())
137}
138
139// Error returns the string version of the invalid parameter error.
140func (e *errInvalidParam) Error() string {
141 return fmt.Sprintf("%s: %s", e.code, e.Message())
142}
143
144// OrigErr returns nil, Implemented for awserr.Error interface.
145func (e *errInvalidParam) OrigErr() error {
146 return nil
147}
148
149// Field Returns the field and context the error occurred.
150func (e *errInvalidParam) Field() string {
151 field := e.context
152 if len(field) > 0 {
153 field += "."
154 }
155 if len(e.nestedContext) > 0 {
156 field += fmt.Sprintf("%s.", e.nestedContext)
157 }
158 field += e.field
159
160 return field
161}
162
163// SetContext updates the base context of the error.
164func (e *errInvalidParam) SetContext(ctx string) {
165 e.context = ctx
166}
167
168// AddNestedContext prepends a context to the field's path.
169func (e *errInvalidParam) AddNestedContext(ctx string) {
170 if len(e.nestedContext) == 0 {
171 e.nestedContext = ctx
172 } else {
173 e.nestedContext = fmt.Sprintf("%s.%s", ctx, e.nestedContext)
174 }
175
176}
177
178// An ErrParamRequired represents an required parameter error.
179type ErrParamRequired struct {
180 errInvalidParam
181}
182
183// NewErrParamRequired creates a new required parameter error.
184func NewErrParamRequired(field string) *ErrParamRequired {
185 return &ErrParamRequired{
186 errInvalidParam{
187 code: ParamRequiredErrCode,
188 field: field,
189 msg: fmt.Sprintf("missing required field"),
190 },
191 }
192}
193
194// An ErrParamMinValue represents a minimum value parameter error.
195type ErrParamMinValue struct {
196 errInvalidParam
197 min float64
198}
199
200// NewErrParamMinValue creates a new minimum value parameter error.
201func NewErrParamMinValue(field string, min float64) *ErrParamMinValue {
202 return &ErrParamMinValue{
203 errInvalidParam: errInvalidParam{
204 code: ParamMinValueErrCode,
205 field: field,
206 msg: fmt.Sprintf("minimum field value of %v", min),
207 },
208 min: min,
209 }
210}
211
212// MinValue returns the field's require minimum value.
213//
214// float64 is returned for both int and float min values.
215func (e *ErrParamMinValue) MinValue() float64 {
216 return e.min
217}
218
219// An ErrParamMinLen represents a minimum length parameter error.
220type ErrParamMinLen struct {
221 errInvalidParam
222 min int
223}
224
225// NewErrParamMinLen creates a new minimum length parameter error.
226func NewErrParamMinLen(field string, min int) *ErrParamMinLen {
227 return &ErrParamMinLen{
228 errInvalidParam: errInvalidParam{
15c0b25d 229 code: ParamMinLenErrCode,
bae9f6d2
JC
230 field: field,
231 msg: fmt.Sprintf("minimum field size of %v", min),
232 },
233 min: min,
234 }
235}
236
237// MinLen returns the field's required minimum length.
238func (e *ErrParamMinLen) MinLen() int {
239 return e.min
240}
107c1cdb
ND
241
242// An ErrParamMaxLen represents a maximum length parameter error.
243type ErrParamMaxLen struct {
244 errInvalidParam
245 max int
246}
247
248// NewErrParamMaxLen creates a new maximum length parameter error.
249func NewErrParamMaxLen(field string, max int, value string) *ErrParamMaxLen {
250 return &ErrParamMaxLen{
251 errInvalidParam: errInvalidParam{
252 code: ParamMaxLenErrCode,
253 field: field,
254 msg: fmt.Sprintf("maximum size of %v, %v", max, value),
255 },
256 max: max,
257 }
258}
259
260// MaxLen returns the field's required minimum length.
261func (e *ErrParamMaxLen) MaxLen() int {
262 return e.max
263}
264
265// An ErrParamFormat represents a invalid format parameter error.
266type ErrParamFormat struct {
267 errInvalidParam
268 format string
269}
270
271// NewErrParamFormat creates a new invalid format parameter error.
272func NewErrParamFormat(field string, format, value string) *ErrParamFormat {
273 return &ErrParamFormat{
274 errInvalidParam: errInvalidParam{
275 code: ParamFormatErrCode,
276 field: field,
277 msg: fmt.Sprintf("format %v, %v", format, value),
278 },
279 format: format,
280 }
281}
282
283// Format returns the field's required format.
284func (e *ErrParamFormat) Format() string {
285 return e.format
286}