def_mtxt.go 1.8 KB

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