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