defs.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. }
  29. // ITxtMut -- интерфейс к изменяемой внутренней строке.
  30. type ITxtMut interface {
  31. ITxtFix
  32. // Set -- устанавливает внутреннюю строку
  33. Set(ATxt)
  34. }
  35. // ATxt -- алиас для внутренней строки.
  36. type ATxt string
  37. // KTxt -- алиас для внутренней строки.
  38. type KTxt struct {
  39. val ATxt
  40. }
  41. // TxtConstraint -- разрешает string и любые типы на его основе (например, ATxt).
  42. type TxtConstraint interface {
  43. ~string
  44. }
  45. // Txt -- создать новую строку.
  46. func Txt[T TxtConstraint](msg T, arg ...any) *KTxt {
  47. _msg := fmt.Sprintf(string(msg), arg...)
  48. sf := &KTxt{
  49. val: ATxt(_msg),
  50. }
  51. return sf
  52. }
  53. // TxtFix -- создать новую строку.
  54. func TxtFix[T TxtConstraint](msg T, arg ...any) ITxtFix {
  55. sf := Txt(msg, arg...)
  56. return sf
  57. }
  58. // TxtMut -- создать новую мутабельную строку.
  59. func TxtMut[T TxtConstraint](msg T, arg ...any) ITxtMut {
  60. _msg := fmt.Sprintf(string(msg), arg...)
  61. sf := &KTxt{
  62. val: ATxt(_msg),
  63. }
  64. return sf
  65. }
  66. // Get -- возвращает внутреннюю строку.
  67. func (sf KTxt) Get() ATxt {
  68. return sf.val
  69. }
  70. // TrimSuffix -- обрезает суффикс строки
  71. func (sf *KTxt) TrimSuffix(suffix any) ITxtFix {
  72. suf := fmt.Sprintf("%v", suffix)
  73. txt := strings.TrimSuffix(string(sf.val), suf)
  74. return Txt(txt)
  75. }
  76. // Set -- изменение внутренней строки
  77. func (sf *KTxt) Set(msg ATxt) {
  78. sf.val = msg
  79. }
  80. // Rune -- возвращает внутреннюю строку в виде рун.
  81. func (sf KTxt) Rune() []rune {
  82. return []rune(sf.val)
  83. }
  84. // Byte -- возвращает внутреннюю строку в виде байтов.
  85. func (sf KTxt) Byte() []byte {
  86. return []byte(sf.val)
  87. }
  88. // Len -- возвращает длину строки.
  89. func (sf KTxt) Len() Int {
  90. return Int(len(sf.val))
  91. }
  92. // String -- возвращает строку по требованию.
  93. func (sf KTxt) String() string {
  94. return string(sf.val)
  95. }
  96. // IErr -- алиас для error.
  97. type IErr interface {
  98. error
  99. ITxtFix
  100. // IsErr -- возвращает true, если ошибка.
  101. IsErr() bool
  102. }
  103. // KErr -- обёрнутая ошибка.
  104. type KErr struct {
  105. err error
  106. }
  107. // Err -- создать новую обёрнутую ошибку.
  108. func Err(msg ATxt, arg ...any) IErr {
  109. err := fmt.Errorf(string(msg), arg...)
  110. return &KErr{err}
  111. }
  112. // WrapErr -- возвращает обёрнутую ошибку.
  113. func WrapErr(err error) IErr {
  114. return &KErr{err}
  115. }
  116. // TrimSuffix -- обрезает суффикс строки.
  117. func (e *KErr) TrimSuffix(suffix any) ITxtFix {
  118. suf := fmt.Sprintf("%v", suffix)
  119. txt := strings.TrimSuffix(e.err.Error(), suf)
  120. return Txt(txt)
  121. }
  122. // Rune -- возвращает внутреннюю строку в виде рун.
  123. func (e *KErr) Rune() []rune {
  124. return []rune(e.err.Error())
  125. }
  126. // Byte -- возвращает байты из ошибки.
  127. func (e *KErr) Byte() []byte {
  128. return []byte(e.err.Error())
  129. }
  130. // IsErr -- возвращает true, если ошибка.
  131. func (e *KErr) IsErr() bool {
  132. return e.err != nil
  133. }
  134. // String -- возвращает строковое представление ошибки.
  135. func (e *KErr) String() string {
  136. return e.err.Error()
  137. }
  138. // Error -- возвращает хранимую ошибку.
  139. func (e *KErr) Error() string {
  140. return e.err.Error()
  141. }
  142. // Get -- возвращает строку по требованию для ошибки.
  143. func (e *KErr) Get() ATxt {
  144. return ATxt(e.err.Error())
  145. }
  146. // Len -- возвращает длину ошибки.
  147. func (e *KErr) Len() Int {
  148. return Int(len(e.err.Error()))
  149. }
  150. // ITimeFix -- метка времени.
  151. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  152. type ITimeFix ITxtFix
  153. // BucketName -- имя сущности.
  154. type BucketName KTxt
  155. // StreamName -- имя потока для ожидания.
  156. // type StreamName = stream_name.AStreamName
  157. // NewStreamName -- создать новое имя потока.
  158. // func NewStreamName(val Str) *stream_name.AStreamName {
  159. // return stream_name.NewAStreamName(val)
  160. // }