def_spec_fn.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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.Num
  12. // Bool -- внутренее представление логического значения.
  13. type Bool = def_spec_base.Bool
  14. // ATxt -- алиас для внутренней строки.
  15. type ATxt = def_spec_base.Txt
  16. // TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt).
  17. type TxtConstraint = def_spec_base.TxtConstraint
  18. // Sprintf -- форматирует строку с помощью fmt.Sprintf.
  19. func Sprintf[T TxtConstraint](txt T, args ...any) ATxt {
  20. return ATxt(fmt.Sprintf(string(txt), args...))
  21. }
  22. // TrifSuffix -- обрезает суффикс строки
  23. func TrimSuffix[T TxtConstraint](txt T, suffix any) ATxt {
  24. suf := fmt.Sprintf("%v", suffix)
  25. _txt := strings.TrimSuffix(string(txt), suf)
  26. return ATxt(_txt)
  27. }
  28. // Atoi -- возвращает возможное число.
  29. func Atoi[T TxtConstraint](txt T) *result.Result[Int] {
  30. iRes, err := strconv.Atoi(string(txt))
  31. if err != nil {
  32. err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",
  33. txt, err)
  34. return result.ResErr[Int](err)
  35. }
  36. return result.ResOk(Int(iRes))
  37. }