def_mtxt.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package def_txt
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_base"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_fn"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/d0/result"
  9. )
  10. // MTxt -- внутренней изменяемый текст.
  11. type MTxt struct {
  12. LTxt
  13. }
  14. // MutTxt -- создать новый внутрениий изменяемый текст.
  15. func MutTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *MTxt {
  16. sf := &MTxt{
  17. LTxt: *LetTxt(msg, arg...),
  18. }
  19. return sf
  20. }
  21. // Concat -- создать новый изменяемый текст.
  22. func (sf *MTxt) Concat(msg any, arg ...any) def_spec_base.Txt {
  23. val := fmt.Sprintf("%v", msg)
  24. val = fmt.Sprintf(val, arg...)
  25. sf.val.WriteString(val)
  26. return def_spec_base.Txt(sf.val.String())
  27. }
  28. // TrimSuffix -- обрезает суффикс неизменяемого текста.
  29. func (sf *MTxt) TrimSuffix[T def_spec_fn.TxtConstraint](suffix T) def_spec_base.Txt {
  30. suf := fmt.Sprintf("%v", suffix)
  31. txt := strings.TrimSuffix(sf.val.String(), suf)
  32. sf.val.WriteString(txt)
  33. return def_spec_base.Txt(sf.val.String())
  34. }
  35. // Atoi -- устанавливает и возвращает возможное число.
  36. func (sf MTxt) Atoi() *result.Result[def_spec_base.Num] {
  37. iRes, err := strconv.Atoi(sf.String())
  38. if err != nil {
  39. err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",
  40. sf.String(), err)
  41. return result.ResErr[def_spec_base.Num](err)
  42. }
  43. sf.val.Reset()
  44. sf.val.WriteString(fmt.Sprintf("%v", iRes))
  45. return result.ResOk(def_spec_base.Num(iRes))
  46. }
  47. // Set -- изменение внутренней строки.
  48. func (sf *MTxt) Set[T def_spec_fn.TxtConstraint](msg T, arg ...any) {
  49. _msg := fmt.Sprintf(string(msg), arg...)
  50. sf.val.Reset()
  51. sf.val.WriteString(_msg)
  52. }
  53. // Let -- возвращает неизменяемую копию себя
  54. func (sf *MTxt) Let() *LTxt {
  55. return LetTxt(sf.val.String())
  56. }