bytes.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package goshared
  2. const bytesTpl = `
  3. {{ $f := .Field }}{{ $r := .Rules }}
  4. {{ if $r.GetIgnoreEmpty }}
  5. if len({{ accessor . }}) > 0 {
  6. {{ end }}
  7. {{ if or $r.Len (and $r.MinLen $r.MaxLen (eq $r.GetMinLen $r.GetMaxLen)) }}
  8. {{ if $r.Len }}
  9. if len({{ accessor . }}) != {{ $r.GetLen }} {
  10. err := {{ err . "value length must be " $r.GetLen " bytes" }}
  11. if !all { return err }
  12. errors = append(errors, err)
  13. }
  14. {{ else }}
  15. if len({{ accessor . }}) != {{ $r.GetMinLen }} {
  16. err := {{ err . "value length must be " $r.GetMinLen " bytes" }}
  17. if !all { return err }
  18. errors = append(errors, err)
  19. }
  20. {{ end }}
  21. {{ else if $r.MinLen }}
  22. {{ if $r.MaxLen }}
  23. if l := len({{ accessor . }}); l < {{ $r.GetMinLen }} || l > {{ $r.GetMaxLen }} {
  24. err := {{ err . "value length must be between " $r.GetMinLen " and " $r.GetMaxLen " bytes, inclusive" }}
  25. if !all { return err }
  26. errors = append(errors, err)
  27. }
  28. {{ else }}
  29. if len({{ accessor . }}) < {{ $r.GetMinLen }} {
  30. err := {{ err . "value length must be at least " $r.GetMinLen " bytes" }}
  31. if !all { return err }
  32. errors = append(errors, err)
  33. }
  34. {{ end }}
  35. {{ else if $r.MaxLen }}
  36. if len({{ accessor . }}) > {{ $r.GetMaxLen }} {
  37. err := {{ err . "value length must be at most " $r.GetMaxLen " bytes" }}
  38. if !all { return err }
  39. errors = append(errors, err)
  40. }
  41. {{ end }}
  42. {{ if $r.Prefix }}
  43. if !bytes.HasPrefix({{ accessor . }}, {{ lit $r.GetPrefix }}) {
  44. err := {{ err . "value does not have prefix " (byteStr $r.GetPrefix) }}
  45. if !all { return err }
  46. errors = append(errors, err)
  47. }
  48. {{ end }}
  49. {{ if $r.Suffix }}
  50. if !bytes.HasSuffix({{ accessor . }}, {{ lit $r.GetSuffix }}) {
  51. err := {{ err . "value does not have suffix " (byteStr $r.GetSuffix) }}
  52. if !all { return err }
  53. errors = append(errors, err)
  54. }
  55. {{ end }}
  56. {{ if $r.Contains }}
  57. if !bytes.Contains({{ accessor . }}, {{ lit $r.GetContains }}) {
  58. err := {{ err . "value does not contain " (byteStr $r.GetContains) }}
  59. if !all { return err }
  60. errors = append(errors, err)
  61. }
  62. {{ end }}
  63. {{ if $r.In }}
  64. if _, ok := {{ lookup $f "InLookup" }}[string({{ accessor . }})]; !ok {
  65. err := {{ err . "value must be in list " $r.In }}
  66. if !all { return err }
  67. errors = append(errors, err)
  68. }
  69. {{ else if $r.NotIn }}
  70. if _, ok := {{ lookup $f "NotInLookup" }}[string({{ accessor . }})]; ok {
  71. err := {{ err . "value must not be in list " $r.NotIn }}
  72. if !all { return err }
  73. errors = append(errors, err)
  74. }
  75. {{ end }}
  76. {{ if $r.Const }}
  77. if !bytes.Equal({{ accessor . }}, {{ lit $r.Const }}) {
  78. err := {{ err . "value must equal " $r.Const }}
  79. if !all { return err }
  80. errors = append(errors, err)
  81. }
  82. {{ end }}
  83. {{ if $r.GetIp }}
  84. if ip := net.IP({{ accessor . }}); ip.To16() == nil {
  85. err := {{ err . "value must be a valid IP address" }}
  86. if !all { return err }
  87. errors = append(errors, err)
  88. }
  89. {{ else if $r.GetIpv4 }}
  90. if ip := net.IP({{ accessor . }}); ip.To4() == nil {
  91. err := {{ err . "value must be a valid IPv4 address" }}
  92. if !all { return err }
  93. errors = append(errors, err)
  94. }
  95. {{ else if $r.GetIpv6 }}
  96. if ip := net.IP({{ accessor . }}); ip.To16() == nil || ip.To4() != nil {
  97. err := {{ err . "value must be a valid IPv6 address" }}
  98. if !all { return err }
  99. errors = append(errors, err)
  100. }
  101. {{ end }}
  102. {{ if $r.Pattern }}
  103. if !{{ lookup $f "Pattern" }}.Match({{ accessor . }}) {
  104. err := {{ err . "value does not match regex pattern " (lit $r.GetPattern) }}
  105. if !all { return err }
  106. errors = append(errors, err)
  107. }
  108. {{ end }}
  109. {{ if $r.GetIgnoreEmpty }}
  110. }
  111. {{ end }}
  112. `