defs.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. // IStr --интерфейс к гибкой строке.
  14. type IStr interface {
  15. // Str -- возвращает внутреннюю строку
  16. Str() AStr
  17. // String -- возвращает прямую строку
  18. String() string
  19. // Len -- возвращает длину внутренней строки
  20. Len() Int
  21. // Byte -- возвращает внутреннюю строку в виде байтов.
  22. Byte() []byte
  23. // Rune -- возвращает внутреннюю строку в виде рун.
  24. Rune() []rune
  25. }
  26. // Алиас для внутренней строки.
  27. type AStr string
  28. // Str -- создать новую строку.
  29. //
  30. //go:fix inline
  31. func Str(msg AStr, arg ...any) AStr {
  32. return AStr(fmt.Sprintf(string(msg), arg...))
  33. }
  34. // NewStr -- создать новую строку.
  35. //
  36. //go:fix inline
  37. func NewStr(msg AStr) IStr {
  38. return msg
  39. }
  40. // Rune -- возвращает внутреннюю строку в виде рун.
  41. //
  42. //go:fix inline
  43. func (s AStr) Rune() []rune {
  44. return []rune(s)
  45. }
  46. // Byte -- возвращает внутреннюю строку в виде байтов.
  47. //
  48. //go:fix inline
  49. func (s AStr) Byte() []byte {
  50. return []byte(s)
  51. }
  52. // Len -- возвращает длину строки.
  53. //
  54. //go:fix inline
  55. func (s AStr) Len() Int {
  56. return Int(len(s))
  57. }
  58. // Str -- возвращает внутреннюю строку.
  59. //
  60. //go:fix inline
  61. func (s AStr) Str() AStr {
  62. return s
  63. }
  64. // String -- возвращает строку по требованию.
  65. //
  66. //go:fix inline
  67. func (s AStr) String() string {
  68. return string(s)
  69. }
  70. // IErr -- алиас для error.
  71. type IErr interface {
  72. error
  73. IStr
  74. // IsErr -- возвращает true, если ошибка.
  75. IsErr() bool
  76. }
  77. // Err -- обёрнутая ошибка.
  78. type Err struct {
  79. err error
  80. }
  81. // NewErr -- создать новую обёрнутую ошибку.
  82. func NewErr(msg AStr, arg ...any) IErr {
  83. err := fmt.Errorf(string(msg), arg...)
  84. return &Err{err}
  85. }
  86. // WrapErr -- возвращает обёрнутую ошибку.
  87. //
  88. //go:fix inline
  89. func WrapErr(err error) IErr {
  90. return &Err{err}
  91. }
  92. // Rune -- возвращает внутреннюю строку в виде рун.
  93. //
  94. //go:fix inline
  95. func (e *Err) Rune() []rune {
  96. return []rune(e.err.Error())
  97. }
  98. // Byte -- возвращает байты из ошибки
  99. //
  100. //go:fix inline
  101. func (e *Err) Byte() []byte {
  102. return []byte(e.err.Error())
  103. }
  104. // IsErr -- возвращает true, если ошибка.
  105. //
  106. //go:fix inline
  107. func (e *Err) IsErr() bool {
  108. return e.err != nil
  109. }
  110. // String -- возвращает строковое представление ошибки.
  111. //
  112. //go:fix inline
  113. func (e *Err) String() string {
  114. return e.err.Error()
  115. }
  116. // Error -- возвращает хранимую ошибку.
  117. //
  118. //go:fix inline
  119. func (e *Err) Error() string {
  120. return e.err.Error()
  121. }
  122. // Str -- возвращает строку по требованию для ошибки.
  123. //
  124. //go:fix inline
  125. func (e *Err) Str() AStr {
  126. return AStr(e.err.Error())
  127. }
  128. // Len -- возвращает длину ошибки.
  129. //
  130. //go:fix inline
  131. func (e *Err) Len() Int {
  132. return Int(len(e.err.Error()))
  133. }
  134. // Time -- метка времени.
  135. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  136. type Time AStr
  137. // BucketName -- имя сущности.
  138. type BucketName AStr
  139. // StreamName -- имя потока для ожидания.
  140. //
  141. //go:fix inline
  142. // type StreamName = stream_name.AStreamName
  143. // NewStreamName -- создать новое имя потока.
  144. //
  145. //go:fix inline
  146. // func NewStreamName(val Str) *stream_name.AStreamName {
  147. // return stream_name.NewAStreamName(val)
  148. // }