def_let_txt.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // package def_let_txt -- неизменяемый текст.
  2. package def_let_txt
  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/defs/def_spec_fn"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
  10. )
  11. // LTxt -- неизменяемый текст
  12. type LTxt struct {
  13. val def_spec_base.ATxt
  14. }
  15. // LetTxt -- создать новую неизменяемую строку.
  16. func LetTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *LTxt {
  17. _msg := def_spec_fn.Sprintf(msg, arg...)
  18. sf := &LTxt{
  19. val: def_spec_base.ATxt(_msg),
  20. }
  21. return sf
  22. }
  23. // TrimSuffix -- обрезает суффикс строки.
  24. func (sf *LTxt) TrimSuffix(suffix any) def_spec_base.ATxt {
  25. suf := fmt.Sprintf("%v", suffix)
  26. txt := strings.TrimSuffix(sf.String(), suf)
  27. return def_spec_base.ATxt(txt)
  28. }
  29. // Rune -- возвращает внутреннюю строку в виде рун.
  30. func (sf LTxt) Rune() []rune {
  31. return []rune(sf.val)
  32. }
  33. // Byte -- возвращает внутреннюю строку в виде байтов.
  34. func (sf LTxt) Byte() []byte {
  35. return []byte(sf.val)
  36. }
  37. // Len -- возвращает длину строки.
  38. func (sf LTxt) Len() def_spec_base.Int {
  39. return def_spec_base.Int(len(sf.val))
  40. }
  41. // Get -- возвращает хранимое значение
  42. func (sf LTxt) Get() def_spec_base.ATxt {
  43. return sf.val
  44. }
  45. // String -- возвращает строку по требованию.
  46. func (sf LTxt) String() string {
  47. return string(sf.val)
  48. }
  49. // Atoi -- возвращает возможное число.
  50. func (sf LTxt) Atoi() *result.Result[def_spec_base.Int] {
  51. iRes, err := strconv.Atoi(sf.String())
  52. if err != nil {
  53. err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",
  54. sf.String(), err)
  55. return result.ResErr[def_spec_base.Int](err)
  56. }
  57. return result.ResOk(def_spec_base.Int(iRes))
  58. }