def_mut_txt.go 2.0 KB

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