timestamp.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package goshared
  2. const timestampcmpTpl = `{{ $f := .Field }}{{ $r := .Rules }}
  3. {{ if $r.Const }}
  4. if !ts.Equal({{ tsLit $r.Const }}) {
  5. err := {{ err . "value must equal " (tsStr $r.Const) }}
  6. if !all { return err }
  7. errors = append(errors, err)
  8. }
  9. {{ end }}
  10. {{ if or $r.LtNow $r.GtNow $r.Within }} now := time.Now(); {{ end }}
  11. {{- if $r.Lt }} lt := {{ tsLit $r.Lt }}; {{ end }}
  12. {{- if $r.Lte }} lte := {{ tsLit $r.Lte }}; {{ end }}
  13. {{- if $r.Gt }} gt := {{ tsLit $r.Gt }}; {{ end }}
  14. {{- if $r.Gte }} gte := {{ tsLit $r.Gte }}; {{ end }}
  15. {{- if $r.Within }} within := {{ durLit $r.Within }}; {{ end }}
  16. {{ if $r.Lt }}
  17. {{ if $r.Gt }}
  18. {{ if tsGt $r.GetLt $r.GetGt }}
  19. if ts.Sub(gt) <= 0 || ts.Sub(lt) >= 0 {
  20. err := {{ err . "value must be inside range (" (tsStr $r.GetGt) ", " (tsStr $r.GetLt) ")" }}
  21. if !all { return err }
  22. errors = append(errors, err)
  23. }
  24. {{ else }}
  25. if ts.Sub(lt) >= 0 && ts.Sub(gt) <= 0 {
  26. err := {{ err . "value must be outside range [" (tsStr $r.GetLt) ", " (tsStr $r.GetGt) "]" }}
  27. if !all { return err }
  28. errors = append(errors, err)
  29. }
  30. {{ end }}
  31. {{ else if $r.Gte }}
  32. {{ if tsGt $r.GetLt $r.GetGte }}
  33. if ts.Sub(gte) < 0 || ts.Sub(lt) >= 0 {
  34. err := {{ err . "value must be inside range [" (tsStr $r.GetGte) ", " (tsStr $r.GetLt) ")" }}
  35. if !all { return err }
  36. errors = append(errors, err)
  37. }
  38. {{ else }}
  39. if ts.Sub(lt) >= 0 && ts.Sub(gte) < 0 {
  40. err := {{ err . "value must be outside range [" (tsStr $r.GetLt) ", " (tsStr $r.GetGte) ")" }}
  41. if !all { return err }
  42. errors = append(errors, err)
  43. }
  44. {{ end }}
  45. {{ else }}
  46. if ts.Sub(lt) >= 0 {
  47. err := {{ err . "value must be less than " (tsStr $r.GetLt) }}
  48. if !all { return err }
  49. errors = append(errors, err)
  50. }
  51. {{ end }}
  52. {{ else if $r.Lte }}
  53. {{ if $r.Gt }}
  54. {{ if tsGt $r.GetLte $r.GetGt }}
  55. if ts.Sub(gt) <= 0 || ts.Sub(lte) > 0 {
  56. err := {{ err . "value must be inside range (" (tsStr $r.GetGt) ", " (tsStr $r.GetLte) "]" }}
  57. if !all { return err }
  58. errors = append(errors, err)
  59. }
  60. {{ else }}
  61. if ts.Sub(lte) > 0 && ts.Sub(gt) <= 0 {
  62. err := {{ err . "value must be outside range (" (tsStr $r.GetLte) ", " (tsStr $r.GetGt) "]" }}
  63. if !all { return err }
  64. errors = append(errors, err)
  65. }
  66. {{ end }}
  67. {{ else if $r.Gte }}
  68. {{ if tsGt $r.GetLte $r.GetGte }}
  69. if ts.Sub(gte) < 0 || ts.Sub(lte) > 0 {
  70. err := {{ err . "value must be inside range [" (tsStr $r.GetGte) ", " (tsStr $r.GetLte) "]" }}
  71. if !all { return err }
  72. errors = append(errors, err)
  73. }
  74. {{ else }}
  75. if ts.Sub(lte) > 0 && ts.Sub(gte) < 0 {
  76. err := {{ err . "value must be outside range (" (tsStr $r.GetLte) ", " (tsStr $r.GetGte) ")" }}
  77. if !all { return err }
  78. errors = append(errors, err)
  79. }
  80. {{ end }}
  81. {{ else }}
  82. if ts.Sub(lte) > 0 {
  83. err := {{ err . "value must be less than or equal to " (tsStr $r.GetLte) }}
  84. if !all { return err }
  85. errors = append(errors, err)
  86. }
  87. {{ end }}
  88. {{ else if $r.Gt }}
  89. if ts.Sub(gt) <= 0 {
  90. err := {{ err . "value must be greater than " (tsStr $r.GetGt) }}
  91. if !all { return err }
  92. errors = append(errors, err)
  93. }
  94. {{ else if $r.Gte }}
  95. if ts.Sub(gte) < 0 {
  96. err := {{ err . "value must be greater than or equal to " (tsStr $r.GetGte) }}
  97. if !all { return err }
  98. errors = append(errors, err)
  99. }
  100. {{ else if $r.LtNow }}
  101. {{ if $r.Within }}
  102. if ts.Sub(now) >= 0 || ts.Sub(now.Add(-within)) < 0 {
  103. err := {{ err . "value must be less than now within " (durStr $r.GetWithin) }}
  104. if !all { return err }
  105. errors = append(errors, err)
  106. }
  107. {{ else }}
  108. if ts.Sub(now) >= 0 {
  109. err := {{ err . "value must be less than now" }}
  110. if !all { return err }
  111. errors = append(errors, err)
  112. }
  113. {{ end }}
  114. {{ else if $r.GtNow }}
  115. {{ if $r.Within }}
  116. if ts.Sub(now) <= 0 || ts.Sub(now.Add(within)) > 0 {
  117. err := {{ err . "value must be greater than now within " (durStr $r.GetWithin) }}
  118. if !all { return err }
  119. errors = append(errors, err)
  120. }
  121. {{ else }}
  122. if ts.Sub(now) <= 0 {
  123. err := {{ err . "value must be greater than now" }}
  124. if !all { return err }
  125. errors = append(errors, err)
  126. }
  127. {{ end }}
  128. {{ else if $r.Within }}
  129. if ts.Sub(now.Add(within)) >= 0 || ts.Sub(now.Add(-within)) <= 0 {
  130. err := {{ err . "value must be within " (durStr $r.GetWithin) " of now" }}
  131. if !all { return err }
  132. errors = append(errors, err)
  133. }
  134. {{ end }}
  135. `