defs.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. // ATxt -- алиас для внутренней строки.
  27. type ATxt string
  28. // Txt -- создать новую строку.
  29. func Txt(msg ATxt, arg ...any) ATxt {
  30. return ATxt(fmt.Sprintf(msg.String(), arg...))
  31. }
  32. // ToTxt -- создать новую строку.
  33. func ToTxt(msg ATxt) ITxtFix {
  34. return msg
  35. }
  36. // Rune -- возвращает внутреннюю строку в виде рун.
  37. func (s ATxt) Rune() []rune {
  38. return []rune(s)
  39. }
  40. // Byte -- возвращает внутреннюю строку в виде байтов.
  41. //
  42. func (s ATxt) Byte() []byte {
  43. return []byte(s)
  44. }
  45. // Len -- возвращает длину строки.
  46. //
  47. func (s ATxt) Len() Int {
  48. return Int(len(s))
  49. }
  50. // Get -- возвращает внутреннюю строку.
  51. func (s ATxt) Get() ATxt {
  52. return s
  53. }
  54. // String -- возвращает строку по требованию.
  55. //
  56. func (s ATxt) String() string {
  57. return string(s)
  58. }
  59. // IErr -- алиас для error.
  60. type IErr interface {
  61. error
  62. ITxtFix
  63. // IsErr -- возвращает true, если ошибка.
  64. IsErr() bool
  65. }
  66. // Err -- обёрнутая ошибка.
  67. type Err struct {
  68. err error
  69. }
  70. // NewErr -- создать новую обёрнутую ошибку.
  71. func NewErr(msg ATxt, arg ...any) IErr {
  72. err := fmt.Errorf(msg.String(), arg...)
  73. return &Err{err}
  74. }
  75. // WrapErr -- возвращает обёрнутую ошибку.
  76. //
  77. func WrapErr(err error) IErr {
  78. return &Err{err}
  79. }
  80. // Rune -- возвращает внутреннюю строку в виде рун.
  81. //
  82. func (e *Err) Rune() []rune {
  83. return []rune(e.err.Error())
  84. }
  85. // Byte -- возвращает байты из ошибки
  86. func (e *Err) Byte() []byte {
  87. return []byte(e.err.Error())
  88. }
  89. // IsErr -- возвращает true, если ошибка.
  90. func (e *Err) IsErr() bool {
  91. return e.err != nil
  92. }
  93. // String -- возвращает строковое представление ошибки.
  94. func (e *Err) String() string {
  95. return e.err.Error()
  96. }
  97. // Error -- возвращает хранимую ошибку.
  98. func (e *Err) Error() string {
  99. return e.err.Error()
  100. }
  101. // Get -- возвращает строку по требованию для ошибки.
  102. func (e *Err) Get() ATxt {
  103. return ATxt(e.err.Error())
  104. }
  105. // Len -- возвращает длину ошибки.
  106. func (e *Err) Len() Int {
  107. return Int(len(e.err.Error()))
  108. }
  109. // Time -- метка времени.
  110. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  111. type Time ATxt
  112. // BucketName -- имя сущности.
  113. type BucketName ATxt
  114. // StreamName -- имя потока для ожидания.
  115. // type StreamName = stream_name.AStreamName
  116. // NewStreamName -- создать новое имя потока.
  117. // func NewStreamName(val Str) *stream_name.AStreamName {
  118. // return stream_name.NewAStreamName(val)
  119. // }