def_txt.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // package def_txt -- базовый тип текста
  2. package def_txt
  3. import (
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
  8. )
  9. // KTxt -- алиас для внутренней строки.
  10. type KTxt struct {
  11. val def_spec.ATxt
  12. }
  13. // Txt -- создать новую строку.
  14. func Txt[T def_spec.TxtConstraint](msg T, arg ...any) *KTxt {
  15. _msg := def_spec.Sprintf(msg, arg...)
  16. sf := &KTxt{
  17. val: _msg,
  18. }
  19. return sf
  20. }
  21. // TxtFix -- создать новую строку.
  22. func TxtFix[T def_spec.TxtConstraint](msg T, arg ...any) def_spec.ITxtFix {
  23. sf := Txt(msg, arg...)
  24. return sf
  25. }
  26. // TxtMut -- создать новую мутабельную строку.
  27. func TxtMut[T def_spec.TxtConstraint](msg T, arg ...any) def_spec.ITxtMut {
  28. _msg := def_spec.Sprintf(msg, arg...)
  29. sf := &KTxt{
  30. val: _msg,
  31. }
  32. return sf
  33. }
  34. // Get -- возвращает внутреннюю строку.
  35. func (sf KTxt) Get() def_spec.ATxt {
  36. return sf.val
  37. }
  38. // Concat -- создать новую строку.
  39. func (sf *KTxt) Concat(msg any, arg ...any) def_spec.ITxtFix {
  40. val := def_spec.Sprintf("%v", msg)
  41. val = def_spec.Sprintf(val, arg...)
  42. sf.val += val
  43. return sf
  44. }
  45. // TrimSuffix -- обрезает суффикс строки.
  46. func (sf *KTxt) TrimSuffix(suffix any) def_spec.ITxtFix {
  47. suf := fmt.Sprintf("%v", suffix)
  48. txt := strings.TrimSuffix(string(sf.val), suf)
  49. return Txt(txt)
  50. }
  51. // Set -- изменение внутренней строки.
  52. func (sf *KTxt) Set(msg def_spec.ATxt) {
  53. sf.val = msg
  54. }
  55. // Rune -- возвращает внутреннюю строку в виде рун.
  56. func (sf KTxt) Rune() []rune {
  57. return []rune(sf.val)
  58. }
  59. // Byte -- возвращает внутреннюю строку в виде байтов.
  60. func (sf KTxt) Byte() []byte {
  61. return []byte(sf.val)
  62. }
  63. // Len -- возвращает длину строки.
  64. func (sf KTxt) Len() def_spec.Int {
  65. return def_spec.Int(len(sf.val))
  66. }
  67. // String -- возвращает строку по требованию.
  68. func (sf KTxt) String() string {
  69. return string(sf.val)
  70. }
  71. // Atoi -- возвращает возможное число.
  72. func (sf KTxt) Atoi() *def_spec.Result[def_spec.Int] {
  73. iRes, err := strconv.Atoi(sf.String())
  74. if err != nil {
  75. err := fmt.Errorf("KTxt.Atot(): val(%q) not Int, err=\n\t%w",
  76. sf.val, err)
  77. return def_spec.NewErr[def_spec.Int](err)
  78. }
  79. return def_spec.NewOk(def_spec.Int(iRes))
  80. }