errors.go 1021 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2014 Manu Martinez-Almeida. All rights reserved.
  2. // Use of this source code is governed by a MIT style
  3. // license that can be found in the LICENSE file.
  4. package gin
  5. import (
  6. "bytes"
  7. "fmt"
  8. )
  9. const (
  10. ErrorTypeInternal = 1 << iota
  11. ErrorTypeExternal = 1 << iota
  12. ErrorTypeAll = 0xffffffff
  13. )
  14. // Used internally to collect errors that occurred during an http request.
  15. type errorMsg struct {
  16. Err string `json:"error"`
  17. Type int `json:"-"`
  18. Meta interface{} `json:"meta"`
  19. }
  20. type errorMsgs []errorMsg
  21. func (a errorMsgs) ByType(typ int) errorMsgs {
  22. if len(a) == 0 {
  23. return a
  24. }
  25. result := make(errorMsgs, 0, len(a))
  26. for _, msg := range a {
  27. if msg.Type&typ > 0 {
  28. result = append(result, msg)
  29. }
  30. }
  31. return result
  32. }
  33. func (a errorMsgs) String() string {
  34. if len(a) == 0 {
  35. return ""
  36. }
  37. var buffer bytes.Buffer
  38. for i, msg := range a {
  39. text := fmt.Sprintf("Error #%02d: %s\n Meta: %v\n", (i + 1), msg.Err, msg.Meta)
  40. buffer.WriteString(text)
  41. }
  42. return buffer.String()
  43. }