def_mut_txt.go 2.2 KB

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