def_txt_let.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // package def_txt -- внутренний текст.
  2. package def_txt
  3. import (
  4. "bytes"
  5. "fmt"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_base"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_fn"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/d0/helpers"
  10. )
  11. // LTxt -- неизменяемый текст
  12. type LTxt struct {
  13. *owner.OwnerPass
  14. val *bytes.Buffer
  15. }
  16. // LetTxt -- создать новый внутренний неизменяемый текст.
  17. func LetTxt[T def_spec_fn.TxtConstraint](owner *owner.LOwner, msg T, arg ...any) *LTxt {
  18. helpers.If(owner == nil).Hassert("LetTxt(): LOwner == nil")
  19. _msg := def_spec_fn.Sprintf(msg, arg...)
  20. sf := &LTxt{
  21. OwnerPass: owner.Pass(),
  22. val: bytes.NewBufferString(string(_msg)),
  23. }
  24. return sf
  25. }
  26. // Byte -- возвращает внутренний текст в форме байтов.
  27. func (sf LTxt) Byte() []byte {
  28. sf.CheckOwner()
  29. return sf.val.Bytes()
  30. }
  31. // Rune -- возвращает внутренний текст в форме рун.
  32. func (sf LTxt) Rune() []rune {
  33. sf.CheckOwner()
  34. return []rune(sf.val.String())
  35. }
  36. // Len -- возвращает длину текста.
  37. func (sf LTxt) Len() def_spec_base.Num {
  38. sf.CheckOwner()
  39. return def_spec_base.Num(sf.val.Len())
  40. }
  41. // Get -- возвращает хранимое значение
  42. func (sf LTxt) Get() def_spec_base.Txt {
  43. sf.CheckOwner()
  44. return def_spec_base.Txt(sf.val.String())
  45. }
  46. // Str -- возвращает строковое представление
  47. func (sf LTxt) Str() string {
  48. sf.CheckOwner()
  49. return sf.val.String()
  50. }
  51. const (
  52. strOut = `LTxt(
  53. OwnerPass(%v)
  54. Val(%v)
  55. )`
  56. )
  57. // String -- возвращает строку по требованию.
  58. func (sf LTxt) String() string {
  59. sf.CheckOwner()
  60. return fmt.Sprintf(strOut, sf.OwnerPass, sf.val)
  61. }