def_let_txt.go 1.8 KB

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