| 17 | } |
| 18 | |
| 19 | func (e *APIError) Error() string { |
| 20 | retryInfo := "" |
| 21 | if e.RetryAfter > 0 { |
| 22 | retryInfo = fmt.Sprintf(" (retry after %s)", e.RetryAfter) |
| 23 | } |
| 24 | |
| 25 | if len(e.Errors) == 0 { |
| 26 | return fmt.Sprintf("API error %d%s: %s", e.StatusCode, retryInfo, e.RawBody) |
| 27 | } |
| 28 | |
| 29 | var msgs []string |
| 30 | for _, err := range e.Errors { |
| 31 | msg := err.Message |
| 32 | if err.Field != "" { |
| 33 | msg = fmt.Sprintf("%s (field: %s)", msg, err.Field) |
| 34 | } |
| 35 | msgs = append(msgs, msg) |
| 36 | } |
| 37 | return fmt.Sprintf("API error %d%s: %s", e.StatusCode, retryInfo, strings.Join(msgs, "; ")) |
| 38 | } |