helpers.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // package helpers -- содержит всякие полезняшки.
  2. //
  3. // Пакет импортировать где нужно в нотации `. "gitlab.c2g.pw/back/uaj-abstract-client/pkg/helpers"`
  4. package helpers
  5. import (
  6. "fmt"
  7. "log"
  8. "os"
  9. "time"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
  11. )
  12. var (
  13. IsStageLocal bool
  14. IsStageProd bool
  15. )
  16. // FnAssert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
  17. //
  18. // (isCond bool, msgFormat defs.Str, args ...any)
  19. // type FnAssert func(isCond bool, msgFormat def_spec.ATxt, args ...any)
  20. // Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
  21. // func Assert(isCond bool, msgFormat def_spec.ATxt, args ...any) {
  22. // if isCond {
  23. // return
  24. // }
  25. // msg := def_spec.Sprintf("SOFT ASSERT "+msgFormat+"\n", args...)
  26. // if IsStageLocal {
  27. // panic(msg)
  28. // }
  29. // log.Print(msg)
  30. // }
  31. // IAssertAction -- действие, которое будет выполнено при проверке.
  32. type IAssertAction interface {
  33. // Assert -- жёсткое падение кроме прода
  34. Assert(msgFormat def_spec.ATxt, args ...any)
  35. // Hassert -- жёсткое падение даже на проде
  36. Hassert(msgFormat def_spec.ATxt, args ...any)
  37. }
  38. type IfAction func(msgFormat def_spec.ATxt, args ...any)
  39. type AssertAction struct {
  40. isCond def_spec.Bool
  41. }
  42. // Hassert -- проверка на правильность утверждения с безусловным падением в панику даже на проде (hard assert).
  43. func (sf *AssertAction) Hassert(msgFormat def_spec.ATxt, args ...any) {
  44. if !sf.isCond {
  45. return
  46. }
  47. msg := def_spec.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
  48. panic(msg)
  49. }
  50. // Assert -- проверка на правильность утверждения с падением в панику кроме прода (soft assert).
  51. func (sf *AssertAction) Assert(msgFormat def_spec.ATxt, args ...any) {
  52. if !sf.isCond {
  53. return
  54. }
  55. msg := def_spec.Sprintf("SOFT ASSERT "+msgFormat+"\n", args...)
  56. if IsStageLocal {
  57. panic(msg)
  58. }
  59. log.Print(msg)
  60. }
  61. type FnIf func(isCond def_spec.Bool) IAssertAction
  62. // If -- условие для проверки.
  63. func If(isCond def_spec.Bool) IAssertAction {
  64. sf := &AssertAction{
  65. isCond: isCond,
  66. }
  67. return sf
  68. }
  69. // FnHassert -- проверяет с жёстким падением условие.
  70. //
  71. // (isCond bool, msgFormat defs.Str, args ...any)
  72. // type FnHassert func(isCond def_spec.Bool, msgFormat def_spec.ATxt, args ...any)
  73. // Hassert -- проверка на правильность утверждения с безусловным падением в панику (hard assert).
  74. // func Hassert(isCond def_spec.Bool, msgFormat def_spec.ATxt, args ...any) {
  75. // if isCond {
  76. // return
  77. // }
  78. // msg := def_spec.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
  79. // panic(msg)
  80. // }
  81. // TimeNow -- возвращает локальное Unix сейчас-время (мсек, не зависит от положения).
  82. func TimeNow() int64 {
  83. timeNow := time.Now().Local().UnixMilli()
  84. return timeNow
  85. }
  86. // SleepMs -- спит миллисекунду (иногда бывает полезно).
  87. func SleepMs() {
  88. time.Sleep(time.Millisecond * 1)
  89. }
  90. func init_() {
  91. strStage := os.Getenv("STAGE")
  92. switch strStage {
  93. case "local":
  94. IsStageLocal = true
  95. IsStageProd = false
  96. case "prod":
  97. IsStageProd = true
  98. IsStageLocal = false
  99. case "":
  100. IsStageLocal = true
  101. IsStageProd = false
  102. default:
  103. panic(fmt.Sprintf("lepers.init_(): unknown env STAGE (%v)\n", strStage))
  104. }
  105. }
  106. func init() {
  107. init_()
  108. }