defs.go 5.7 KB

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