def_spec_fn.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // package def_spec_fn -- набор функций базовых спецификаций
  2. package def_spec_fn
  3. import (
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
  9. )
  10. // Int -- алиас для int.
  11. type Int = def_spec_base.Int
  12. // Bool -- внутренее представление логического значения.
  13. type Bool = def_spec_base.Bool
  14. // ATxt -- алиас для внутренней строки.
  15. type ATxt = def_spec_base.ATxt
  16. // IString -- интерфейс к стандартной строке.
  17. type IString interface {
  18. // String -- возвращает стандартную строку
  19. String() string
  20. }
  21. // TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt).
  22. type TxtConstraint interface {
  23. ~string
  24. }
  25. // Sprintf -- форматирует строку с помощью fmt.Sprintf.
  26. func Sprintf[T TxtConstraint](txt T, args ...interface{}) ATxt {
  27. return ATxt(fmt.Sprintf(string(txt), args...))
  28. }
  29. // TrifSuffix -- обрезает суффикс строки
  30. func TrimSuffix[T TxtConstraint](txt T, suffix any) ATxt {
  31. suf := fmt.Sprintf("%v", suffix)
  32. _txt := strings.TrimSuffix(string(txt), suf)
  33. return ATxt(_txt)
  34. }
  35. // Atoi -- возвращает возможное число.
  36. func Atoi[T TxtConstraint](txt T) *result.Result[Int] {
  37. iRes, err := strconv.Atoi(string(txt))
  38. if err != nil {
  39. err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",
  40. txt, err)
  41. return result.NewErr[Int](err)
  42. }
  43. return result.NewOk(Int(iRes))
  44. }