defs.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. // package defs -- предметные типы ядра.
  2. package defs
  3. import (
  4. "fmt"
  5. )
  6. // "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
  7. // Int -- алиас для int.
  8. type Int int
  9. // Int -- возвращает целое число по требованию.
  10. func (i Int) Int() int {
  11. return int(i)
  12. }
  13. // ITxtFix -- интерфейс к фиксированной внутренней строке.
  14. type ITxtFix interface {
  15. // Get -- возвращает внутреннюю строку
  16. Get() ATxt
  17. // String -- возвращает строку
  18. String() string
  19. // Len -- возвращает длину внутренней строки
  20. Len() Int
  21. // Byte -- возвращает внутреннюю строку в виде байтов.
  22. Byte() []byte
  23. // Rune -- возвращает внутреннюю строку в виде рун.
  24. Rune() []rune
  25. }
  26. // ITxtMut -- интерфейс к изменяемой внутренней строке.
  27. type ITxtMut interface {
  28. ITxtFix
  29. // Set -- устанавливает внутреннюю строку
  30. Set(ATxt)
  31. }
  32. // ATxt -- алиас для внутренней строки.
  33. type ATxt string
  34. // KTxt -- алиас для внутренней строки.
  35. type KTxt struct {
  36. val ATxt
  37. }
  38. // TxtConstraint -- разрешает string и любые типы на его основе (например, ATxt).
  39. type TxtConstraint interface {
  40. ~string
  41. }
  42. // Txt -- создать новую строку.
  43. func Txt[T TxtConstraint](msg T, arg ...any) *KTxt {
  44. _msg := fmt.Sprintf(string(msg), arg...)
  45. sf := &KTxt{
  46. val: ATxt(_msg),
  47. }
  48. return sf
  49. }
  50. // TxtFix -- создать новую строку.
  51. func TxtFix(msg ATxt, arg ...any) ITxtFix {
  52. sf := Txt(msg, arg...)
  53. return sf
  54. }
  55. // TxtMut -- создать новую мутабельную строку.
  56. func TxtMut(msg ATxt, arg ...any) ITxtMut {
  57. _msg := fmt.Sprintf(string(msg), arg...)
  58. sf := &KTxt{
  59. val: ATxt(_msg),
  60. }
  61. return sf
  62. }
  63. // Get -- возвращает внутреннюю строку.
  64. func (sf KTxt) Get() ATxt {
  65. return sf.val
  66. }
  67. // Set -- изменение внутренней строки
  68. func (sf *KTxt) Set(msg ATxt) {
  69. sf.val = msg
  70. }
  71. // Rune -- возвращает внутреннюю строку в виде рун.
  72. func (sf KTxt) Rune() []rune {
  73. return []rune(sf.val)
  74. }
  75. // Byte -- возвращает внутреннюю строку в виде байтов.
  76. func (sf KTxt) Byte() []byte {
  77. return []byte(sf.val)
  78. }
  79. // Len -- возвращает длину строки.
  80. func (sf KTxt) Len() Int {
  81. return Int(len(sf.val))
  82. }
  83. // String -- возвращает строку по требованию.
  84. func (sf KTxt) String() string {
  85. return string(sf.val)
  86. }
  87. // IErr -- алиас для error.
  88. type IErr interface {
  89. error
  90. ITxtFix
  91. // IsErr -- возвращает true, если ошибка.
  92. IsErr() bool
  93. }
  94. // KErr -- обёрнутая ошибка.
  95. type KErr struct {
  96. err error
  97. }
  98. // Err -- создать новую обёрнутую ошибку.
  99. func Err(msg ATxt, arg ...any) IErr {
  100. err := fmt.Errorf(string(msg), arg...)
  101. return &KErr{err}
  102. }
  103. // WrapErr -- возвращает обёрнутую ошибку.
  104. func WrapErr(err error) IErr {
  105. return &KErr{err}
  106. }
  107. // Rune -- возвращает внутреннюю строку в виде рун.
  108. func (e *KErr) Rune() []rune {
  109. return []rune(e.err.Error())
  110. }
  111. // Byte -- возвращает байты из ошибки.
  112. func (e *KErr) Byte() []byte {
  113. return []byte(e.err.Error())
  114. }
  115. // IsErr -- возвращает true, если ошибка.
  116. func (e *KErr) IsErr() bool {
  117. return e.err != nil
  118. }
  119. // String -- возвращает строковое представление ошибки.
  120. func (e *KErr) String() string {
  121. return e.err.Error()
  122. }
  123. // Error -- возвращает хранимую ошибку.
  124. func (e *KErr) Error() string {
  125. return e.err.Error()
  126. }
  127. // Get -- возвращает строку по требованию для ошибки.
  128. func (e *KErr) Get() ATxt {
  129. return ATxt(e.err.Error())
  130. }
  131. // Len -- возвращает длину ошибки.
  132. func (e *KErr) Len() Int {
  133. return Int(len(e.err.Error()))
  134. }
  135. // ITimeFix -- метка времени.
  136. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  137. type ITimeFix ITxtFix
  138. // BucketName -- имя сущности.
  139. type BucketName KTxt
  140. // StreamName -- имя потока для ожидания.
  141. // type StreamName = stream_name.AStreamName
  142. // NewStreamName -- создать новое имя потока.
  143. // func NewStreamName(val Str) *stream_name.AStreamName {
  144. // return stream_name.NewAStreamName(val)
  145. // }