ソースを参照

SVI Рабочее сохранение

SVI 1 ヶ月 前
親
コミット
4b1fdc1f26
100 ファイル変更、971 行追加、1438 行削除
  1. 9 11
      v4/kern.go
  2. 0 13
      v4/lev0/core_spec/eint.go
  3. 0 18
      v4/lev0/core_spec/estr.go
  4. 4 4
      v4/lev0/core_spec/ichan.go
  5. 0 8
      v4/lev0/core_spec/ioption.go
  6. 0 8
      v4/lev0/core_spec/iresult.go
  7. 4 5
      v4/lev0/core_spec/isafe_bool.go
  8. 3 3
      v4/lev0/core_spec/isafe_bool_react.go
  9. 4 4
      v4/lev0/core_spec/isafe_string.go
  10. 0 43
      v4/lev0/defs/def_err/def_err.go
  11. 5 5
      v4/lev0/defs/def_let_bool/def_let_bool.go
  12. 16 6
      v4/lev0/defs/def_let_int/def_let_int.go
  13. 13 9
      v4/lev0/defs/def_let_txt/def_let_txt.go
  14. 7 8
      v4/lev0/defs/def_move/def_move.go
  15. 6 6
      v4/lev0/defs/def_mut_bool/def_mut_bool.go
  16. 27 21
      v4/lev0/defs/def_mut_int/def_mut_int.go
  17. 2 2
      v4/lev0/defs/def_mut_time/def_mut_time.go
  18. 28 12
      v4/lev0/defs/def_mut_txt/def_mut_txt.go
  19. 0 47
      v4/lev0/defs/def_num/def_num.go
  20. 0 14
      v4/lev0/defs/def_spec/def_box.go
  21. 0 9
      v4/lev0/defs/def_spec/def_err.go
  22. 0 22
      v4/lev0/defs/def_spec/def_num.go
  23. 0 19
      v4/lev0/defs/def_spec/def_option.go
  24. 0 108
      v4/lev0/defs/def_spec/def_spec.go
  25. 0 27
      v4/lev0/defs/def_spec/def_txt.go
  26. 8 0
      v4/lev0/defs/def_spec_base/def_spec_base.go
  27. 3 3
      v4/lev0/defs/def_spec_fn/def_spec_fn.go
  28. 3 3
      v4/lev0/defs/def_tuf.go
  29. 0 95
      v4/lev0/defs/def_txt/def_txt.go
  30. 72 20
      v4/lev0/defs/defs.go
  31. 0 103
      v4/lev0/etypes/estr/estr.go
  32. 0 47
      v4/lev0/etypes/etypes.go
  33. 7 6
      v4/lev0/helpers/helpers.go
  34. 75 9
      v4/lev0/lev0.go
  35. 5 5
      v4/lev0/result/result.go
  36. 9 9
      v4/lev0/result/result_test.go
  37. 4 4
      v4/lev0/tuf/tuf.go
  38. 3 3
      v4/lev1/comp_spec/ilocal_ctx.go
  39. 6 8
      v4/lev1/lev1.go
  40. 12 13
      v4/lev1/local_ctx/ctx_value/ctx_value.go
  41. 6 8
      v4/lev1/local_ctx/ctx_value/ctx_value_test.go
  42. 21 25
      v4/lev1/local_ctx/local_ctx.go
  43. 5 4
      v4/lev1/local_ctx/local_ctx_test.go
  44. 37 37
      v4/lev1/log_buf/log_buf.go
  45. 10 14
      v4/lev1/log_buf/log_buf_test.go
  46. 25 22
      v4/lev1/log_buf/log_msg/log_msg.go
  47. 6 8
      v4/lev1/log_buf/log_msg/log_msg_test.go
  48. 3 4
      v4/lev1/log_dict_topic/log_dict_topic.go
  49. 7 7
      v4/lev1/lst_sort/lst_sort_test.go
  50. 33 25
      v4/lev1/mock_env/mock_env.go
  51. 2 2
      v4/lev1/mock_env/mock_env_test.go
  52. 21 21
      v4/lev1/safe_bool/safe_bool.go
  53. 5 6
      v4/lev1/safe_bool/safe_bool_test.go
  54. 32 32
      v4/lev1/safe_bool_react/safe_bool_react.go
  55. 8 9
      v4/lev1/safe_bool_react/safe_bool_react_test.go
  56. 44 34
      v4/lev1/safe_int/safe_int.go
  57. 8 9
      v4/lev1/safe_int/safe_int_test.go
  58. 15 17
      v4/lev1/safe_string/safe_string.go
  59. 5 6
      v4/lev1/safe_string/safe_string_test.go
  60. 9 11
      v4/lev2/kchan/kchan.go
  61. 2 3
      v4/lev2/kctx/kctx.go
  62. 3 3
      v4/lev2/kctx/kctx_test.go
  63. 5 6
      v4/lev2/kern_ent/stream_name/stream_name.go
  64. 12 13
      v4/lev2/kernel_keeper/kernel_keeper.go
  65. 17 17
      v4/lev2/kmodule/kmodule.go
  66. 12 12
      v4/lev2/kmodule/mod_stat/mod_stat_day/mod_stat_day.go
  67. 10 10
      v4/lev2/kmodule/mod_stat/mod_stat_minute/mod_stat_minute.go
  68. 11 12
      v4/lev2/kmodule/mod_stat/mod_stat_sec/mod_stat_sec.go
  69. 22 25
      v4/lev2/kmonolit/kmonolit.go
  70. 2 2
      v4/lev2/kmonolit/kmonolit_test.go
  71. 24 28
      v4/lev2/kserv_http/kserv_http.go
  72. 4 4
      v4/lev2/kserv_http/kserv_http_test.go
  73. 12 14
      v4/lev2/kserv_http_std/kserv_http_std.go
  74. 3 4
      v4/lev2/kspec/ikernel_wg.go
  75. 18 24
      v4/lev2/kwg/kwg.go
  76. 2 3
      v4/lev2/kwg/kwg_test.go
  77. 3 3
      v4/lev2/log_topic/log_topic.go
  78. 8 8
      v4/lev2/lsi/kstore_kv/kstore_kv.go
  79. 2 2
      v4/lev2/lsi/store_ent/dict_rec/dict_rec.go
  80. 8 6
      v4/lev2/lsi/store_ent/rec_key/store_key.go
  81. 8 12
      v4/lev2/lti/bus_ent/handler_name/handler_name.go
  82. 6 9
      v4/lev2/lti/bus_ent/topic/topic.go
  83. 6 9
      v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve.go
  84. 1 1
      v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http_test.go
  85. 6 8
      v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub.go
  86. 5 6
      v4/lev2/lti/bus_spec/ikernel_bus.go
  87. 3 3
      v4/lev2/lti/dot/msg_pub/msg_pub_test.go
  88. 8 9
      v4/lev2/lti/dot/msg_serve/msg_serve.go
  89. 3 4
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go
  90. 3 3
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook_test.go
  91. 11 14
      v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve.go
  92. 2 3
      v4/lev2/lti/kbus/dict_topic_sub/dict_topic_sub_test.go
  93. 32 35
      v4/lev2/lti/kbus_base/kbus_base.go
  94. 20 20
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go
  95. 27 28
      v4/lev2/lti/kbus_http/kbus_http.go
  96. 3 4
      v4/lev2/lti/kbus_http/kbus_http_test.go
  97. 3 3
      v4/lev2/wui/hx_swap/hx_swap.go
  98. 3 3
      v4/lev2/wui/hx_trigger/hx_trigger.go
  99. 2 2
      v4/lev2/wui/hx_url/hx_url.go
  100. 2 2
      v4/lev2/wui/hx_url/hx_url_test.go

+ 9 - 11
v4/kern.go

@@ -45,17 +45,17 @@ func GetKernelCtx() kspec.IKernelCtx {
 type Result[T any] = lev0.Result[T]
 
 // NewErr -- возвращает Result с ошибкой.
-func NewErr[T any](err T) *Result[T] {
-	return lev0.NewErr[T](err)
+func NewErr[T any](err error) *Result[T] {
+	return lev0.ResErr[T](err)
 }
 
 // NewOk -- возвращает успешный Result с значением.
 func NewOk[T any](res T) *Result[T] {
-	return lev0.NewOk(res)
+	return lev0.ResOk(res)
 }
 
 // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
-func WrapErr[T any](res *Result[T], err T) *Result[T] {
+func WrapErr[T any](res *Result[T], err error) *Result[T] {
 	return lev0.WrapErr(res, err)
 }
 
@@ -88,9 +88,7 @@ func NewSafeBool(val defs.Bool) ISafeBool {
 // GetKernelBusLocal -- возвращает локальную шину данных.
 func GetKernelBusLocal() bus_spec.IKernelBus {
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set(defs.LetTxt("monolitName"),
-		"unknown monolit",
-		defs.LetTxt("GetKernelBusLocal()"))
+	kCtx.Set("monolitName", "unknown monolit", "GetKernelBusLocal()")
 	lBus := kbus_local.GetKernelBusLocal()
 	return lBus
 }
@@ -113,10 +111,10 @@ func SleepMs() {
 // GetMonolitLocal -- возвращает монолит с локальной шиной.
 func GetMonolitLocal(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set(defs.LetTxt("isLocal"), true, defs.LetTxt("bus type"))
+	kCtx.Set("isLocal", true, "bus type")
 	for {
 		time.Sleep(time.Millisecond * 1)
-		optIsLocal := kCtx.Get(defs.LetTxt("isLocal"))
+		optIsLocal := kCtx.Get("isLocal")
 		if optIsLocal.IsSome() {
 			break
 		}
@@ -130,10 +128,10 @@ func GetMonolitLocal(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
 func GetMonolitHttp(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
 	kCtx := kctx.GetKernelCtx()
 	_ = kbus_http.GetKernelBusHttp()
-	kCtx.Set(defs.LetTxt("isLocal"), false, defs.LetTxt("bus type"))
+	kCtx.Set("isLocal", false, "bus type")
 	for {
 		time.Sleep(time.Millisecond * 1)
-		optIsLocal := kCtx.Get(defs.LetTxt("isLocal"))
+		optIsLocal := kCtx.Get("isLocal")
 		if optIsLocal.IsSome() {
 			break
 		}

+ 0 - 13
v4/lev0/core_spec/eint.go

@@ -1,13 +0,0 @@
-package core_spec
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-)
-
-// EInt -- расширенное целочисленное значение.
-type EInt interface {
-	// SelfCheck -- выполняет самопроверку значения.
-	SelfCheck() *def_spec.Result[error]
-	// Get -- возвращает целочисленное значение.
-	Get() def_spec.Int
-}

+ 0 - 18
v4/lev0/core_spec/estr.go

@@ -1,18 +0,0 @@
-package core_spec
-
-import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-
-// EStr -- расширенная строка.
-type EStr interface {
-	// SelfCheck -- выполняет самопроверку строки.
-	SelfCheck()
-	// Get -- возвращает строку.
-	Get() *def_spec.LTxt
-}
-
-// EStrMut -- мутабельная расширенная строка.
-type EStrMut interface {
-	EStr
-	// Set -- устанавливает строку.
-	Set(*def_spec.LTxt)
-}

+ 4 - 4
v4/lev0/core_spec/ichan.go

@@ -1,7 +1,7 @@
 package core_spec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
@@ -10,11 +10,11 @@ type IChan[T any] interface {
 	// Read -- читает сообщение из канала.
 	Read() *result.Result[T]
 	// Limit -- лимит канала.
-	Limit() def_spec.Int
+	Limit() defs.Int
 	// Len -- количество сообщений в канале.
-	Len() def_spec.Int
+	Len() defs.Int
 	// Close -- закрыть канал.
 	Close()
 	// IsClosed -- проверяет закрыт ли канал.
-	IsClosed() def_spec.Bool
+	IsClosed() defs.Bool
 }

+ 0 - 8
v4/lev0/core_spec/ioption.go

@@ -1,8 +0,0 @@
-package core_spec
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-)
-
-// IOption -- интерфейс опции.
-type IOption[T any] = def_spec.IOption[T]

+ 0 - 8
v4/lev0/core_spec/iresult.go

@@ -1,8 +0,0 @@
-package core_spec
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-)
-
-// Result -- возвращаемый результат.
-type Result[T any] = def_spec.Result[T]

+ 4 - 5
v4/lev0/core_spec/isafe_bool.go

@@ -1,20 +1,19 @@
 package core_spec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 // ISafeBool -- интерфейс к потокобезопасной переменной.
 type ISafeBool interface {
 	// Get -- возвращает хранимое значение потокобезопасной переменной
-	Get() def_spec_base.Bool
+	Get() defs.Bool
 	// Set -- взводит хранимое потокобезопасное значение
 	Set()
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// FromStr -- устанавливает значение из строки
-	FromStr(def_spec.ITxtFix) IOption[def_spec.IErr]
+	FromStr(*defs.LTxt) *defs.Option[*defs.LErr]
 	// Getenv -- получает значение из окружения
-	Getenv(def_spec.ITxtFix) IOption[def_spec.IErr]
+	Getenv(*defs.LTxt) *defs.Option[*defs.LErr]
 }

+ 3 - 3
v4/lev0/core_spec/isafe_bool_react.go

@@ -1,14 +1,14 @@
 package core_spec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 // ISafeBoolReact -- реактивный потокобезопасный булевый признак.
 type ISafeBoolReact interface {
 	ISafeBool
 	// Add -- добавляет функцию обратного вызова
-	Add(key *def_spec.LTxt, fn func(def_spec.MBool)) *Result[bool]
+	Add(key *defs.LTxt, fn func(*defs.MBool)) *defs.Result[bool]
 	// Delete -- удаляет функцию обратного вызова по ключу
-	Delete(key *def_spec.LTxt)
+	Delete(key *defs.LTxt)
 }

+ 4 - 4
v4/lev0/core_spec/isafe_string.go

@@ -1,19 +1,19 @@
 package core_spec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 // ISafeString -- интерфейс к потокобезопасной переменной.
 type ISafeString interface {
 	// Get -- возвращает хранимое значение потокобезопасной переменной
-	Get() def_spec.ITxtFix
+	Get() *defs.LTxt
 	// Set -- устанавливает хранимое потокобезопасное значение
-	Set(def_spec.ITxtFix)
+	Set(*defs.LTxt)
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// Byte -- возвращает байтовое представление строки
 	Byte() []byte
 	// Getenv -- устанавливает строку из переменной окружения
-	Getenv(def_spec.ITxtFix) *Result[def_spec.ITxtFix]
+	Getenv(*defs.LTxt) *defs.Result[*defs.LTxt]
 }

+ 0 - 43
v4/lev0/defs/def_err/def_err.go

@@ -1,43 +0,0 @@
-// package def_err -- базовый тип ошибки
-package def_err
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_txt"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-)
-
-// KErr -- обёрнутая ошибка.
-type KErr struct {
-	def_spec.ITxtFix
-}
-
-// Err -- создать новую обёрнутую ошибку.
-func Err(msg def_spec.ATxt, arg ...any) *KErr {
-	helpers.If(msg == "").Hassert("Err(): msg is empty")
-	_msg := def_spec.Sprintf(msg, arg...)
-	sf := &KErr{
-		ITxtFix: def_txt.Txt(_msg),
-	}
-	_ = def_spec.IErr(sf)
-	return sf
-}
-
-// WrapErr -- возвращает обёрнутую ошибку.
-func WrapErr(err error) def_spec.IErr {
-	_msg := def_txt.TxtFix(err.Error())
-	sf := &KErr{
-		ITxtFix: _msg,
-	}
-	return sf
-}
-
-// IsErr -- возвращает true, если ошибка.
-func (sf *KErr) IsErr() bool {
-	return sf.Get() != ""
-}
-
-// Error -- возвращает хранимую ошибку.
-func (sf *KErr) Error() string {
-	return sf.String()
-}

+ 5 - 5
v4/lev0/defs/def_let_bool/def_let_bool.go

@@ -6,7 +6,7 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 )
 
-// LBool -- неизменяемое булево значение
+// LBool -- неизменяемое булево значение.
 type LBool struct {
 	*def_let.Let[def_spec_base.Bool]
 }
@@ -19,12 +19,12 @@ func LetBool(val def_spec_base.Bool) *LBool {
 	return sf
 }
 
-// IsFalse -- проверяет на false.
-func (sf *LBool) IsFalse() def_spec_base.Bool {
+// IsNot -- проверяет на false.
+func (sf *LBool) IsNot() def_spec_base.Bool {
 	return sf.Get() == false
 }
 
-// IsTrue -- проверяет на true.
-func (sf *LBool) IsTrue() def_spec_base.Bool {
+// IsOk -- проверяет на true.
+func (sf *LBool) IsOk() def_spec_base.Bool {
 	return sf.Get() == true
 }

+ 16 - 6
v4/lev0/defs/def_let_int/def_let_int.go

@@ -3,38 +3,48 @@ package def_let_int
 
 import (
 	"encoding/binary"
+	"fmt"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
 )
 
 // LInt -- внутренне неизменяемое целое.
 type LInt struct {
-	*def_let.Let[def_spec_base.Int]
+	val def_spec_base.Int
 }
 
 // LetInt -- возвращает новое внутреннее неизменяемое целое.
 func LetInt(val def_spec_base.Int) *LInt {
 	sf := &LInt{
-		Let: def_let.NewLet(val),
+		val: val,
 	}
 	return sf
 }
 
 // Get -- возвращает хранимое значение потокобезопасной переменной.
 func (sf *LInt) Get() def_spec_base.Int {
-	return sf.Let.Get()
+	return sf.val
 }
 
 // ToStr -- возвращает как строку.
 func (sf *LInt) ToStr() def_spec_base.ATxt {
-	return def_spec_fn.Sprintf("%v", sf.Let.Get())
+	return def_spec_fn.Sprintf("%v", sf.val)
 }
 
 // ToByte -- возвращает как срез байт.
 func (sf *LInt) ToByte() []byte {
 	buf := make([]byte, 8)
-	binary.BigEndian.PutUint64(buf, uint64(sf.Let.Get()))
+	binary.BigEndian.PutUint64(buf, uint64(sf.val))
 	return buf
+}
+
+// Int -- возвращает число
+func (sf *LInt) Int() int {
+	return int(sf.val)
+}
+
+// String -- возвращает строку
+func (sf *LInt) String() string {
+	return fmt.Sprintf("%v", sf.val)
 }

+ 13 - 9
v4/lev0/defs/def_let_txt/def_let_txt.go

@@ -6,7 +6,6 @@ import (
 	"strconv"
 	"strings"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
@@ -14,14 +13,14 @@ import (
 
 // LTxt -- неизменяемый текст
 type LTxt struct {
-	*def_let.Let[def_spec_base.ATxt]
+	val def_spec_base.ATxt
 }
 
 // LetTxt -- создать новую неизменяемую строку.
 func LetTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *LTxt {
 	_msg := def_spec_fn.Sprintf(msg, arg...)
 	sf := &LTxt{
-		Let: def_let.NewLet(_msg),
+		val: def_spec_base.ATxt(_msg),
 	}
 	return sf
 }
@@ -35,22 +34,27 @@ func (sf *LTxt) TrimSuffix(suffix any) def_spec_base.ATxt {
 
 // Rune -- возвращает внутреннюю строку в виде рун.
 func (sf LTxt) Rune() []rune {
-	return []rune(sf.Get())
+	return []rune(sf.val)
 }
 
 // Byte -- возвращает внутреннюю строку в виде байтов.
 func (sf LTxt) Byte() []byte {
-	return []byte(sf.Get())
+	return []byte(sf.val)
 }
 
 // Len -- возвращает длину строки.
 func (sf LTxt) Len() def_spec_base.Int {
-	return def_spec_base.Int(len(sf.Get()))
+	return def_spec_base.Int(len(sf.val))
+}
+
+// Get -- возвращает хранимое значение
+func (sf LTxt) Get() def_spec_base.ATxt {
+	return sf.val
 }
 
 // String -- возвращает строку по требованию.
 func (sf LTxt) String() string {
-	return string(sf.Get())
+	return string(sf.val)
 }
 
 // Atoi -- возвращает возможное число.
@@ -59,7 +63,7 @@ func (sf LTxt) Atoi() *result.Result[def_spec_base.Int] {
 	if err != nil {
 		err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",
 			sf.String(), err)
-		return result.NewErr[def_spec_base.Int](err)
+		return result.ResErr[def_spec_base.Int](err)
 	}
-	return result.NewOk(def_spec_base.Int(iRes))
+	return result.ResOk(def_spec_base.Int(iRes))
 }

+ 7 - 8
v4/lev0/defs/def_move/def_box.go → v4/lev0/defs/def_move/def_move.go

@@ -4,18 +4,19 @@ package def_move
 import (
 	"reflect"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
 // Move -- параметрический контейнер с семантикой перемещения
 type Move[T any] struct {
-	type_ def_spec.ATxt
+	type_ def_spec_base.ATxt
 	val   *T // Фактическое значение
 }
 
 const (
-	str5 = def_spec.ATxt("NewBox(): val==nil")
+	str5 = def_spec_base.ATxt("NewBox(): val==nil")
 )
 
 // NewMove -- возвращает новый параметрический контейнер с семантикой перемещения
@@ -23,15 +24,13 @@ func NewMove[T any](val T) *Move[T] {
 	v := reflect.ValueOf(val)
 	switch v.Kind() {
 	case reflect.Pointer, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
-		isNil := def_spec.Bool(v.IsNil())
+		isNil := def_spec_base.Bool(v.IsNil())
 		helpers.If(isNil).Hassert(str5)
 	}
 	sf := &Move[T]{
 		val:   &val,
-		type_: def_spec.Sprintf("%T", val),
+		type_: def_spec_fn.Sprintf("%T", val),
 	}
-	_ = def_spec.IFixBox[T](sf)
-	_ = def_spec.IMutBox[T](sf)
 	return sf
 }
 
@@ -40,7 +39,7 @@ func (sf *Move[T]) Set(val T) {
 	v := reflect.ValueOf(val)
 	switch v.Kind() {
 	case reflect.Pointer, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
-		isNil := def_spec.Bool(v.IsNil())
+		isNil := def_spec_base.Bool(v.IsNil())
 		helpers.If(isNil).Hassert(str5)
 	}
 	sf.val = &val

+ 6 - 6
v4/lev0/defs/def_mut_bool/def_mut_bool.go

@@ -6,12 +6,12 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 )
 
-// MBool -- изменяемое булево значение
+// MBool -- изменяемое булево значение.
 type MBool struct {
 	*def_mut.Mut[def_spec_base.Bool]
 }
 
-// MutBool -- возвращает новый изменяемый Bool
+// MutBool -- возвращает новый изменяемый Bool.
 func MutBool(val def_spec_base.Bool) *MBool {
 	sf := &MBool{
 		Mut: def_mut.NewMut(val),
@@ -19,13 +19,13 @@ func MutBool(val def_spec_base.Bool) *MBool {
 	return sf
 }
 
-// IsFalse -- проверяет на false.
-func (sf *MBool) IsFalse() def_spec_base.Bool {
+// IsNot -- проверяет на false.
+func (sf *MBool) IsNot() def_spec_base.Bool {
 	return sf.Get() == false
 }
 
-// IsTrue -- проверяет на true.
-func (sf *MBool) IsTrue() def_spec_base.Bool {
+// IsOk -- проверяет на true.
+func (sf *MBool) IsOk() def_spec_base.Bool {
 	return sf.Get() == true
 }
 

+ 27 - 21
v4/lev0/defs/def_mut_int/def_mut_int.go

@@ -4,10 +4,10 @@ package def_mut_int
 import (
 	"bytes"
 	"encoding/binary"
+	"fmt"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_err"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_txt"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
@@ -15,56 +15,52 @@ import (
 
 // MInt -- внутренне изменяемое целое.
 type MInt struct {
-	*def_mut.Mut[def_spec_base.Int]
+	val def_spec_base.Int
 }
 
 // MutInt -- возвращает новое внутреннее изменяемое целое.
 func MutInt(val def_spec_base.Int) *MInt {
 	sf := &MInt{
-		Mut: def_mut.NewMut(val),
+		val: val,
 	}
 	return sf
 }
 
 // Get -- возвращает хранимое значение потокобезопасной переменной.
 func (sf *MInt) Get() def_spec_base.Int {
-	return sf.Mut.Get()
+	return sf.val
 }
 
 // ToStr -- возвращает как строку.
 func (sf *MInt) ToStr() def_spec_base.ATxt {
-	return def_spec_fn.Sprintf("%v", sf.Mut.Get())
+	return def_spec_fn.Sprintf("%v", sf.val)
 }
 
 // ToByte -- возвращает как срез байт.
 func (sf *MInt) ToByte() []byte {
 	buf := make([]byte, 8)
-	binary.BigEndian.PutUint64(buf, uint64(sf.Mut.Get()))
+	binary.BigEndian.PutUint64(buf, uint64(sf.val))
 	return buf
 }
 
 // Set -- устанавливает хранимое потокобезопасное значение.
 func (sf *MInt) Set(val def_spec_base.Int) {
-	sf.Mut.Set(val)
+	sf.val=val
 }
 
 // Inc -- увеличивает на единицу.
 func (sf *MInt) Inc() {
-	val := sf.Mut.Get()
-	val++
-	sf.Mut.Set(val)
+	sf.val++
 }
 
 // Dec -- уменьшает на единицу.
 func (sf *MInt) Dec() {
-	val := sf.Mut.Get()
-	val--
-	sf.Mut.Set(val)
+	sf.val--
 }
 
 // Reset -- сбрасывает хранимое потокобезопасное значение.
 func (sf *MInt) Reset() {
-	sf.Mut.Set(0)
+	sf.val=0
 }
 
 // FromStr -- устанавливает значение из строки.
@@ -72,10 +68,10 @@ func (sf *MInt) FromStr(val *def_let_txt.LTxt) *result.Result[def_spec_base.Int]
 	res := def_spec_fn.Atoi(val.Get())
 	if res.IsErr() {
 		err := def_let_err.LetErr(res.Err().Error())
-		return result.NewErr[def_spec_base.Int](err)
+		return result.ResErr[def_spec_base.Int](err)
 	}
-	sf.Mut.Set(res.Ok())
-	return result.NewOk(sf.Mut.Get())
+	sf.val=res.Ok()
+	return result.ResOk(sf.val)
 }
 
 // FromByte -- устанавливает значение из байтов (BigEndian, net order).
@@ -84,7 +80,7 @@ func (sf *MInt) FromByte(binData []byte) *result.Result[def_spec_base.Int] {
 	if lenBin < 8 {
 		err := def_let_err.LetErr("MInt.FromByte(): len(%v) bytes shorts",
 			lenBin)
-		return result.NewErr[def_spec_base.Int](err)
+		return result.ResErr[def_spec_base.Int](err)
 	}
 	var signed int64
 	buf := bytes.NewReader(binData)
@@ -92,8 +88,18 @@ func (sf *MInt) FromByte(binData []byte) *result.Result[def_spec_base.Int] {
 	if err != nil {
 		err := def_let_err.LetErr("MInt.FromByte(): in read []byte, err=\n\t%w",
 			err)
-		return result.NewErr[def_spec_base.Int](err)
+		return result.ResErr[def_spec_base.Int](err)
 	}
-	sf.Mut.Set(def_spec_base.Int(signed))
-	return result.NewOk(sf.Mut.Get())
+	sf.val=def_spec_base.Int(signed)
+	return result.ResOk(sf.val)
 }
+
+// Int -- возвращает число
+func (sf *MInt) Int() int {
+	return int(sf.val)
+}
+
+// String -- возвращает строку
+func (sf *MInt) String() string {
+	return fmt.Sprintf("%v", sf.val)
+}

+ 2 - 2
v4/lev0/defs/def_mut_time/def_mut_time.go

@@ -14,7 +14,7 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/tuf"
 )
 
-// MTime -- внутренее изменяемое время
+// MTime -- внутренее изменяемое время.
 //
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
 type MTime struct {
@@ -30,7 +30,7 @@ func MutTime[T def_spec_fn.TxtConstraint](val T) *MTime {
 	return sf
 }
 
-// MutTimeAuto -- возвращает новое автоматическое внутреннее изменяемое время
+// MutTimeAuto -- возвращает новое автоматическое внутреннее изменяемое время.
 //
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
 func MutTimeAuto() *MTime {

+ 28 - 12
v4/lev0/defs/def_mut_txt/def_mut_txt.go

@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"strconv"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_txt"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
@@ -13,14 +13,14 @@ import (
 
 // MTxt -- внутренней изменяемый текст.
 type MTxt struct {
-	*def_mut.Mut[def_spec_base.ATxt]
+	val def_spec_base.ATxt
 }
 
 // MutTxt -- создать новый внутрениий изменяемый текст.
 func MutTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *MTxt {
 	_txt := def_spec_fn.Sprintf(msg, arg...)
 	sf := &MTxt{
-		Mut: def_mut.NewMut(_txt),
+		val: _txt,
 	}
 	return sf
 }
@@ -29,35 +29,35 @@ func MutTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *MTxt {
 func (sf *MTxt) Concat(msg any, arg ...any) def_spec_base.ATxt {
 	val := def_spec_fn.Sprintf("%v", msg)
 	val = def_spec_fn.Sprintf(val, arg...)
-	sf.Mut.Set(sf.Mut.Get() + val)
-	return sf.Mut.Get()
+	sf.val += val
+	return sf.val
 }
 
 // TrimSuffix -- обрезает суффикс неизменяемого текста.
 func (sf *MTxt) TrimSuffix(suffix any) def_spec_base.ATxt {
 	suf := fmt.Sprintf("%v", suffix)
-	txt := def_spec_fn.TrimSuffix(sf.Mut.Get(), suf)
+	txt := def_spec_fn.TrimSuffix(sf.val, suf)
 	return def_spec_base.ATxt(txt)
 }
 
 // Rune -- возвращает изменяемый внутренний текст в виде рун.
 func (sf MTxt) Rune() []rune {
-	return []rune(sf.Mut.Get())
+	return []rune(sf.val)
 }
 
 // Byte -- возвращает изменяемый внутренний текст в виде байтов.
 func (sf MTxt) Byte() []byte {
-	return []byte(sf.Mut.Get())
+	return []byte(sf.val)
 }
 
 // Len -- возвращает длину строки.
 func (sf MTxt) Len() def_spec_base.Int {
-	return def_spec_base.Int(len(sf.Mut.Get()))
+	return def_spec_base.Int(len(sf.val))
 }
 
 // String -- возвращает строку по требованию.
 func (sf MTxt) String() string {
-	return string(sf.Mut.Get())
+	return string(sf.val)
 }
 
 // Atoi -- возвращает возможное число.
@@ -66,7 +66,23 @@ func (sf MTxt) Atoi() *result.Result[def_spec_base.Int] {
 	if err != nil {
 		err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",
 			sf.String(), err)
-		return result.NewErr[def_spec_base.Int](err)
+		return result.ResErr[def_spec_base.Int](err)
 	}
-	return result.NewOk(def_spec_base.Int(iRes))
+	return result.ResOk(def_spec_base.Int(iRes))
+}
+
+// Set -- изменение внутренней строки.
+func (sf *MTxt) Set(msg def_spec_base.ATxt) {
+	sf.val = msg
+}
+
+// Get -- возвращает хранимое значение
+func (sf MTxt) Get() def_spec_base.ATxt {
+	return sf.val
+}
+
+// Let -- возвращает неизменяемую копию себя
+func (sf *MTxt) Let() *def_let_txt.LTxt {
+	val := sf.val
+	return def_let_txt.LetTxt(val)
 }

+ 0 - 47
v4/lev0/defs/def_num/def_num.go

@@ -1,47 +0,0 @@
-// package def_num -- базовый тип числа
-package def_num
-
-import (
-	"fmt"
-
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_err"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
-)
-
-// Num -- внутренне представление числа
-type Num struct {
-	val def_spec.AInt
-}
-
-// NewNum -- возвращает целое число по требованию.
-func NewNum(val def_spec.AInt) *Num {
-	sf := &Num{
-		val: val,
-	}
-	return sf
-}
-
-// Get -- возвращает внутреннее число
-func (sf *Num) Get() def_spec.AInt {
-	return sf.val
-}
-
-// Int -- возвращает число
-func (sf *Num) Int() int {
-	return int(sf.val)
-}
-
-// Byte -- возвращает число как byte
-func (sf *Num) Byte() *def_spec.Result[byte] {
-	if -128 <= sf.val && sf.val <= 127 {
-		return result.NewOk(byte(sf.val))
-	}
-	err := def_err.Err("Num.Byte(). val(%v) not in -128..127", sf.val)
-	return result.NewErr[byte](err)
-}
-
-// String -- возвращает строку
-func (sf *Num) String() string {
-	return fmt.Sprintf("%v", sf.Get())
-}

+ 0 - 14
v4/lev0/defs/def_spec/def_box.go

@@ -1,14 +0,0 @@
-package def_spec
-
-// IFixBox -- фиксированный контейнер
-type IFixBox[T any] interface {
-	// Move -- перемещает другому владельцу значение
-	Move() T
-}
-
-// IMutBox -- изменяемый контейнер
-type IMutBox[T any] interface {
-	IFixBox[T]
-	// Set -- устанавливает хранимое значение
-	Set(T)
-}

+ 0 - 9
v4/lev0/defs/def_spec/def_err.go

@@ -1,9 +0,0 @@
-package def_spec
-
-// IErr -- алиас для error.
-type IErr interface {
-	error
-	ITxtFix
-	// IsErr -- возвращает true, если ошибка.
-	IsErr() bool
-}

+ 0 - 22
v4/lev0/defs/def_spec/def_num.go

@@ -1,22 +0,0 @@
-package def_spec
-
-// AInt -- внутренне представление числа
-type AInt int
-
-// INum -- интерфейс к числу.
-type INum interface {
-	IString
-	// Get -- возвращает внутренее число
-	Get() AInt
-	// Int -- возвращает внутреннее число как int
-	Int() int
-	// Byte -- возвращает внутреннее число как byte
-	Byte() *Result[byte]
-}
-
-// INumMut -- интерфейс к изменяемому внутреннему числу
-type INumMut interface {
-	INum
-	// Set -- устанавливает внутренее число
-	Set(AInt)
-}

+ 0 - 19
v4/lev0/defs/def_spec/def_option.go

@@ -1,19 +0,0 @@
-package def_spec
-
-// IOption -- интерфейс опции.
-type IOption[T any] interface {
-	// IsSome - проверяет, есть ли значение.
-	IsSome() bool
-	// IsNone - проверяет, есть ли значение.
-	IsNone() bool
-	// Some - извлекает значение (паника, если None).
-	Some() T
-	// SomeOr - возвращает значение или дефолтное.
-	SomeOr(defaultValue T) T
-	// SomeOrFn -- возвращает значение, если оно есть, или результат выполнения функции.
-	SomeOrFn(fn func() T) T
-	// Hassert -- проверяет, что не пустое значение (с паникой).
-	Hassert(msgFormat ATxt, args ...any) T
-	// Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-	Assert(msgFormat ATxt, args ...any) T
-}

+ 0 - 108
v4/lev0/defs/def_spec/def_spec.go

@@ -1,108 +0,0 @@
-// package def_spec -- внутренние спецификации типы
-package def_spec
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_bool"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_int"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_time"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_txt"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut_bool"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut_time"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut_txt"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
-)
-
-// ATxt -- алиас для внутренней строки.
-type ATxt = def_spec_base.ATxt
-
-// Int -- алиас для int.
-type Int = def_spec_base.Int
-
-// LInt -- внутренне неизменяемое целое.
-type LInt=def_let_int.LInt
-
-// Bool -- внутренее представление логического значения.
-type Bool = def_spec_base.Bool
-
-// LBool -- неизменяемое булево значение
-type LBool = def_let_bool.LBool
-
-// LetBool -- возвращает новый неизменяемый Bool
-func LetBool(val def_spec_base.Bool) *LBool {
-	return def_let_bool.LetBool(val)
-}
-
-// MBool -- изменяемое булево значение
-type MBool = def_mut_bool.MBool
-
-// MutBool -- возвращает новый изменяемый Bool
-func MutBool(val def_spec_base.Bool) *MBool {
-	return def_mut_bool.MutBool(val)
-}
-
-// IString -- интерфейс к стандартной строке.
-type IString = def_spec_fn.IString
-
-// TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt).
-type TxtConstraint = def_spec_fn.TxtConstraint
-
-// LTxt -- внутренний неизменяемый текст.
-type LTxt = def_let_txt.LTxt
-
-// LetTxt -- создать новую неизменяемую строку.
-func LetTxt[T TxtConstraint](msg T, arg ...any) *LTxt {
-	return def_let_txt.LetTxt(msg, arg...)
-}
-
-// MTxt -- внутренний изменяемый текст.
-type MTxt = def_mut_txt.MTxt
-
-// MutTxt -- создать новый внутрениий изменяемый текст.
-func MutTxt[T TxtConstraint](msg T, arg ...any) *MTxt {
-	return def_mut_txt.MutTxt(msg, arg...)
-}
-
-// Result — обёртка вокруг результата с возможной ошибкой.
-//
-// Может быть либо только полезное значение, либо только ошибка.
-type Result[T any] = result.Result[T]
-
-// NewOk -- возвращает успешный Result с значением.
-func NewOk[T any](value T) *Result[T] {
-	return result.NewOk(value)
-}
-
-// NewErr -- возвращает Result с ошибкой.
-func NewErr[T any](err error) *Result[T] {
-	return result.NewErr[T](err)
-}
-
-// Sprintf -- форматирует базовуб строку
-func Sprintf[T def_spec_fn.TxtConstraint](format T, args ...any) ATxt {
-	return def_spec_fn.Sprintf(format, args...)
-}
-
-// Time -- внутренее представление времени.
-type Time = def_spec_base.Time
-
-// LTime -- внутренее неизменяемое время.
-//
-// Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type LTime = def_let_time.LTime
-
-// LetTime -- возвращает новое внутреннее неизменяемое время.
-func LetTime[T TxtConstraint](val T) *LTime {
-	return def_let_time.LetTime(val)
-}
-
-// MTime -- внутренее изменяемое время.
-//
-// Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type MTime = def_mut_time.MTime
-
-// MutTime -- возвращает новое внутреннее изменяемое время
-func MutTime[T TxtConstraint](val T) *MTime {
-	return def_mut_time.MutTime(val)
-}

+ 0 - 27
v4/lev0/defs/def_spec/def_txt.go

@@ -1,27 +0,0 @@
-package def_spec
-
-// ITxtFix -- интерфейс к фиксированной внутренней строке.
-type ITxtFix interface {
-	IString
-	// Get -- возвращает внутреннюю строку
-	Get() ATxt
-	// Len -- возвращает длину внутренней строки
-	Len() Int
-	// Byte -- возвращает внутреннюю строку в виде байтов.
-	Byte() []byte
-	// Rune -- возвращает внутреннюю строку в виде рун.
-	Rune() []rune
-	// TrimSuffix -- обрезает суффикс строки
-	TrimSuffix(any) ITxtFix
-	// Concat -- объединяет строки
-	Concat(msg any, arg ...any) ITxtFix
-	// Atoi -- пытается конвертировать в число
-	Atoi() *Result[Int]
-}
-
-// ITxtMut -- интерфейс к изменяемой внутренней строке.
-type ITxtMut interface {
-	ITxtFix
-	// Set -- устанавливает внутреннюю строку
-	Set(ATxt)
-}

+ 8 - 0
v4/lev0/defs/def_spec_base/def_spec_base.go

@@ -12,3 +12,11 @@ type Bool bool
 
 // Time -- внутренее представление времени.
 type Time ATxt
+
+// IString -- интерфейс строкового представления
+type IString[T any] interface {
+	// Get -- получить исходное значение
+	Get() T
+	// String -- возвращает строковое представление
+	String() string
+}

+ 3 - 3
v4/lev0/defs/def_spec_fn/def_spec_fn.go

@@ -31,7 +31,7 @@ type TxtConstraint interface {
 }
 
 // Sprintf -- форматирует строку с помощью fmt.Sprintf.
-func Sprintf[T TxtConstraint](txt T, args ...interface{}) ATxt {
+func Sprintf[T TxtConstraint](txt T, args ...any) ATxt {
 	return ATxt(fmt.Sprintf(string(txt), args...))
 }
 
@@ -48,7 +48,7 @@ func Atoi[T TxtConstraint](txt T) *result.Result[Int] {
 	if err != nil {
 		err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",
 			txt, err)
-		return result.NewErr[Int](err)
+		return result.ResErr[Int](err)
 	}
-	return result.NewOk(Int(iRes))
+	return result.ResOk(Int(iRes))
 }

+ 3 - 3
v4/lev0/defs/def_spec/def_tuf.go → v4/lev0/defs/def_tuf.go

@@ -1,8 +1,8 @@
-package def_spec
+package defs
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
-		"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
 )
 
 // ITuf -- интерфейс сериализатора.
@@ -10,5 +10,5 @@ type ITuf interface {
 	// ToTuf -- сериализация
 	ToTuf() def_spec_base.ATxt
 	// FromTuf -- десериализация
-	FromTuf(data def_spec_base.ATxt) *option.Option[IErr]
+	FromTuf(data def_spec_base.ATxt) *option.Option[error]
 }

+ 0 - 95
v4/lev0/defs/def_txt/def_txt.go

@@ -1,95 +0,0 @@
-// package def_txt -- базовый тип текста
-package def_txt
-
-import (
-	"fmt"
-	"strconv"
-	"strings"
-
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-)
-
-// KTxt -- алиас для внутренней строки.
-type KTxt struct {
-	val def_spec.ATxt
-}
-
-// Txt -- создать новую строку.
-func Txt[T def_spec.TxtConstraint](msg T, arg ...any) *KTxt {
-	_msg := def_spec.Sprintf(msg, arg...)
-	sf := &KTxt{
-		val: _msg,
-	}
-	return sf
-}
-
-// TxtFix -- создать новую строку.
-func TxtFix[T def_spec.TxtConstraint](msg T, arg ...any) def_spec.ITxtFix {
-	sf := Txt(msg, arg...)
-	return sf
-}
-
-// TxtMut -- создать новую мутабельную строку.
-func TxtMut[T def_spec.TxtConstraint](msg T, arg ...any) def_spec.ITxtMut {
-	_msg := def_spec.Sprintf(msg, arg...)
-	sf := &KTxt{
-		val: _msg,
-	}
-	return sf
-}
-
-// Get -- возвращает внутреннюю строку.
-func (sf KTxt) Get() def_spec.ATxt {
-	return sf.val
-}
-
-// Concat -- создать новую строку.
-func (sf *KTxt) Concat(msg any, arg ...any) def_spec.ITxtFix {
-	val := def_spec.Sprintf("%v", msg)
-	val = def_spec.Sprintf(val, arg...)
-	sf.val += val
-	return sf
-}
-
-// TrimSuffix -- обрезает суффикс строки.
-func (sf *KTxt) TrimSuffix(suffix any) def_spec.ITxtFix {
-	suf := fmt.Sprintf("%v", suffix)
-	txt := strings.TrimSuffix(string(sf.val), suf)
-	return Txt(txt)
-}
-
-// Set -- изменение внутренней строки.
-func (sf *KTxt) Set(msg def_spec.ATxt) {
-	sf.val = msg
-}
-
-// Rune -- возвращает внутреннюю строку в виде рун.
-func (sf KTxt) Rune() []rune {
-	return []rune(sf.val)
-}
-
-// Byte -- возвращает внутреннюю строку в виде байтов.
-func (sf KTxt) Byte() []byte {
-	return []byte(sf.val)
-}
-
-// Len -- возвращает длину строки.
-func (sf KTxt) Len() def_spec.Int {
-	return def_spec.Int(len(sf.val))
-}
-
-// String -- возвращает строку по требованию.
-func (sf KTxt) String() string {
-	return string(sf.val)
-}
-
-// Atoi -- возвращает возможное число.
-func (sf KTxt) Atoi() *def_spec.Result[def_spec.Int] {
-	iRes, err := strconv.Atoi(sf.String())
-	if err != nil {
-		err := fmt.Errorf("KTxt.Atot(): val(%q) not Int, err=\n\t%w",
-			sf.val, err)
-		return def_spec.NewErr[def_spec.Int](err)
-	}
-	return def_spec.NewOk(def_spec.Int(iRes))
-}

+ 72 - 20
v4/lev0/defs/defs.go

@@ -2,44 +2,70 @@
 package defs
 
 import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_err"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_int"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_time"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_txt"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut_bool"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut_time"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut_txt"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
 // Bool -- внутренне представление логического значения.
-type Bool = def_spec.Bool
+type Bool = def_spec_base.Bool
+
+// LBool -- неизменяемое булево значение.
+type LBool = def_let_bool.LBool
+
+// LetBool -- возвращает новое внутреннее логическое значение.
+func LetBool(val Bool) *LBool {
+	return def_let_bool.LetBool(val)
+}
+
+// MBool -- изменяемое булево значение.
+type MBool = def_mut_bool.MBool
+
+// MutBool -- возвращает новый изменяемый Bool.
+func MutBool(val Bool) *MBool {
+	return def_mut_bool.MutBool(val)
+}
 
 // Int -- внутренне представление числа.
-type Int = def_spec.Int
+type Int = def_spec_base.Int
 
 // LInt -- внутренне неизменяемое целое.
-type LInt=def_spec.LInt
+type LInt = def_let_int.LInt
 
-// IString -- внутренне представление строки.
-type IString = def_spec.IString
+// LetInt -- возвращает новое внутреннее неизменяемое целое.
+func LetInt(val Int) *LInt {
+	return def_let_int.LetInt(val)
+}
 
 // ATxt -- внутренее представление текста.
-type ATxt = def_spec.ATxt
+type ATxt = def_spec_base.ATxt
 
 // TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt).
-type TxtConstraint = def_spec.TxtConstraint
+type TxtConstraint = def_spec_fn.TxtConstraint
 
 // LTxt -- внутренний неизменяемый текст.
-type LTxt = def_spec.LTxt
+type LTxt = def_let_txt.LTxt
 
 // LetTxt -- создать новую неизменяемую строку.
 func LetTxt[T TxtConstraint](msg T, arg ...any) *LTxt {
-	return def_spec.LetTxt(msg, arg...)
+	return def_let_txt.LetTxt(msg, arg...)
 }
 
 // MTxt -- внутренний изменяемый текст.
-type MTxt = def_spec.MTxt
+type MTxt = def_mut_txt.MTxt
 
+// MutTxt -- создать новый внутрениий изменяемый текст.
 func MutTxt[T TxtConstraint](msg T, arg ...any) *MTxt {
-	return def_spec.MutTxt(msg, arg...)
+	return def_mut_txt.MutTxt(msg, arg...)
 }
 
 // LErr -- внутренняя неизменяемая ошибка.
@@ -53,12 +79,24 @@ func LetErr[T TxtConstraint](msg T, arg ...any) *LErr {
 // BucketName -- имя сущности.
 type BucketName *LTxt
 
-// ITuf -- интерфейс к сериализатору TUF.
-type ITuf = def_spec.ITuf
-
 // Result -- результат выполнения.
 type Result[T any] = result.Result[T]
 
+// ResOk -- возвращает успешный Result с значением.
+func ResOk[T any](val T) *Result[T] {
+	return result.ResOk(val)
+}
+
+// ResErr -- возвращает Result с ошибкой.
+func ResErr[T any](err error) *Result[T] {
+	return result.ResErr[T](err)
+}
+
+// WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
+func WrapErr[T any](res *Result[T], err error) *Result[T] {
+	return result.WrapErr(res, err)
+}
+
 // Option -- опциональный результат.
 type Option[T any] = option.Option[T]
 
@@ -73,17 +111,31 @@ func NewNone[T any]() *Option[T] {
 }
 
 // Time -- внутренее представление времени.
-type Time = def_spec.Time
-
+type Time = def_spec_base.Time
 
 // LTime -- внутренее неизменяемое время.
 //
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type LTime=def_let_time.LTime
+type LTime = def_let_time.LTime
 
 // LetTimeAuto -- возвращает новое автоматическое внутреннее неизменяемое время.
 //
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
-func LetTimeAuto()*LTime{
+func LetTimeAuto() *LTime {
 	return def_let_time.LetTimeAuto()
-}
+}
+
+// MTime -- внутренее изменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+type MTime = def_mut_time.MTime
+
+// MutTimeAuto -- возвращает новое автоматическое внутреннее изменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+func MutTimeAuto() *MTime {
+	return def_mut_time.MutTimeAuto()
+}
+
+// IString -- интерфейс представления строки
+type IString[T any] = def_spec_base.IString[T]

+ 0 - 103
v4/lev0/etypes/estr/estr.go

@@ -1,103 +0,0 @@
-// package estr -- расширенная строка
-package estr
-
-import (
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	mHp "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-)
-
-// EStr -- расширенная строка.
-type EStr struct {
-	val    *defs.LTxt // Хранимое значение
-	lenMin defs.Int     // Минимальная длина строки
-	lenMax defs.Int     // Максимальная длина строки
-	isMut  defs.Bool    // Признак мутабельности
-}
-
-// FnOptStr -- опции расширенной строки.
-type FnOptStr func(*EStr)
-
-const msg1 = "EStr.OptStrMinLen: мин длина строки должна быть >= 0"
-
-// OptStrMinLen -- устанавливает минимальную длину строки.
-func OptStrMinLen(lenMin defs.Int) FnOptStr {
-	mHp.If(lenMin < 0).Hassert(msg1)
-	return func(sf *EStr) {
-		sf.lenMin = lenMin
-	}
-}
-
-const msg2 = "EStr.OptStrMaxLen: макс длина строки должна быть >= 0"
-
-// OptStrMaxLen -- устанавливает максимальную длину строки.
-func OptStrMaxLen(lenMax defs.Int) FnOptStr {
-	return func(sf *EStr) {
-		mHp.If(lenMax < sf.lenMin).Hassert(msg2)
-		sf.lenMax = lenMax
-	}
-}
-
-// OptStr -- устанавливает начальное значение строки.
-func OptStr(val *defs.LTxt) FnOptStr {
-	return func(sf *EStr) {
-		sf.val = val
-	}
-}
-
-// OptStrMut -- устанавливает признак мутабельности.
-func OptStrMut() FnOptStr {
-	return func(sf *EStr) {
-		sf.isMut = true
-	}
-}
-
-// NewStr -- возвращает новую расширенную строку.
-func NewStr(opt ...FnOptStr) mKs.EStr {
-	sf := &EStr{
-		lenMin: 0,
-		lenMax: 2_000_000_000,
-	}
-	for _, opt := range opt {
-		opt(sf)
-	}
-	sf.SelfCheck()
-	return sf
-}
-
-// NewStrMut -- возвращает новую мутабельную расширенную строку.
-func NewStrMut(opt ...FnOptStr) mKs.EStrMut {
-	sf := &EStr{
-		lenMin: 0,
-		lenMax: 2_000_000_000,
-	}
-	for _, opt := range opt {
-		opt(sf)
-	}
-	sf.SelfCheck()
-	sf.isMut = true
-	return sf
-}
-
-// Set -- устанавливает значение расширенной строки.
-func (sf *EStr) Set(val *defs.LTxt) {
-	mHp.If(!sf.isMut).
-		Hassert("EStrMut.Set(): нельзя изменить значение расширенной строки, если она не мутабельна, val=%q",
-			val.Get())
-	sf.val = val
-	sf.SelfCheck()
-}
-
-// SelfCheck -- самопроверка расширенной строки.
-func (sf *EStr) SelfCheck() {
-	mHp.If(sf.val.Len() < sf.lenMin).
-		Hassert("EStr.SelfCheck(): строка не может быть короче %v", sf.lenMin)
-	mHp.If(sf.val.Len() > sf.lenMax).
-		Hassert("EStr.SelfCheck(): строка не может быть длиннее %v",
-			sf.lenMax)
-}
-
-// Get -- возвращает хранимое значение расширенной строки.
-func (sf *EStr) Get() *defs.LTxt {
-	return sf.val
-}

+ 0 - 47
v4/lev0/etypes/etypes.go

@@ -1,47 +0,0 @@
-// package etypes -- расширенные типы
-package etypes
-
-import (
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/estr"
-)
-
-// EStr - расширенная строка.
-type EStr = mKs.EStr
-
-// EStrMut - расширенная строка с признаком мутабельности.
-type EStrMut = mKs.EStrMut
-
-// FnOptStr -- опция для установки параметров расширенной строки.
-type FnOptStr = estr.FnOptStr
-
-// OptStrMinLen -- устанавливает минимальную длину строки.
-func OptStrMinLen(lenMin defs.Int) FnOptStr {
-	return estr.OptStrMinLen(lenMin)
-}
-
-// OptStrMaxLen -- устанавливает максимальную длину строки.
-func OptStrMaxLen(lenMax defs.Int) FnOptStr {
-	return estr.OptStrMaxLen(lenMax)
-}
-
-// OptStr -- устанавливает начальное значение строки.
-func OptStr(val *defs.LTxt) FnOptStr {
-	return estr.OptStr(val)
-}
-
-// OptStrMut -- устанавливает признак мутабельности.
-func OptStrMut() FnOptStr {
-	return estr.OptStrMut()
-}
-
-// StrNew -- возвращает новую расширенную строку.
-func StrNew(opt ...FnOptStr) EStr {
-	return estr.NewStr(opt...)
-}
-
-// StrMutNew -- возвращает новую расширенную строку с признаком мутабельности.
-func StrMutNew(opt ...FnOptStr) EStrMut {
-	return estr.NewStrMut(opt...)
-}

+ 7 - 6
v4/lev0/helpers/helpers.go

@@ -19,12 +19,13 @@ var (
 )
 
 
-type AssertAction struct {
-	isCond def_spec_base.Bool
+// AssertAction -- хранит состояние для проверки.
+type AssertAction[T ~bool] struct {
+	isCond T
 }
 
 // Hassert -- проверка на правильность утверждения с безусловным падением в панику даже на проде (hard assert).
-func (sf *AssertAction) Hassert(msgFormat def_spec_base.ATxt, args ...any) {
+func (sf *AssertAction[T]) Hassert(msgFormat def_spec_base.ATxt, args ...any) {
 	if !sf.isCond {
 		return
 	}
@@ -33,7 +34,7 @@ func (sf *AssertAction) Hassert(msgFormat def_spec_base.ATxt, args ...any) {
 }
 
 // Assert -- проверка на правильность утверждения с падением в панику кроме прода (soft assert).
-func (sf *AssertAction) Assert(msgFormat def_spec_base.ATxt, args ...any) {
+func (sf *AssertAction[T]) Assert(msgFormat def_spec_base.ATxt, args ...any) {
 	if !sf.isCond {
 		return
 	}
@@ -45,8 +46,8 @@ func (sf *AssertAction) Assert(msgFormat def_spec_base.ATxt, args ...any) {
 }
 
 // If -- условие для проверки.
-func If(isCond def_spec_base.Bool) *AssertAction {
-	sf := &AssertAction{
+func If[T ~bool](isCond T) *AssertAction[T] {
+	sf := &AssertAction[T]{
 		isCond: isCond,
 	}
 	return sf

+ 75 - 9
v4/lev0/lev0.go

@@ -2,9 +2,9 @@
 package lev0
 
 import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
 // ATxt -- внутренее представление текста.
@@ -13,6 +13,22 @@ type ATxt = defs.ATxt
 // Bool -- внутренее представление логического значения.
 type Bool = defs.Bool
 
+// LBool -- неизменяемое булево значение.
+type LBool = defs.LBool
+
+// LetBool -- возвращает новое внутреннее логическое значение.
+func LetBool(val Bool) *LBool {
+	return defs.LetBool(val)
+}
+
+// MBool -- изменяемое булево значение.
+type MBool = defs.MBool
+
+// MutBool -- возвращает новый изменяемый Bool.
+func MutBool(val Bool) *MBool {
+	return defs.MutBool(val)
+}
+
 // Time -- внутреннее время.
 type Time = defs.Time
 
@@ -28,12 +44,26 @@ func LetTimeAuto() *LTime {
 	return defs.LetTimeAuto()
 }
 
+// MTime -- внутренее изменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+type MTime = defs.MTime
+
+func MutTimeAuto() *MTime {
+	return defs.MutTimeAuto()
+}
+
 // Int -- внутренне представление числа.
 type Int = defs.Int
 
 // LInt -- внутренне неизменяемое целое.
 type LInt = defs.LInt
 
+// LetInt -- возвращает новое внутреннее неизменяемое целое.
+func LetInt(val Int) *LInt {
+	return defs.LetInt(val)
+}
+
 // TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt).
 type TxtConstraint = defs.TxtConstraint
 
@@ -45,22 +75,30 @@ func LetTxt[T TxtConstraint](msgFormat T, arg ...any) *LTxt {
 	return defs.LetTxt(msgFormat, arg...)
 }
 
+// MTxt -- внутренний изменяемый текст.
+type MTxt = defs.MTxt
+
+// MutTxt -- создать новую изменяемую строку.
+func MutTxt[T TxtConstraint](msgFormat T, arg ...any) *MTxt {
+	return defs.MutTxt(msgFormat, arg...)
+}
+
 // Result — обёртка вокруг результата с возможной ошибкой.
-type Result[T any] = result.Result[T]
+type Result[T any] = defs.Result[T]
 
-// NewOk -- возвращает успешный Result с значением.
-func NewOk[T any](res T) *Result[T] {
-	return result.NewOk(res)
+// ResOk -- возвращает успешный Result с значением.
+func ResOk[T any](res T) *Result[T] {
+	return defs.ResOk(res)
 }
 
-// NewErr -- возвращает Result с ошибкой.
-func NewErr[T any](err error) *Result[T] {
-	return result.NewErr[T](err)
+// ResErr -- возвращает Result с ошибкой.
+func ResErr[T any](err error) *Result[T] {
+	return defs.ResErr[T](err)
 }
 
 // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
 func WrapErr[T any](res *Result[T], err error) *Result[T] {
-	return result.WrapErr(res, err)
+	return defs.WrapErr(res, err)
 }
 
 // Option — обёртка вокруг результата с возможной пустотой.
@@ -76,7 +114,35 @@ func NewNone[T any]() *Option[T] {
 	return defs.NewNone[T]()
 }
 
+// AssertAction -- хранит состояние для проверки.
+type AssertAction[T ~bool] = helpers.AssertAction[T]
+
+// If -- условие для проверки.
+func If[T ](isOk defs.Bool) *AssertAction {
+	return helpers.If(isOk)
+}
+
 // SleepMs -- задержка в миллисекундах.
 func SleepMs() {
 	helpers.SleepMs()
 }
+
+// LErr -- внутренняя неизменяемая ошибка.
+type LErr = defs.LErr
+
+// LetErr -- создать новую обёрнутую ошибку.
+func LetErr[T TxtConstraint](msg T, arg ...any) *LErr {
+	return defs.LetErr(msg, arg...)
+}
+
+// ISafeBool -- интерфейс к потокобезопасной переменной.
+type ISafeBool = core_spec.ISafeBool
+
+// IChan -- умный канал.
+type IChan[T any] = core_spec.IChan[T]
+
+// ISafeBoolReact -- реактивный потокобезопасный булевый признак.
+type ISafeBoolReact = core_spec.ISafeBoolReact
+
+// IString -- строковый интерфейс.
+type IString[T any] = defs.IString[T]

+ 5 - 5
v4/lev0/result/result.go

@@ -21,8 +21,8 @@ const (
 	str5 = def_spec_base.ATxt("NewOk(): result==nil")
 )
 
-// NewOk -- возвращает успешный Result с значением.
-func NewOk[T any](result T) *Result[T] {
+// ResOk -- возвращает успешный Result с значением.
+func ResOk[T any](result T) *Result[T] {
 	helpers.If(helpers.IsNil(result)).Hassert(str5)
 	sf := &Result[T]{
 		val: result,
@@ -35,8 +35,8 @@ var (
 	str6 = def_spec_base.ATxt("NewErr(): err==nil")
 )
 
-// NewErr -- возвращает Result с ошибкой.
-func NewErr[T any](err error) *Result[T] {
+// ResErr -- возвращает Result с ошибкой.
+func ResErr[T any](err error) *Result[T] {
 	helpers.If(err == nil).Hassert(str6)
 	sf := &Result[T]{
 		err: err,
@@ -56,7 +56,7 @@ func WrapErr[T any](res *Result[T], err error) *Result[T] {
 	helpers.If(err == nil).Hassert(str8)
 	err0 := res.Err() // Чтобы не было паники при финализации и обернуть ошибку
 	err = fmt.Errorf("%v, err=\n\t%w", err0, err)
-	sf := NewErr[T](err)
+	sf := ResErr[T](err)
 	return sf
 }
 

+ 9 - 9
v4/lev0/result/result_test.go

@@ -34,7 +34,7 @@ func (sf *tester) notCheck() {
 			sf.t.Fatalf("notCheck(): panic==nil")
 		}
 	}()
-	res := NewOk(str1)
+	res := ResOk(str1)
 	{
 		val := res.Ok()
 		if val != str1 {
@@ -65,7 +65,7 @@ func (sf *tester) createErrGood1() {
 		}
 	}()
 	err := fmt.Errorf("test err")
-	res := NewErr[error](err)
+	res := ResErr[error](err)
 	if res.IsOk() {
 		sf.t.Fatalf("createErrGood1(): is ok")
 	}
@@ -92,7 +92,7 @@ func (sf *tester) createErrGood1() {
 		_ = res0.Error()
 	}
 	{
-		res := NewOk("test_ok")
+		res := ResOk("test_ok")
 		if val := res.OkOr("test_ok1"); val != "test_ok" {
 			sf.t.Fatalf("createErrGood1(): val(%v) != 'test_ok'", val)
 		}
@@ -110,7 +110,7 @@ var (
 func (sf *tester) assert2() {
 	sf.t.Log("assert2")
 	err := fmt.Errorf("test_error")
-	res := NewErr[error](err)
+	res := ResErr[error](err)
 	defer func() {
 		if _panic := recover(); _panic == nil {
 			sf.t.Fatalf("assert2(): panic==nil")
@@ -166,7 +166,7 @@ func (sf *tester) createErrBad1() {
 		}
 	}()
 	var err error
-	_ = NewErr[error](err)
+	_ = ResErr[error](err)
 }
 
 var (
@@ -180,7 +180,7 @@ func (sf *tester) createOkGood2() {
 			sf.t.Fatalf("createOkGood2(): panic=%v", _panic)
 		}
 	}()
-	res := NewOk(str)
+	res := ResOk(str)
 	if !res.IsOk() {
 		sf.t.Fatalf("createOkGood1(): not ok")
 	}
@@ -200,7 +200,7 @@ func (sf *tester) createOkGood2() {
 	if val := res.OkOrFn(sf.fnWrap); val != str {
 		sf.t.Fatalf("createOkGood1(): val bad")
 	}
-	res0 := NewErr[any](fmt.Errorf("test_error"))
+	res0 := ResErr[any](fmt.Errorf("test_error"))
 	if err := res0.Err(); err == nil {
 		sf.t.Fatalf("createOkGood1(): err==nil")
 	}
@@ -227,7 +227,7 @@ func (sf *tester) createOkGood1() {
 		}
 	}()
 	str := "test val"
-	_ = NewOk(&str)
+	_ = ResOk(&str)
 }
 
 // Нет результата.
@@ -239,5 +239,5 @@ func (sf *tester) createOkBad1() {
 		}
 	}()
 	var str *def_let.Let[def_spec_base.ATxt]
-	_ = NewOk(str)
+	_ = ResOk(str)
 }

+ 4 - 4
v4/lev0/tuf/tuf.go

@@ -38,19 +38,19 @@ func RecFromTuf(type_, val def_spec_base.ATxt) *result.Result[def_spec_base.ATxt
 	keyCheck(type_)
 	lstField := strings.Split(string(val), ";")
 	if len(lstField) != 3 {
-		return result.NewErr[def_spec_base.ATxt](
+		return result.ResErr[def_spec_base.ATxt](
 			def_let_err.LetErr("tuf.RecFromTuf(): valTuf len(%v)!=3", len(lstField)))
 	}
 	if lstField[0] != "Rec" {
-		return result.NewErr[def_spec_base.ATxt](
+		return result.ResErr[def_spec_base.ATxt](
 			def_let_err.LetErr("tuf.RecFromTuf(): valTuf(%v) not record", lstField[0]))
 	}
 	if lstField[1] != string(type_) {
-		return result.NewErr[def_spec_base.ATxt](
+		return result.ResErr[def_spec_base.ATxt](
 			def_let_err.LetErr("tuf.RecFromTuf(): valTuf(%v) not valid type(%v)", lstField[1], type_))
 	}
 	txtRes := restore(lstField[2])
-	return result.NewOk(txtRes)
+	return result.ResOk(txtRes)
 }
 
 // Проверяет ключ на допустимое значение.

+ 3 - 3
v4/lev1/comp_spec/ilocal_ctx.go

@@ -15,11 +15,11 @@ type ICtxValue = ctx_value.ICtxValue
 type ILocalCtx interface {
 	core_spec.IRWMutex
 	// Get -- извлекает значение из контекста
-	Get(key *lev0.LTxt) *lev0.Option[ICtxValue]
+	Get(key lev0.ATxt) *lev0.Option[ICtxValue]
 	// Del -- удаляет значение из контекста
-	Del(key *lev0.LTxt)
+	Del(key lev0.ATxt)
 	// Set -- добавляет значение в контекст
-	Set(key *lev0.LTxt, val any, comment any)
+	Set(key lev0.ATxt, val any, comment lev0.ATxt)
 	// Size -- возвращает размер словаря контекста
 	Size() lev0.Int
 	// SortedList -- возвращает сортированный список объектов контекста

+ 6 - 8
v4/lev1/lev1.go

@@ -6,8 +6,6 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx"
@@ -37,37 +35,37 @@ func NewLogBuf(param *LogBufParam) comp_spec.ILogBuf {
 }
 
 // NewSafeString -- возвращает новую потокобезопасную строку.
-func NewSafeString() mKs.ISafeString {
+func NewSafeString() lev0.ISafeString {
 	str := safe_string.NewSafeString()
 	return str
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(strVal *lev0.LTxt) *lev0.Result[mKs.ISafeInt] {
+func NewSafeIntFromStr(strVal *lev0.LTxt) *lev0.Result[lev0.LInt] {
 	return safe_int.NewSafeIntFromStr(strVal)
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeIntGetenv(env *lev0.LTxt) *lev0.Result[mKs.ISafeInt] {
+func NewSafeIntGetenv(env *lev0.LTxt) *lev0.Result[lev0.ISafeInt] {
 	return safe_int.NewSafeIntGetenv(env)
 }
 
 // NewSafeInt -- возвращает новую потокобезопасную целочисленную переменную.
 //
 
-func NewSafeInt(val defs.Int) mKs.ISafeInt {
+func NewSafeInt(val lev0.Int) lev0.ISafeInt {
 	val_ := safe_int.NewSafeInt(val)
 	return val_
 }
 
 // NewSafeBoolReact -- возвращает новую потокобезопасную реактивную булеву переменную.
-func NewSafeBoolReact() mKs.ISafeBoolReact {
+func NewSafeBoolReact() lev0.ISafeBoolReact {
 	val := safe_bool_react.NewSafeBoolReact()
 	return val
 }
 
 // NewSafeBool -- возвращает новый потокобезопасный булевый признак.
-func NewSafeBool(val defs.Bool) mKs.ISafeBool {
+func NewSafeBool(val lev0.Bool) lev0.ISafeBool {
 	sb := safe_bool.NewSafeBool(val)
 	return sb
 }

+ 12 - 13
v4/lev1/local_ctx/ctx_value/ctx_value.go

@@ -6,21 +6,20 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
 // ICtxValue -- интерфейс к значению локального контекста.
-type ICtxValue interface {
+type ICtxValue[T any] interface {
+	lev0.IString[T]
 	core_spec.IRWMutex
 	// Key -- возвращает ключ значения
-	Key() *lev0.LTxt
+	Key() lev0.ATxt
 	// Val -- возвращает хранимое значение
 	Val() any
 	// CreateAt -- возвращает метку времени создания
-	CreateAt() core_spec.ITime
+	CreateAt() *lev0.LTime
 	// UpdateAt -- возвращает метку времени обновления
-	UpdateAt() core_spec.ITimeMut
+	UpdateAt() *lev0.MTime
 	// Comment -- возвращает комментарий значения
 	Comment() *lev0.LTxt
 }
@@ -28,7 +27,7 @@ type ICtxValue interface {
 // CtxValue -- потокобезопасное значение локального контекста.
 type CtxValue struct {
 	sync.RWMutex
-	key       *lev0.LTxt
+	key       lev0.ATxt
 	createAt  *lev0.LTime
 	Val_      any
 	UpdateAt_ *lev0.MTime
@@ -36,8 +35,8 @@ type CtxValue struct {
 }
 
 // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
-func NewCtxValue(key *lev0.LTxt, val any, comment lev0.ATxt) ICtxValue {
-	helpers.If(key == nil).Hassert("NewCtxValue(): key is empty", []any{})
+func NewCtxValue[T lev0.TxtConstraint](key lev0.ATxt, val any, comment T) ICtxValue {
+	lev0.If(key == "").Hassert("NewCtxValue(): key is empty", []any{})
 	sf := &CtxValue{
 		key:       key,
 		createAt:  lev0.LetTimeAuto(),
@@ -49,7 +48,7 @@ func NewCtxValue(key *lev0.LTxt, val any, comment lev0.ATxt) ICtxValue {
 }
 
 // Key -- возвращает ключ значения.
-func (sf *CtxValue) Key() *lev0.LTxt {
+func (sf *CtxValue) Key() lev0.ATxt {
 	return sf.key
 }
 
@@ -61,19 +60,19 @@ func (sf *CtxValue) Val() any {
 }
 
 // UpdateAt -- возвращает время обновления значения.
-func (sf *CtxValue) UpdateAt() core_spec.ITimeMut {
+func (sf *CtxValue) UpdateAt() *lev0.MTime {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.UpdateAt_
 }
 
 // CreateAt -- возвращает время создания значения.
-func (sf *CtxValue) CreateAt() core_spec.ITime {
+func (sf *CtxValue) CreateAt() *lev0.LTime {
 	return sf.createAt
 }
 
 // Comment -- возвращает комментарий значения.
-func (sf *CtxValue) Comment() defs.ITxtFix {
+func (sf *CtxValue) Comment() *lev0.LTxt {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.Comment_

+ 6 - 8
v4/lev1/local_ctx/ctx_value/ctx_value_test.go

@@ -4,14 +4,12 @@ import (
 	"testing"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
 	t         *testing.T
 	val       ICtxValue
-	createdAt ITime
+	createdAt *lev0.LTime
 }
 
 func TestCtxValue(t *testing.T) {
@@ -28,21 +26,21 @@ func (sf *tester) new() {
 	if sf.val == nil {
 		sf.t.Fatalf("new(): val==nil")
 	}
-	if val := sf.val.Val().(defs.Int); val != 5 {
+	if val := sf.val.Val().(lev0.Int); val != 5 {
 		sf.t.Fatalf("new(): val(%v)!=5", val)
 	}
-	create := sf.val.CreateAt()
-	if create.Time().Get() == "" {
+	createdAt := sf.val.CreateAt()
+	if createdAt.Get() == "" {
 		sf.t.Fatalf("new(): create is empty")
 	}
-	sf.createdAt = create
+	sf.createdAt = createdAt
 	if comment := sf.val.Comment(); comment.Get() != "test_value" {
 		sf.t.Fatalf("new(): comment(%v)!='test_value'", comment)
 	}
 	if key := sf.val.Key(); key.Get() != "test_key" {
 		sf.t.Fatalf("new(): key(%v)!='test_key'", key)
 	}
-	if update := sf.val.UpdateAt(); update.Time().Get() != "" {
+	if updatedAt := sf.val.UpdateAt(); updatedAt.Get() != "" {
 		sf.t.Fatalf("new(): update not empty")
 	}
 }

+ 21 - 25
v4/lev1/local_ctx/local_ctx.go

@@ -6,10 +6,6 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx/ctx_value"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
@@ -19,13 +15,13 @@ import (
 
 // ILocalCtx -- локальный контекст.
 type ILocalCtx interface {
-	core_spec.IRWMutex
+	lev0.IRWMutex
 	// Get -- извлекает значение из контекста
-	Get(key *lev0.LTxt) *lev0.Option[comp_spec.ICtxValue]
+	Get(key lev0.ATxt) *lev0.Option[comp_spec.ICtxValue]
 	// Del -- удаляет значение из контекста
-	Del(key *lev0.LTxt)
+	Del(key lev0.ATxt)
 	// Set -- добавляет значение в контекст
-	Set(key *lev0.LTxt, val any, comment any)
+	Set(key lev0.ATxt, val any, comment lev0.ATxt)
 	// Size -- возвращает размер словаря контекста
 	Size() lev0.Int
 	// SortedList -- возвращает сортированный список объектов контекста
@@ -46,23 +42,23 @@ type LocalCtx struct {
 	ctx      context.Context // Отменяемый контекст
 	fnCancel func()          // Функция отмены контекста
 
-	dictVal map[defs.ATxt]comp_spec.ICtxValue // Словарь различных значений
+	dictVal map[lev0.ATxt]comp_spec.ICtxValue // Словарь различных значений
 	lstSort *lst_sort.LstSort                 // Сортированный список значений
 	log     comp_spec.ILogBuf                 // Локальный буфер
 }
 
 // NewLocalCtx -- возвращает новый локальный контекст.
 func NewLocalCtx(ctx context.Context) ILocalCtx {
-	helpers.If(ctx == nil).Hassert("NewLocalCtx(): ctx==nil", []any{})
+	lev0.If(ctx == nil).Hassert("NewLocalCtx(): ctx==nil", []any{})
 	_ctx, fnCancel := context.WithCancel(ctx)
 	paramLogBuf := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: defs.TxtFix("LocalCtx"),
+		Prefix_: lev0.LetTxt("LocalCtx"),
 	}
 	sf := &LocalCtx{
 		ctx:      _ctx,
 		fnCancel: fnCancel,
-		dictVal:  map[defs.ATxt]comp_spec.ICtxValue{},
+		dictVal:  map[lev0.ATxt]comp_spec.ICtxValue{},
 		lstSort:  lst_sort.NewLstSort(),
 		log:      log_buf.NewLogBuf(paramLogBuf),
 	}
@@ -75,10 +71,10 @@ func (sf *LocalCtx) Ctx() context.Context {
 }
 
 // Size -- возвращает размер контекста.
-func (sf *LocalCtx) Size() defs.Int {
+func (sf *LocalCtx) Size() lev0.Int {
 	sf.RLock()
 	defer sf.RUnlock()
-	return defs.Int(len(sf.dictVal))
+	return lev0.Int(len(sf.dictVal))
 }
 
 // SortedList -- возвращает сортированный список значений.
@@ -92,13 +88,13 @@ func (sf *LocalCtx) Log() comp_spec.ILogBuf {
 }
 
 // Get -- возвращает хранимое значение.
-func (sf *LocalCtx) Get(key defs.ITxtFix) *lev0.Option[comp_spec.ICtxValue] {
+func (sf *LocalCtx) Get(key *lev0.LTxt) *lev0.Option[comp_spec.ICtxValue] {
 	sf.RLock()
 	defer sf.RUnlock()
 	if key.Get() == "" {
 		return lev0.NewNone[comp_spec.ICtxValue]()
 	}
-	msg := defs.TxtFix("Get(): key='%v'", key)
+	msg := lev0.LetTxt("Get(): key='%v'", key).Get()
 	sf.log.Debug(msg)
 	val, isOk := sf.dictVal[key.Get()]
 	if !isOk {
@@ -108,27 +104,27 @@ func (sf *LocalCtx) Get(key defs.ITxtFix) *lev0.Option[comp_spec.ICtxValue] {
 }
 
 // Del -- удаляет значение из контекста.
-func (sf *LocalCtx) Del(key defs.ITxtFix) {
+func (sf *LocalCtx) Del(key lev0.ATxt) {
 	sf.Lock()
 	defer sf.Unlock()
-	msg := defs.TxtFix("Del(): key='%v'", key)
+	msg := lev0.LetTxt("Del(): key='%v'", key).Get()
 	sf.log.Debug(msg)
-	val := sf.dictVal[key.Get()]
-	delete(sf.dictVal, key.Get())
+	val := sf.dictVal[key]
+	delete(sf.dictVal, key)
 	sf.lstSort.Del(val)
 }
 
 // Set -- добавляет значение в контекст.
-func (sf *LocalCtx) Set(key defs.ITxtFix, val any, comment any) {
+func (sf *LocalCtx) Set(key lev0.ATxt, val any, comment lev0.ATxt) {
 	sf.Lock()
 	defer sf.Unlock()
-	msg := defs.TxtFix("Set(): key='%v'", key)
+	msg := lev0.LetTxt("Set(): key='%v'", key).Get()
 	sf.log.Debug(msg)
-	_val, isOk := sf.dictVal[key.Get()]
+	_val, isOk := sf.dictVal[key]
 	if isOk {
 		val0 := _val.(*ctx_value.CtxValue)
 		val0.Lock()
-		val0.UpdateAt_ = etime.NewETimeAutoMut()
+		val0.UpdateAt_ = lev0.MutTimeAuto()
 		val0.Val_ = val
 		val0.Unlock()
 		return
@@ -145,6 +141,6 @@ func (sf *LocalCtx) Wait() {
 
 // Cancel -- отменяет контекст.
 func (sf *LocalCtx) Cancel() {
-	sf.log.Warn(defs.TxtFix("Cancel()"))
+	sf.log.Warn("Cancel()")
 	sf.fnCancel()
 }

+ 5 - 4
v4/lev1/local_ctx/local_ctx_test.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
@@ -34,14 +35,14 @@ func (sf *tester) done() {
 // Удаляет несуществующий ключ из локального контекста.
 func (sf *tester) del() {
 	sf.t.Log("del")
-	sf.lCtx.Del(defs.TxtFix("123"))
-	sf.lCtx.Del(defs.TxtFix("count"))
+	sf.lCtx.Del(lev0.LetTxt("123"))
+	sf.lCtx.Del(lev0.LetTxt("count"))
 }
 
 // Возвращает хранимое значение.
 func (sf *tester) get() {
 	sf.t.Log("get")
-	optRes := sf.lCtx.Get(defs.TxtFix("count"))
+	optRes := sf.lCtx.Get(lev0.LetTxt("count"))
 	ctxVal := optRes.Hassert("get()")
 	count := ctxVal.Val().(defs.Int)
 	if count == 15 {
@@ -52,7 +53,7 @@ func (sf *tester) get() {
 // Устанавливает значение.
 func (sf *tester) set() {
 	sf.t.Log("set")
-	msg := defs.TxtFix("count")
+	msg := lev0.LetTxt("count")
 	sf.lCtx.Set(msg, 5, "test_val")
 	sf.lCtx.Set(msg, 15, "test_val1")
 }

+ 37 - 37
v4/lev1/log_buf/log_buf.go

@@ -6,8 +6,8 @@ import (
 	"log"
 	"sync"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf/log_msg"
 )
@@ -17,23 +17,23 @@ import (
 //	Буфер для Error -- отдельный.
 type ILogBuf interface {
 	// Debug -- сообщение отладки
-	Debug(fMsg defs.ITxtFix, args ...any)
+	Debug(fMsg lev0.ATxt, args ...any)
 	// LogBus -- возвращает объект публикации в шину
 	// LogBus()ILogBus
 	// Info -- информационные сообщения
-	Info(fMsg defs.ITxtFix, args ...any)
+	Info(fMsg lev0.ATxt, args ...any)
 	// Warn -- предупреждающие сообщения
-	Warn(fMsg defs.ITxtFix, args ...any)
+	Warn(fMsg lev0.ATxt, args ...any)
 	// Err -- сообщения об ошибках
-	Err(fMsg defs.IErr, args ...any)
+	Err(fMsg *lev0.LErr, args ...any)
 	// Get -- возвращает сообщение по номеру (0..99)
-	Get(num defs.Int) log_msg.ILogMsg
+	Get(num lev0.Int) log_msg.ILogMsg
 	// GetErr -- возвращает сообщение ошибки по номеру (0..99)
-	GetErr(num defs.Int) log_msg.ILogMsg
+	GetErr(num lev0.Int) log_msg.ILogMsg
 	// Size -- возвращает размер лога
-	Size() defs.Int
+	Size() lev0.Int
 	// IsTerm -- возвращает признак логирования в терминал
-	IsTerm() core_spec.ISafeBool
+	IsTerm() lev0.ISafeBool
 }
 
 var (
@@ -42,7 +42,7 @@ var (
 
 // LogBufParam -- параметры логирующего буфера.
 type LogBufParam struct {
-	Prefix_ defs.ITxtFix        // Префикс для сообщений
+	Prefix_ *lev0.LTxt        // Префикс для сообщений
 	IsTerm_ core_spec.ISafeBool // Признак вывода в терминал
 }
 
@@ -68,8 +68,8 @@ func NewLogBuf(param *LogBufParam) ILogBuf {
 		lst:         []log_msg.ILogMsg{},
 		lstErr:      []log_msg.ILogMsg{},
 	}
-	pref := sf.Prefix_.Get() + defs.ATxt(".")
-	sf.Prefix_ = defs.TxtFix(pref)
+	pref := sf.Prefix_.Get() + lev0.ATxt(".")
+	sf.Prefix_ = lev0.LetTxt(pref)
 	return sf
 }
 
@@ -79,14 +79,14 @@ func (sf *LogBuf) IsTerm() core_spec.ISafeBool {
 }
 
 // GetErr -- возвращает сообщение ошибки по номеру.
-func (sf *LogBuf) GetErr(num defs.Int) log_msg.ILogMsg {
+func (sf *LogBuf) GetErr(num lev0.Int) log_msg.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lstErr) == 0 {
 		msg := sf.Prefix_.Get() + "not error msg"
-		return log_msg.NewLogMsg(log_msg.DEBUG, defs.TxtFix(msg))
+		return log_msg.NewLogMsg(log_msg.DEBUG, msg)
 	}
-	if num >= defs.Int(len(sf.lstErr)) {
+	if num >= lev0.Int(len(sf.lstErr)) {
 		return sf.lstErr[len(sf.lstErr)-1]
 	}
 	if num <= 0 {
@@ -96,65 +96,65 @@ func (sf *LogBuf) GetErr(num defs.Int) log_msg.ILogMsg {
 }
 
 // Get -- возвращает сообщение по номеру.
-func (sf *LogBuf) Get(num defs.Int) log_msg.ILogMsg {
+func (sf *LogBuf) Get(num lev0.Int) log_msg.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	msg := sf.Prefix_.Get() + "*no msg*"
 	if len(sf.lst) == 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, defs.TxtFix(msg))
+		return log_msg.NewLogMsg(log_msg.DEBUG, msg)
 	}
-	if num >= defs.Int(len(sf.lst)) {
-		return log_msg.NewLogMsg(log_msg.DEBUG, defs.TxtFix(msg))
+	if num >= lev0.Int(len(sf.lst)) {
+		return log_msg.NewLogMsg(log_msg.DEBUG, msg)
 	}
 	if num <= 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, defs.TxtFix(msg))
+		return log_msg.NewLogMsg(log_msg.DEBUG, msg)
 	}
 	return sf.lst[num]
 }
 
 // Debug -- сообщение отладки.
-func (sf *LogBuf) Debug(fTxt defs.ITxtFix, args ...any) {
+func (sf *LogBuf) Debug(fTxt lev0.ATxt, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	strMsg := fmt.Sprintf(fTxt.String(), args...)
-	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
-	_msg := log_msg.NewLogMsg(log_msg.DEBUG, defs.TxtFix(msg))
+	strMsg := lev0.Sprintf(fTxt, args...)
+	msg := sf.Prefix_.Get() + lev0.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.DEBUG, msg)
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
 }
 
 // Info -- информационные сообщения.
-func (sf *LogBuf) Info(fMsg defs.ITxtFix, args ...any) {
+func (sf *LogBuf) Info(fMsg lev0.ATxt, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	strMsg := fmt.Sprintf(fMsg.String(), args...)
-	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
-	_msg := log_msg.NewLogMsg(log_msg.INFO, defs.TxtFix(msg))
+	strMsg := lev0.Sprintf(fMsg, args...)
+	msg := sf.Prefix_.Get() + lev0.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.INFO, msg)
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
 }
 
 // Warn -- предупреждающие сообщения.
-func (sf *LogBuf) Warn(fMsg defs.ITxtFix, args ...any) {
+func (sf *LogBuf) Warn(fMsg lev0.ATxt, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	strMsg := fmt.Sprintf(fMsg.String(), args...)
-	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
-	_msg := log_msg.NewLogMsg(log_msg.WARN, defs.TxtFix(msg))
+	strMsg := lev0.Sprintf(fMsg, args...)
+	msg := sf.Prefix_.Get() + lev0.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.WARN, msg)
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
 }
 
 // Err -- сообщения об ошибках.
-func (sf *LogBuf) Err(err defs.IErr, args ...any) {
+func (sf *LogBuf) Err(err *lev0.LErr, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
 	strMsg := fmt.Sprintf(err.String(), args...)
-	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
-	_msg := log_msg.NewLogMsg(log_msg.ERROR, defs.TxtFix(msg))
+	msg := sf.Prefix_.Get() + lev0.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.ERROR, msg)
 	sf.lst = append(sf.lst, _msg)
 	sf.lstErr = append(sf.lstErr, _msg)
 	sf.checkLen()
@@ -163,10 +163,10 @@ func (sf *LogBuf) Err(err defs.IErr, args ...any) {
 }
 
 // Size -- возвращает размер буфера.
-func (sf *LogBuf) Size() defs.Int {
+func (sf *LogBuf) Size() lev0.Int {
 	sf.RLock()
 	defer sf.RUnlock()
-	return defs.Int(len(sf.lst))
+	return lev0.Int(len(sf.lst))
 }
 
 // Проверяет длину общую лога.

+ 10 - 14
v4/lev1/log_buf/log_buf_test.go

@@ -3,7 +3,7 @@ package log_buf
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
@@ -25,7 +25,7 @@ func (sf *tester) new() {
 	sf.t.Log("new")
 	param := &LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: defs.TxtFix("tester"),
+		Prefix_: lev0.LetTxt("tester"),
 	}
 	sf.log = NewLogBuf(param)
 	if sf.log == nil {
@@ -36,14 +36,11 @@ func (sf *tester) new() {
 	if msg == nil {
 		sf.t.Fatalf("new(): msg==nil")
 	}
-	_msg := defs.TxtFix("test msg: %v", 45)
-	sf.log.Debug(_msg)
-	_msg = defs.TxtFix("test msg: %v", 46)
-	sf.log.Info(_msg)
-	_msg = defs.TxtFix("test msg: %v", 47)
-	sf.log.Warn(_msg)
+	sf.log.Debug("test msg: %v", 45)
+	sf.log.Info("test msg: %v", 46)
+	sf.log.Warn("test msg: %v", 47)
 	for i := range 120 {
-		err := defs.Err("test err: %v", i)
+		err := lev0.LetErr("test err: %v", i)
 		sf.log.Err(err)
 	}
 	_ = sf.log.Get(120)
@@ -57,13 +54,12 @@ func (sf *tester) new() {
 	_ = sf.log.Size()
 
 	sf.log.IsTerm().Reset()
-	_msg = defs.TxtFix("test msg: %v", 47)
-	sf.log.Warn(_msg)
+	sf.log.Warn("test msg: %v", 47)
 
 	sf.log.IsTerm().Set()
-	sf.log.Warn(_msg)
+	sf.log.Warn("test msg: %v", 47)
 
 	helpers.IsStageProd = true
-	sf.log.Warn(_msg)
-	sf.log.Debug(defs.TxtFix("test msg: %v", 45))
+	sf.log.Warn("test msg: %v", 47)
+	sf.log.Debug("test msg: %v", 45)
 }

+ 25 - 22
v4/lev1/log_buf/log_msg/log_msg.go

@@ -4,41 +4,43 @@ package log_msg
 import (
 	"fmt"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
+type IString interface {
+	String() string
+}
+
 // ILogMsg -- сообщение лога.
 type ILogMsg interface {
-	defs.IString
+	IString
 	// CreateAt -- когда создано
-	CreateAt() lev0.Time
+	CreateAt() *lev0.LTime
 	// Level -- уровень сообщения
-	Level() *lev0.MTxt
+	Level() *lev0.LTxt
 	// Msg -- текст сообщения
 	Msg() *lev0.LTxt
 }
 
 const (
-	DEBUG  = -4
-	INFO   = -3
-	WARN   = -2
-	ERROR  = -1
-	NOTSET = 0
+	DEBUG  = lev0.Int(-4)
+	INFO   = lev0.Int(-3)
+	WARN   = lev0.Int(-2)
+	ERROR  = lev0.Int(-1)
+	NOTSET = lev0.Int(0)
 )
 
 // logMsg -- сообщение логгера.
 type logMsg struct {
-	level     defs.ITxtMut
-	createdAt core_spec.ITime
-	msg       core_spec.LTime
+	level     *lev0.MTxt
+	createdAt *lev0.LTime
+	msg       lev0.ATxt
 }
 
 // NewLogMsg -- возвращает новое сообщение логгера.
-func NewLogMsg(level defs.Int, msg defs.ITxtFix) ILogMsg {
+func NewLogMsg(level lev0.Int, msg lev0.ATxt) ILogMsg {
 	sf := &logMsg{
-		createdAt: etime.NewETimeAuto(),
+		createdAt: lev0.LetTimeAuto(),
 		msg:       msg,
 	}
 	sf.check(level)
@@ -52,22 +54,23 @@ func (sf *logMsg) String() string {
 }
 
 // Msg -- возвращает хранимое сообщение.
-func (sf *logMsg) Msg() defs.ITxtFix {
-	return sf.msg
+func (sf *logMsg) Msg() *lev0.LTxt {
+	return lev0.LetTxt(sf.msg)
 }
 
 // Level -- возвращает уровень сообщения.
-func (sf *logMsg) Level() defs.ITxtMut {
-	return sf.level
+func (sf *logMsg) Level() *lev0.LTxt {
+	lev := lev0.LetTxt(sf.level.Get())
+	return lev
 }
 
 // CreateAt -- когда сообщение создано.
-func (sf *logMsg) CreateAt() core_spec.ITime {
+func (sf *logMsg) CreateAt() *lev0.LTime {
 	return sf.createdAt
 }
 
 // Проверяет правильность своего состава.
-func (sf *logMsg) check(level defs.Int) {
+func (sf *logMsg) check(level lev0.Int) {
 	switch level {
 	case DEBUG:
 		sf.level.Set("DEBU")
@@ -78,6 +81,6 @@ func (sf *logMsg) check(level defs.Int) {
 	case ERROR:
 		sf.level.Set("ERRO")
 	default:
-		helpers.If(true).Hassert("logMsg.check(): NOTSET level(%v)", []any{level})
+		lev0.If(true).Hassert("logMsg.check(): NOT SET level(%v)", []any{level})
 	}
 }

+ 6 - 8
v4/lev1/log_buf/log_msg/log_msg_test.go

@@ -3,8 +3,6 @@ package log_msg
 import (
 	"strings"
 	"testing"
-
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -27,17 +25,17 @@ func (sf *tester) new() {
 
 func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
-	_ = NewLogMsg(-3, defs.TxtFix("test msg -3"))
-	_ = NewLogMsg(-2, defs.TxtFix("test msg -2"))
-	_ = NewLogMsg(-1, defs.TxtFix("test msg -1"))
-	msg := NewLogMsg(0, defs.TxtFix("test msg 0"))
+	_ = NewLogMsg(-3, "test msg -3")
+	_ = NewLogMsg(-2, "test msg -2")
+	_ = NewLogMsg(-1, "test msg -1")
+	msg := NewLogMsg(0, "test msg 0")
 	if msg := msg.Msg(); msg.Get() != "test msg 0" {
 		sf.t.Fatalf("newGood1(): msg(%v)!='test msg 0'", msg)
 	}
 	if lvl := msg.Level(); lvl.Get() != "ERRO" {
 		sf.t.Fatalf("newGood1(): lvl(%v)!='ERRO'", lvl)
 	}
-	if createAt := msg.CreateAt(); createAt.Time().Get() == "" {
+	if createAt := msg.CreateAt(); createAt.Get() == "" {
 		sf.t.Fatalf("newGood1(): createAt is empty")
 	}
 	if str := msg.String(); !strings.Contains(str, "ERRO   2") {
@@ -53,5 +51,5 @@ func (sf *tester) newBad1() {
 			sf.t.Fatalf("newBad1(): panic==nil")
 		}
 	}()
-	_ = NewLogMsg(-10, defs.TxtFix("test msg"))
+	_ = NewLogMsg(-10, "test msg")
 }

+ 3 - 4
v4/lev1/log_dict_topic/log_dict_topic.go

@@ -5,7 +5,6 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
@@ -19,12 +18,12 @@ type LogDictTopic struct {
 // NewLogDictTopic -- возвращает новый словарь топиков для логирования.
 func NewLogDictTopic(clientBus bus_spec.IBusClient) *lev0.Result[*LogDictTopic] {
 	if clientBus == nil {
-		err := defs.Err("NewLogDictTopic(): clientBus == nil")
-		return lev0.NewErr[*LogDictTopic](err)
+		err := lev0.LetErr("NewLogDictTopic(): clientBus == nil")
+		return lev0.ResErr[*LogDictTopic](err)
 	}
 	sf := &LogDictTopic{
 		dict:   map[topic.ATopic]struct{}{},
 		client: clientBus,
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }

+ 7 - 7
v4/lev1/lst_sort/lst_sort_test.go

@@ -3,7 +3,7 @@ package lst_sort
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx/ctx_value"
 )
 
@@ -26,7 +26,7 @@ func TestLstSort(t *testing.T) {
 // Нет такого элемента.
 func (sf *tester) del3() {
 	sf.t.Log("del3")
-	val5 := ctx_value.NewCtxValue(defs.TxtFix("val5"), 5, defs.TxtFix("test 5"))
+	val5 := ctx_value.NewCtxValue(lev0.LetTxt("val5"), 5, "test 5")
 	sf.lst.Del(val5)
 	sf.lst.Del(nil)
 }
@@ -73,11 +73,11 @@ func (sf *tester) del() {
 // Добавление элементов в список.
 func (sf *tester) add() {
 	sf.t.Log("add")
-	val0 := ctx_value.NewCtxValue(defs.TxtFix("val0"), 0, defs.TxtFix("test 0"))
-	val1 := ctx_value.NewCtxValue(defs.TxtFix("val1"), 1, defs.TxtFix("test 1"))
-	val2 := ctx_value.NewCtxValue(defs.TxtFix("val2"), 2, defs.TxtFix("test 2"))
-	val3 := ctx_value.NewCtxValue(defs.TxtFix("val3"), 3, defs.TxtFix("test 3"))
-	val4 := ctx_value.NewCtxValue(defs.TxtFix("val4"), 4, defs.TxtFix("test 4"))
+	val0 := ctx_value.NewCtxValue("val0", 0, "test 0")
+	val1 := ctx_value.NewCtxValue("val1", 1, "test 1")
+	val2 := ctx_value.NewCtxValue("val2", 2, "test 2")
+	val3 := ctx_value.NewCtxValue("val3", 3, "test 3")
+	val4 := ctx_value.NewCtxValue("val4", 4, "test 4")
 	sf.lst.Add(val1)
 	sf.lst.Add(val4)
 	sf.lst.Add(val0)

+ 33 - 25
v4/lev1/mock_env/mock_env.go

@@ -5,27 +5,27 @@ import (
 	"os"
 	"strings"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
 type IMockEnv interface {
 	// Pwd -- возвращает текущий рабочий каталог процесса
-	Pwd() defs.ITxtFix
+	Pwd() *lev0.LTxt
 }
 
 // MockEnv -- объект мок-окружения.
 type MockEnv struct {
-	dictEnv  map[defs.ATxt]defs.ITxtFix // Словарь переменных окружения
-	pwd      defs.ITxtFix               // Текущий путь процесса
-	fileName defs.ITxtFix               // Полный путь к .env файлу
-	strEnv   defs.ITxtFix               // Фактическое содержимое .env файла
+	dictEnv  map[lev0.ATxt]*lev0.LTxt // Словарь переменных окружения
+	pwd      *lev0.LTxt               // Текущий путь процесса
+	fileName *lev0.LTxt               // Полный путь к .env файлу
+	strEnv   *lev0.LTxt               // Фактическое содержимое .env файла
 }
 
 // MakeEnv -- возвращает новое мок-окружение.
 func MakeEnv() *MockEnv {
 	sf := &MockEnv{
-		dictEnv: map[defs.ATxt]defs.ITxtFix{},
+		dictEnv: map[lev0.ATxt]*lev0.LTxt{},
 	}
 	sf.setPath()
 	sf.readEnv()
@@ -45,16 +45,16 @@ func (sf *MockEnv) parseEnv() {
 		if strings.HasPrefix(val, "#") {
 			continue
 		}
-		sf.parseEnvStr(defs.TxtFix(pair))
+		sf.parseEnvStr(lev0.LetTxt(pair))
 	}
 }
 
 // Парсит строку окружения.
-func (sf *MockEnv) parseEnvStr(pair defs.ITxtFix) {
+func (sf *MockEnv) parseEnvStr(pair *lev0.LTxt) {
 	lstPair := strings.Split(pair.String(), "=")
-	helpers.If(len(lstPair) < 2).Hassert("MockEnv.parseEnvStr(): pair(%v) not have =", []any{pair})
+	lev0.If(len(lstPair) < 2).Hassert("MockEnv.parseEnvStr(): pair(%v) not have =", []any{pair})
 	key := lstPair[0]
-	helpers.If(key == "").Hassert("MockEnv.parseEnvStr(): in pair(%v) key is empty", []any{pair})
+	lev0.If(key == "").Hassert("MockEnv.parseEnvStr(): in pair(%v) key is empty", []any{pair})
 	lstVal := lstPair[1:]
 
 	val := ""
@@ -63,15 +63,17 @@ func (sf *MockEnv) parseEnvStr(pair defs.ITxtFix) {
 	}
 	val = strings.TrimSuffix(val, "=")
 
-	helpers.If(val == "").Hassert("MockEnv.parseEnvStr(): in pair(%v) val is empty", []any{pair})
-	sf.dictEnv[defs.ATxt(key)] = defs.TxtFix(val)
+	lev0.If(val == "").Hassert("MockEnv.parseEnvStr(): in pair(%v) val is empty", []any{pair})
+	sf.dictEnv[lev0.ATxt(key)] = lev0.LetTxt(val)
 }
 
 // Читает файл переменных окружения.
 func (sf *MockEnv) readEnv() {
 	binEnv, err := os.ReadFile(sf.fileName.String())
-	helpers.If(err != nil).Hassert("MockEnv.readEnv(): in read %v, err=\n\t%v", []any{sf.fileName, err})
-	sf.strEnv = defs.TxtFix(defs.ATxt(binEnv))
+	lev0.If(err != nil).
+		Hassert("MockEnv.readEnv(): in read %v, err=\n\t%v", []any{sf.fileName,
+			err})
+	sf.strEnv = lev0.LetTxt(lev0.ATxt(binEnv))
 }
 
 // Устанавливает текущий путь относительно проекта в dev.
@@ -81,7 +83,7 @@ func (sf *MockEnv) setPath() {
 	lstDir := strings.Split(dir, "/")
 	var pwd strings.Builder
 	fileName := ""
-	isFind := defs.Bool(false)
+	isFind := lev0.Bool(false)
 	for _, point := range lstDir {
 		_, _ = pwd.WriteString(point + "/")
 		fileName = pwd.String() + ".env"
@@ -92,16 +94,16 @@ func (sf *MockEnv) setPath() {
 		}
 	}
 	helpers.If(!isFind).Hassert("MockEnv.setPath(): not find file .env", []any{})
-	sf.pwd = defs.TxtFix(pwd.String() + "/bin_dev")
+	sf.pwd = lev0.LetTxt(pwd.String() + "/bin_dev")
 	err = os.MkdirAll(sf.pwd.String(), 0750)
 	helpers.If(err != nil).Hassert("MockEnv.setPath(): in create PWD, err=\n\t%v", []any{err})
 	err = os.Chdir(sf.pwd.String())
 	helpers.If(err != nil).Hassert("MockEnv.setPath(): in set cwd(%v), err=\n\t%v", []any{sf.pwd, err})
-	sf.fileName = defs.TxtFix(fileName)
+	sf.fileName = lev0.LetTxt(fileName)
 }
 
 // Pwd -- возвращает текущий рабочий каталог процесса.
-func (sf *MockEnv) Pwd() defs.ITxtFix {
+func (sf *MockEnv) Pwd() *lev0.LTxt {
 	return sf.pwd
 }
 
@@ -109,22 +111,28 @@ func (sf *MockEnv) Pwd() defs.ITxtFix {
 func (sf *MockEnv) SetAll() {
 	sf.ResetAll()
 	for key, val := range sf.dictEnv {
-		sf.Reset(defs.TxtFix("key"))
+		sf.Reset(lev0.LetTxt("key"))
 		err := os.Setenv(string(key), val.String())
-		helpers.If(err != nil).Hassert("MockEnv.SetAll(): in set env %v on key %v, err=\n\t%v", []any{key, val, err})
+		lev0.If(err != nil).
+			Hassert("MockEnv.SetAll(): in set env %v on key %v, err=\n\t%v",
+				[]any{key, val, err})
 	}
 }
 
 // ResetAll -- сбрасывает все переменные окружения.
 func (sf *MockEnv) ResetAll() {
 	for key := range sf.dictEnv {
-		sf.Reset(defs.TxtFix(key))
+		sf.Reset(lev0.LetTxt(key))
 	}
 }
 
 // Reset -- сбрасывает конкретный ключ.
-func (sf *MockEnv) Reset(key defs.ITxtFix) {
-	helpers.If(key.Get() == "").Hassert("MockEnv.Reset(): key is empty", []any{})
+func (sf *MockEnv) Reset(key *lev0.LTxt) {
+	lev0.If(key.Get() == "").
+		Hassert("MockEnv.Reset(): key is empty",
+			[]any{})
 	err := os.Unsetenv(key.String())
-	helpers.If(err != nil).Hassert("MockEnv.Reset(): in reset env %v, err=\n\t%v", []any{key, err})
+	lev0.If(err != nil).
+		Hassert("MockEnv.Reset(): in reset env %v, err=\n\t%v",
+			[]any{key, err})
 }

+ 2 - 2
v4/lev1/mock_env/mock_env_test.go

@@ -3,7 +3,7 @@ package mock_env
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 type tester struct {
@@ -37,7 +37,7 @@ func (sf *tester) resetBad1() {
 			sf.t.Fatalf("resetBad1(): panic=%v", pan)
 		}
 	}()
-	sf.me.Reset(defs.TxtFix(""))
+	sf.me.Reset(lev0.LetTxt(""))
 }
 
 // Создание мок-окружения.

+ 21 - 21
v4/lev1/safe_bool/safe_bool.go

@@ -7,18 +7,16 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 // safeBool -- потокобезопасный булевый признак.
 type safeBool struct {
 	sync.RWMutex
-	val defs.Bool
+	val lev0.Bool
 }
 
 // NewSafeBool -- возвращает новый потокобезопасный булевый признак.
-func NewSafeBool(val defs.Bool) core_spec.ISafeBool {
+func NewSafeBool(val lev0.Bool) lev0.ISafeBool {
 	sf := &safeBool{
 		val: val,
 	}
@@ -26,29 +24,30 @@ func NewSafeBool(val defs.Bool) core_spec.ISafeBool {
 }
 
 // NewSafeBoolFromStr -- возвращает новое потокобезопасное булево из строки.
-func NewSafeBoolFromStr(strVal defs.ITxtFix) *lev0.Result[core_spec.ISafeBool] {
+func NewSafeBoolFromStr(strVal *lev0.LTxt) *lev0.Result[lev0.ISafeBool] {
 	sf := NewSafeBool(false)
 	res := sf.FromStr(strVal)
 	if res.IsSome() {
-		err := defs.Err("NewSafeBoolFromStr(): in parse str(%v), err=\n\t%w", strVal, res.Some().Get())
-		return lev0.NewErr[core_spec.ISafeBool](err)
+		err := lev0.LetErr("NewSafeBoolFromStr(): in parse str(%v), err=\n\t%w",
+			strVal, res.Some().Get())
+		return lev0.ResErr[lev0.ISafeBool](err)
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeBoolGetenv(env defs.ITxtFix) *lev0.Result[core_spec.ISafeBool] {
+func NewSafeBoolGetenv(env *lev0.LTxt) *lev0.Result[lev0.ISafeBool] {
 	sf := NewSafeBool(false)
 	res := sf.Getenv(env)
 	if res.IsSome() {
-		err := defs.Err("NewSafeBoolGetenv(): in parse env(%v), err=\n\t%w", env, res.Some().Get())
-		return lev0.NewErr[core_spec.ISafeBool](err)
+		err := lev0.LetErr("NewSafeBoolGetenv(): in parse env(%v), err=\n\t%w", env, res.Some().Get())
+		return lev0.ResErr[lev0.ISafeBool](err)
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // Get -- возвращает хранимый булевый признак.
-func (sf *safeBool) Get() defs.Bool {
+func (sf *safeBool) Get() lev0.Bool {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val
@@ -69,7 +68,7 @@ func (sf *safeBool) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBool) FromStr(strVal defs.ITxtFix) lev0.IOption[defs.IErr] {
+func (sf *safeBool) FromStr(strVal *lev0.LTxt) *lev0.Option[*lev0.LErr] {
 	_strVal := strings.ToLower(strVal.String())
 	sf.Lock()
 	defer sf.Unlock()
@@ -79,19 +78,20 @@ func (sf *safeBool) FromStr(strVal defs.ITxtFix) lev0.IOption[defs.IErr] {
 	case "false":
 		sf.val = false
 	default:
-		err := defs.Err("safeBool.FromStr(): val(%v) bad", strVal)
+		err := lev0.LetErr("safeBool.FromStr(): val(%v) bad", strVal)
 		return lev0.NewSome(err)
 	}
-	return lev0.NewNone[defs.IErr]()
+	return lev0.NewNone[*lev0.LErr]()
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBool) Getenv(env defs.ITxtFix) lev0.IOption[defs.IErr] {
-	strVal := defs.ATxt(os.Getenv(env.String()))
-	res := sf.FromStr(defs.TxtFix(strVal))
+func (sf *safeBool) Getenv(env *lev0.LTxt) *lev0.Option[*lev0.LErr] {
+	strVal := lev0.ATxt(os.Getenv(env.String()))
+	res := sf.FromStr(lev0.LetTxt(strVal))
 	if res.IsSome() {
-		err := defs.Err("safeBool.Getenv(): from env %v, err=\n\t%w", env, res.Some().Get())
+		err := lev0.LetErr("safeBool.Getenv(): from env %v, err=\n\t%w",
+			env, res.Some().Get())
 		return lev0.NewSome(err)
 	}
-	return lev0.NewNone[defs.IErr]()
+	return lev0.NewNone[*lev0.LErr]()
 }

+ 5 - 6
v4/lev1/safe_bool/safe_bool_test.go

@@ -4,13 +4,12 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 type tester struct {
 	t  *testing.T
-	sb ISafeBool
+	sb lev0.ISafeBool
 }
 
 func TestSAfeBool(t *testing.T) {
@@ -33,7 +32,7 @@ func (sf *tester) newFromStr() {
 
 func (sf *tester) newFromStrGood1() {
 	sf.t.Log("newFromStrGood1")
-	res := NewSafeBoolFromStr(defs.TxtFix("tRuE"))
+	res := NewSafeBoolFromStr(lev0.LetTxt("tRuE"))
 	if res.IsErr() {
 		sf.t.Fatalf("newFromStrGood1(): err=%v", res.Err())
 	}
@@ -46,7 +45,7 @@ func (sf *tester) newFromStrGood1() {
 // Кривое булево значение.
 func (sf *tester) newFromStrBad1() {
 	sf.t.Log("newFromStrBad1")
-	res := NewSafeBoolFromStr(defs.TxtFix("0"))
+	res := NewSafeBoolFromStr(lev0.LetTxt("0"))
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStrBad1(): err==nil")
 	}
@@ -60,7 +59,7 @@ func (sf *tester) newFromEnv() {
 	sf.newFromEnvGood2()
 }
 
-var testBool = defs.TxtFix("TEST_BOOL")
+var testBool = lev0.LetTxt("TEST_BOOL")
 
 func (sf *tester) newFromEnvGood2() {
 	sf.t.Log("newFromEnvGood2")

+ 32 - 32
v4/lev1/safe_bool_react/safe_bool_react.go

@@ -7,74 +7,73 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 )
 
 // safeBoolReact -- потокобезопасный булевый признак с реакцией на своё изменение.
 type safeBoolReact struct {
 	sync.RWMutex
-	dict map[defs.ITxtFix]func(core_spec.EBoolMut) // Словарь обратных вызовов
+	dict map[*lev0.LTxt]func(*lev0.MBool) // Словарь обратных вызовов
 	val  defs.Bool
 }
 
 // NewSafeBoolReact -- возвращает новый потокобезопасный булевый признак с реакцией на своё изменение.
-func NewSafeBoolReact() core_spec.ISafeBoolReact {
+func NewSafeBoolReact() lev0.ISafeBoolReact {
 	sf := &safeBoolReact{
-		dict: map[defs.ITxtFix]func(core_spec.EBoolMut){},
+		dict: map[*lev0.LTxt]func(*lev0.MBool){},
 	}
 	return sf
 }
 
 // NewSafeBoolReactFromStr -- возвращает новое потокобезопасное булево с реакцией из строки.
-func NewSafeBoolReactFromStr(strVal defs.ITxtFix) *lev0.Result[core_spec.ISafeBoolReact] {
+func NewSafeBoolReactFromStr(strVal *lev0.LTxt) *lev0.Result[lev0.ISafeBoolReact] {
 	sf := NewSafeBoolReact()
 	res := sf.FromStr(strVal)
 	if res.IsSome() {
-		err := defs.Err("NewSafeBoolReactFromStr(): in parse str(%v), err=\n\t%w", strVal, res.Some().Get())
-		return lev0.NewErr[core_spec.ISafeBoolReact](err)
+		err := lev0.LetErr("NewSafeBoolReactFromStr(): in parse str(%v), err=\n\t%w",
+			strVal, res.Some().Get())
+		return lev0.ResErr[lev0.ISafeBoolReact](err)
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое с реакцией из окружения.
-func NewSafeBoolGetenv(env defs.ITxtFix) *lev0.Result[core_spec.ISafeBoolReact] {
+func NewSafeBoolGetenv(env *lev0.LTxt) *lev0.Result[lev0.ISafeBoolReact] {
 	sf := NewSafeBoolReact()
 	res := sf.Getenv(env)
 	if res.IsSome() {
-		err := defs.Err("NewSafeBoolGetenv(): in parse env(%v), err=\n\t%w", env, res.Some().Get())
-		return lev0.NewErr[core_spec.ISafeBoolReact](err)
+		err := lev0.LetErr("NewSafeBoolGetenv(): in parse env(%v), err=\n\t%w", env, res.Some().Get())
+		return lev0.ResErr[lev0.ISafeBoolReact](err)
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // Delete -- удаляет функцию обратного вызова из наблюдения.
-func (sf *safeBoolReact) Delete(key defs.ITxtFix) {
+func (sf *safeBoolReact) Delete(key *lev0.LTxt) {
 	sf.Lock()
 	defer sf.Unlock()
 	delete(sf.dict, key)
 }
 
 // Add -- добавляет функцию обратного вызова.
-func (sf *safeBoolReact) Add(key defs.ITxtFix, fn func(core_spec.EBoolMut)) *lev0.Result[bool] {
+func (sf *safeBoolReact) Add(key *lev0.LTxt, fn func(*lev0.MBool)) *lev0.Result[bool] {
 	sf.Lock()
 	defer sf.Unlock()
 	if key.Get() == "" {
-		err := defs.Err("safeBoolReact.Add(): key is empty")
-		return lev0.NewErr[bool](err)
+		err := lev0.LetErr("safeBoolReact.Add(): key is empty")
+		return lev0.ResErr[bool](err)
 	}
 	_, isOk := sf.dict[key]
 	if isOk {
-		err := defs.Err("safeBoolReact.Add(): key(%v) already exists", key)
-		return lev0.NewErr[bool](err)
+		err := lev0.LetErr("safeBoolReact.Add(): key(%v) already exists", key)
+		return lev0.ResErr[bool](err)
 	}
 	sf.dict[key] = fn
-	return lev0.NewOk((true))
+	return lev0.ResOk((true))
 }
 
 // Get -- возвращает хранимый булевый признак.
-func (sf *safeBoolReact) Get() defs.Bool {
+func (sf *safeBoolReact) Get() lev0.Bool {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val
@@ -86,7 +85,7 @@ func (sf *safeBoolReact) Set() {
 	defer sf.Unlock()
 	sf.val = true
 	for _, fn := range sf.dict {
-		fn(ebool.NewEBoolMut(true))
+		fn(lev0.MutBool(true))
 	}
 }
 
@@ -96,12 +95,12 @@ func (sf *safeBoolReact) Reset() {
 	defer sf.Unlock()
 	sf.val = false
 	for _, fn := range sf.dict {
-		fn(ebool.NewEBoolMut(false))
+		fn(lev0.MutBool(false))
 	}
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBoolReact) FromStr(strVal defs.ITxtFix) core_spec.IOption[defs.IErr] {
+func (sf *safeBoolReact) FromStr(strVal *lev0.LTxt) *lev0.Option[*lev0.LErr] {
 	_strVal := strings.ToLower(strVal.String())
 	sf.Lock()
 	defer sf.Unlock()
@@ -111,19 +110,20 @@ func (sf *safeBoolReact) FromStr(strVal defs.ITxtFix) core_spec.IOption[defs.IEr
 	case "false":
 		sf.val = false
 	default:
-		err := defs.Err("safeBoolReact.FromStr(): val(%v) bad", strVal)
+		err := lev0.LetErr("safeBoolReact.FromStr(): val(%v) bad", strVal)
 		return lev0.NewSome(err)
 	}
-	return lev0.NewNone[defs.IErr]()
+	return lev0.NewNone[*lev0.LErr]()
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBoolReact) Getenv(env defs.ITxtFix) lev0.IOption[defs.IErr] {
-	strVal := defs.ATxt(os.Getenv(env.String()))
-	res := sf.FromStr(defs.TxtFix(strVal))
+func (sf *safeBoolReact) Getenv(env *lev0.LTxt) *lev0.Option[*lev0.LErr] {
+	strVal := lev0.ATxt(os.Getenv(env.String()))
+	res := sf.FromStr(lev0.LetTxt(strVal))
 	if res.IsSome() {
-		err := defs.Err("safeBoolReact.Getenv(): from env %v, err=\n\t%w", env, res.Some().Get())
-		return lev0.NewSome[defs.IErr](err)
+		err := lev0.LetErr("safeBoolReact.Getenv(): from env %v, err=\n\t%w",
+			env, res.Some().Get())
+		return lev0.NewSome[*lev0.LErr](err)
 	}
-	return lev0.NewNone[defs.IErr]()
+	return lev0.NewNone[*lev0.LErr]()
 }

+ 8 - 9
v4/lev1/safe_bool_react/safe_bool_react_test.go

@@ -4,14 +4,13 @@ import (
 	"os"
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 type tester struct {
 	t   *testing.T
-	sbr core_spec.ISafeBoolReact
-	val core_spec.EBoolMut
+	sbr lev0.ISafeBoolReact
+	val *lev0.MBool
 }
 
 func TestSafeBoolReact(t *testing.T) {
@@ -36,7 +35,7 @@ func (sf *tester) newFromStr() {
 
 func (sf *tester) newFromStrGood1() {
 	sf.t.Log("newFromStrGood1")
-	res := NewSafeBoolReactFromStr(defs.TxtFix("tRuE"))
+	res := NewSafeBoolReactFromStr(lev0.LetTxt("tRuE"))
 	if res.IsErr() {
 		sf.t.Fatalf("newFromStrGood1(): err=%v", res.Err())
 	}
@@ -49,7 +48,7 @@ func (sf *tester) newFromStrGood1() {
 // Кривое булево значение.
 func (sf *tester) newFromStrBad1() {
 	sf.t.Log("newFromStrBad1")
-	res := NewSafeBoolReactFromStr(defs.TxtFix("0"))
+	res := NewSafeBoolReactFromStr(lev0.LetTxt("0"))
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStrBad1(): err==nil")
 	}
@@ -63,7 +62,7 @@ func (sf *tester) newFromEnv() {
 	sf.newFromEnvGood2()
 }
 
-var testBool = defs.TxtFix("TEST_BOOL")
+var testBool = lev0.LetTxt("TEST_BOOL")
 
 func (sf *tester) newFromEnvGood2() {
 	sf.t.Log("newFromEnvGood2")
@@ -104,7 +103,7 @@ func (sf *tester) newFromEnvBad1() {
 	}
 }
 
-var txtTest = defs.TxtFix("test")
+var txtTest = lev0.LetTxt("test")
 
 // Удаляет функцию обратного вызова.
 func (sf *tester) del() {
@@ -124,7 +123,7 @@ func (sf *tester) add() {
 }
 
 // Функция обратного вызова для контроля.
-func (sf *tester) fnBack(val core_spec.EBoolMut) {
+func (sf *tester) fnBack(val *lev0.MBool) {
 	sf.val = val
 }
 

+ 44 - 34
v4/lev1/safe_int/safe_int.go

@@ -5,105 +5,115 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kint"
 )
 
 // safeInt -- потокобезопасное целое.
 type safeInt struct {
 	sync.RWMutex
-	val mKs.Int
+	val lev0.Int
 }
 
 // NewSafeInt -- возвращает новое потокобезопасное целое.
-func NewSafeInt(val defs.Int) mKs.ISafeInt {
+func NewSafeInt(val lev0.Int) lev0.ISafeInt {
 	sf := &safeInt{
-		val: kint.NewInt(val),
+		val: val,
 	}
 	return sf
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(txtVal defs.ITxtFix) *lev0.Result[mKs.ISafeInt] {
+func NewSafeIntFromStr(txtVal *lev0.LTxt) *lev0.Result[lev0.ISafeInt] {
 	sf := NewSafeInt(0)
 	res := sf.FromStr(txtVal)
 	if res.IsErr() {
-		err := defs.Err("NewSafeIntFromStr(): in parse str(%v), err=\n\t%w", txtVal, res.Err())
-		return lev0.NewErr[mKs.ISafeInt](err)
+		err := lev0.LetErr("NewSafeIntFromStr(): in parse str(%v), err=\n\t%w", txtVal, res.Err())
+		return lev0.ResErr[lev0.ISafeInt](err)
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeIntGetenv(env defs.ITxtFix) *lev0.Result[mKs.ISafeInt] {
+func NewSafeIntGetenv(env *lev0.LTxt) *lev0.Result[lev0.ISafeInt] {
 	sf := NewSafeInt(0)
 	res := sf.Getenv(env)
 	if res.IsErr() {
-		err := defs.Err("NewSafeIntGetenv(): in parse env(%v), err=\n\t%w", env, res.Err())
-		return lev0.NewErr[mKs.ISafeInt](err)
+		err := lev0.LetErr("NewSafeIntGetenv(): in parse env(%v), err=\n\t%w", env, res.Err())
+		return lev0.ResErr[lev0.ISafeInt](err)
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // FromBool -- устанавливает значение из булева значения.
-//
-
-func (sf *safeInt) FromBool(val defs.Bool) defs.Int {
+func (sf *safeInt) FromBool(val lev0.LBool) lev0.Int {
 	sf.Lock()
 	defer sf.Unlock()
-	return sf.val.FromBool(val)
+	if val.IsOk() {
+		sf.val = 1
+		return 1
+	}
+	sf.val = 0
+	return 0
 }
 
 // Get -- возвращает хранимое целое.
-//
-
-func (sf *safeInt) Get() defs.Int {
+func (sf *safeInt) Get() lev0.Int {
 	sf.RLock()
 	defer sf.RUnlock()
-	return sf.val.Get()
+	return sf.val
 }
 
 // Dec -- уменьшает значение на 1.
 func (sf *safeInt) Dec() {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.val.Dec()
+	sf.val--
 }
 
 // Inc -- увеличивает значение на 1.
 func (sf *safeInt) Inc() {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.val.Inc()
+	sf.val++
 }
 
 // Set -- устанавливает целое.
-func (sf *safeInt) Set(val defs.Int) {
+func (sf *safeInt) Set(val lev0.Int) {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.val.Set(val)
+	sf.val = val
 }
 
 // Reset -- сбрасывает целое.
 func (sf *safeInt) Reset() {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.val.Reset()
+	sf.val=0
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeInt) FromStr(txtVal defs.ITxtFix) *lev0.Result[defs.Int] {
+func (sf *safeInt) FromStr(txtVal *lev0.LTxt) *lev0.Result[lev0.Int] {
 	sf.Lock()
 	defer sf.Unlock()
-	return sf.val.FromStr(txtVal)
+	res:=txtVal.Atoi()
+	if res.Err!=nil {
+		err:=lev0.LetErr("safeInt.FromStr(): form str(%v) to int, err=\n\t%v", txtVal, res.Error())
+		return lev0.ResErr[lev0.Int](err)
+	}
+	sf.val=res.Ok()
+	return lev0.ResOk(sf.val)
 }
 
 // FromByte -- получает число из среза байт.
-func (sf *safeInt) FromByte(binData []byte) *lev0.Result[defs.Int] {
+func (sf *safeInt) FromByte(binData []byte) *lev0.Result[lev0.Int] {
 	sf.Lock()
 	defer sf.Unlock()
-	return sf.val.FromByte(binData)
+	res:=binData.ToInt()
+	if res.Err!=nil {
+		err:=lev0.LetErr("safeInt.FromByte(): form binData(%v) to int", binData, res.Error())
+		return lev0.ResErr[lev0.Int](err)
+	}
+	sf.val=res.Ok()
+	return lev0.ResOk(sf.val)
 }
 
 // ToByte -- конвертирует число в срез байт.
@@ -114,21 +124,21 @@ func (sf *safeInt) ToByte() []byte {
 }
 
 // ToBool -- конвертирует число в bool.
-func (sf *safeInt) ToBool() defs.Bool {
+func (sf *safeInt) ToBool() lev0.Bool {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val.ToBool()
 }
 
 // ToStr -- конвертирует число в строку.
-func (sf *safeInt) ToStr() defs.ITxtFix {
+func (sf *safeInt) ToStr() *lev0.LTxt {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val.ToStr()
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeInt) Getenv(env defs.ITxtFix) *lev0.Result[defs.Int] {
+func (sf *safeInt) Getenv(env *lev0.LTxt) *lev0.Result[lev0.Int] {
 	sf.Lock()
 	defer sf.Unlock()
 	return sf.val.Getenv(env)

+ 8 - 9
v4/lev1/safe_int/safe_int_test.go

@@ -4,13 +4,12 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 type tester struct {
 	t  *testing.T
-	si ISafeInt
+	si lev0.ISafeInt
 }
 
 func TestSafeInt(t *testing.T) {
@@ -99,11 +98,11 @@ func (sf *tester) inc() {
 // Получает целое из строки.
 func (sf *tester) newFromStr() {
 	sf.t.Log("newFromStr")
-	res := NewSafeIntFromStr(defs.TxtFix("-a52"))
+	res := NewSafeIntFromStr(lev0.LetTxt("-a52"))
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStr(): err==nil")
 	}
-	res = NewSafeIntFromStr(defs.TxtFix("-60"))
+	res = NewSafeIntFromStr(lev0.LetTxt("-60"))
 	if res.IsErr() {
 		sf.t.Fatalf("newFromStr(): err=%v", res.Err())
 	}
@@ -112,7 +111,7 @@ func (sf *tester) newFromStr() {
 	}
 }
 
-var testEnv2 = defs.TxtFix("TEST_ENV2")
+var testEnv2 = lev0.LetTxt("TEST_ENV2")
 
 // Получает целое из окружения.
 func (sf *tester) newGetenv() {
@@ -139,7 +138,7 @@ func (sf *tester) getEnv() {
 	sf.getEnvGood1()
 }
 
-var testVal = defs.TxtFix("TEST_VAL")
+var testVal = lev0.LetTxt("TEST_VAL")
 
 func (sf *tester) getEnvGood1() {
 	sf.t.Log("getEnvGood1")
@@ -177,7 +176,7 @@ func (sf *tester) fromStr() {
 func (sf *tester) fromStrGood1() {
 	sf.t.Log("fromStrGood1")
 	val := NewSafeInt(0)
-	res := val.FromStr(defs.TxtFix("45"))
+	res := val.FromStr(lev0.LetTxt("45"))
 	if res.IsErr() {
 		sf.t.Fatalf("fromStrGood1(): err=%v", res.Err())
 	}
@@ -190,7 +189,7 @@ func (sf *tester) fromStrGood1() {
 func (sf *tester) fromStrBad1() {
 	sf.t.Log("fromStrBad1")
 	val := NewSafeInt(0)
-	res := val.FromStr(defs.TxtFix(" "))
+	res := val.FromStr(lev0.LetTxt(" "))
 	if res.IsOk() {
 		sf.t.Fatalf("fromStrBad1(): res==ok")
 	}

+ 15 - 17
v4/lev1/safe_string/safe_string.go

@@ -6,31 +6,29 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 // safeString -- потокобезопасная строка.
 type safeString struct {
 	sync.RWMutex
-	val defs.ITxtMut
+	val *lev0.MTxt
 }
 
 // NewSafeString -- возвращает новую потокобезопасную строку.
-func NewSafeString() mKs.ISafeString {
+func NewSafeString() lev0.ISafeString {
 	sf := &safeString{}
 	return sf
 }
 
 // NewSafeStringGetenv -- возвращает новую потокобезопасную строку из окружения.
-func NewSafeStringGetenv(env defs.ITxtFix) *lev0.Result[mKs.ISafeString] {
+func NewSafeStringGetenv(env *lev0.LTxt) *lev0.Result[lev0.ISafeString] {
 	sf := NewSafeString()
 	res := sf.Getenv(env)
 	if res.IsErr() {
-		err := defs.Err("NewSafeStringGetenv(): in get from env(%v), err=\n\t%w", env, res.Err())
-		return lev0.NewErr[mKs.ISafeString](err)
+		err := lev0.LetErr("NewSafeStringGetenv(): in get from env(%v), err=\n\t%w", env, res.Err())
+		return lev0.ResErr[lev0.ISafeString](err)
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // Byte -- возвращает байтовое представление строки.
@@ -41,14 +39,14 @@ func (sf *safeString) Byte() []byte {
 }
 
 // Get -- возвращает хранимую строку.
-func (sf *safeString) Get() defs.ITxtFix {
+func (sf *safeString) Get() *lev0.LTxt {
 	sf.RLock()
 	defer sf.RUnlock()
-	return sf.val
+	return sf.val.Let()
 }
 
 // Set -- устанавливает строку.
-func (sf *safeString) Set(val defs.ITxtFix) {
+func (sf *safeString) Set(val *lev0.LTxt) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.val.Set(val.Get())
@@ -62,12 +60,12 @@ func (sf *safeString) Reset() {
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeString) Getenv(env defs.ITxtFix) *lev0.Result[defs.ITxtFix] {
-	txtVal := defs.ATxt(os.Getenv(env.String()))
+func (sf *safeString) Getenv(env *lev0.LTxt) *lev0.Result[*lev0.LTxt] {
+	txtVal := lev0.ATxt(os.Getenv(env.String()))
 	if txtVal == "" {
-		err := defs.Err("safeString.Getenv(): from env(%v), val is empty", env)
-		return lev0.NewErr[defs.ITxtFix](err)
+		err := lev0.LetErr("safeString.Getenv(): from env(%v), val is empty", env)
+		return lev0.ResErr[*lev0.LTxt](err)
 	}
-	sf.val = defs.TxtMut(txtVal)
-	return lev0.NewOk(defs.ITxtFix(sf.val))
+	sf.val = lev0.MutTxt(txtVal)
+	return lev0.ResOk(sf.val.Let())
 }

+ 5 - 6
v4/lev1/safe_string/safe_string_test.go

@@ -4,13 +4,12 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 type tester struct {
 	t  *testing.T
-	ss ISafeString
+	ss lev0.ISafeString
 }
 
 func TestSafeString(t *testing.T) {
@@ -31,7 +30,7 @@ func (sf *tester) newFromEnv() {
 	sf.newFromEnvGood2()
 }
 
-var testBool = defs.TxtFix("TEST_BOOL")
+var testBool = lev0.LetTxt("TEST_BOOL")
 
 func (sf *tester) newFromEnvGood2() {
 	sf.t.Log("newFromEnvGood2")
@@ -89,11 +88,11 @@ func (sf *tester) reset() {
 // Установка хранимого значения.
 func (sf *tester) set() {
 	sf.t.Log("set")
-	sf.ss.Set(defs.TxtMut("77"))
+	sf.ss.Set(lev0.MutTxt("77"))
 	if sf.ss.Get().Get() != "77" {
 		sf.t.Fatalf("set(): ISafeString!='77'")
 	}
-	sf.ss.Set(defs.TxtMut("-56"))
+	sf.ss.Set(lev0.MutTxt("-56"))
 	if sf.ss.Get().Get() != "-56" {
 		sf.t.Fatalf("set(): ISafeString!='-56'")
 	}

+ 9 - 11
v4/lev2/kchan/kchan.go

@@ -5,20 +5,18 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
 var (
-	If = helpers.If
+	If = lev0.If
 )
 
 // KChanParam -- параметры умного канала.
 type KChanParam[T any] struct {
-	Limit_   defs.Int            // лимит на размер канала, не может быть пустым
+	Limit_   lev0.Int            // лимит на размер канала, не может быть пустым
 	OnWrite_ func(T)             // Обратный вызов при записи в канал
 	OnRead_  func(T)             // Обратный вызов при чтении из канала
 	OnClose_ func()              // Обратный вызов при закрытии канала
@@ -26,7 +24,7 @@ type KChanParam[T any] struct {
 	Ctx_     comp_spec.ILocalCtx // Локальный контекст для контроля создателя
 }
 
-var msg1 = defs.ATxt("KChanParam[T]: ctx==nil")
+var msg1 = lev0.ATxt("KChanParam[T]: ctx==nil")
 
 // SelfCheck -- проверка корректности правильности параметров умного канала.
 func (sf *KChanParam[T]) SelfCheck() {
@@ -49,14 +47,14 @@ func (sf *KChanParam[T]) SelfCheck() {
 type KChan[T any] struct {
 	*KChanParam[T]
 	block    sync.RWMutex
-	isClosed core_spec.ISafeBool
+	isClosed lev0.ISafeBool
 	lstMsg   []T
 }
 
-var msg2 = defs.ATxt("NewKChan: param==nil")
+var msg2 = lev0.ATxt("NewKChan: param==nil")
 
 // NewKChan -- создаёт новый безопасный умный канал.
-func NewKChan[T any](param *KChanParam[T]) core_spec.IChan[T] {
+func NewKChan[T any](param *KChanParam[T]) lev0.IChan[T] {
 	If(param == nil).Hassert(msg2)
 	param.SelfCheck()
 	sf := &KChan[T]{
@@ -72,13 +70,13 @@ func (sf *KChan[T]) Read() *lev0.Result[T] {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	if len(sf.lstMsg) == 0 {
-		err := defs.Err("KChan[T].Read(): empty list msg")
-		return lev0.NewErr[T](err)
+		err := lev0.LetErr("KChan[T].Read(): empty list msg")
+		return lev0.ResErr[T](err)
 	}
 
 	msg := sf.lstMsg[0]
 	sf.lstMsg = sf.lstMsg[1:]
-	return lev0.NewOk(msg)
+	return lev0.ResOk(msg)
 }
 
 // Limit -- ограничение размера канала.

+ 2 - 3
v4/lev2/kctx/kctx.go

@@ -5,7 +5,6 @@ import (
 	"context"
 	"sync"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kernel_keeper"
@@ -66,7 +65,7 @@ func (sf *kCtx) Wg() kspec.IKernelWg {
 // Done -- блокирующий вызов ожидания отмены контекста ядра.
 func (sf *kCtx) Done() {
 	<-sf.ctx.Done()
-	sf.log.Debug(defs.TxtFix("kCtx.Done()"))
+	sf.log.Debug("kCtx.Done()")
 }
 
 // CtxBg -- возвращает неотменяемый контекст ядра (лучше не использовать).
@@ -77,5 +76,5 @@ func (sf *kCtx) CtxBg() context.Context {
 // Cancel -- отменяет контекст ядра.
 func (sf *kCtx) Cancel() {
 	sf.fnCancel()
-	sf.log.Debug(defs.TxtFix("kCtx.Cancel()"))
+	sf.log.Debug("kCtx.Cancel()")
 }

+ 3 - 3
v4/lev2/kctx/kctx_test.go

@@ -3,7 +3,7 @@ package kctx
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 type tester struct {
@@ -17,7 +17,7 @@ func TestKernelCtx(t *testing.T) {
 	sf.new()
 }
 
-var counter = defs.TxtFix("counter")
+var counter = lev0.ATxt("counter")
 
 // Создание контекста ядра.
 func (sf *tester) new() {
@@ -38,7 +38,7 @@ func (sf *tester) new() {
 	}
 	res := kCtx.Get(counter)
 	ctxVal := res.Hassert("new()")
-	val := ctxVal.Val().(defs.Int)
+	val := ctxVal.Val().(lev0.Int)
 	if val != 5 {
 		sf.t.Fatalf("new(): counter(%v)!=5", val)
 	}

+ 5 - 6
v4/lev2/kern_ent/stream_name/stream_name.go

@@ -1,20 +1,19 @@
 package stream_name
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 // AStreamName -- имя потока для ожидания.
 type AStreamName struct {
-	defs.ITxtFix
+	*lev0.LTxt
 }
 
 // NewAStreamName -- создать новое имя потока.
-func NewAStreamName(val defs.ITxtFix) *AStreamName {
-	helpers.If(val.Get() == "").Hassert("NewAStreamName(): val is empty")
+func NewAStreamName(val lev0.ATxt) *AStreamName {
+	lev0.If(val == "").Hassert("NewAStreamName(): val is empty")
 	sf := &AStreamName{
-		ITxtFix: val,
+		LTxt: lev0.LetTxt(val),
 	}
 	return sf
 }

+ 12 - 13
v4/lev2/kernel_keeper/kernel_keeper.go

@@ -8,8 +8,7 @@ import (
 	"sync"
 	"syscall"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
@@ -29,7 +28,7 @@ type kernelKeeper struct {
 var (
 	kernKeep *kernelKeeper
 	block    sync.Mutex
-	qName    = stream_name.NewAStreamName(defs.TxtFix("kernel_keeper"))
+	qName    = stream_name.NewAStreamName("kernel_keeper")
 )
 
 // GetKernelKeeper -- возвращает новый сторож системных сигналов.
@@ -38,16 +37,16 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(),
 	block.Lock()
 	defer block.Unlock()
 	if kernKeep != nil {
-		kernKeep.log.Debug(defs.TxtFix("GetKernelKeeper()"))
+		kernKeep.log.Debug("GetKernelKeeper()")
 		return kernKeep
 	}
-	helpers.If(ctx == nil).Hassert("NewKernelCtx(): ctx==nil", []any{})
-	helpers.If(wg == nil).Hassert("NewKernelCtx(): IKernelWg==nil", []any{})
-	helpers.If(fnCancel == nil).Hassert("NewKernelCtx(): fnCancel==nil", []any{})
+	lev0.If(ctx == nil).Hassert("NewKernelCtx(): ctx==nil", []any{})
+	lev0.If(wg == nil).Hassert("NewKernelCtx(): IKernelWg==nil", []any{})
+	lev0.If(fnCancel == nil).Hassert("NewKernelCtx(): fnCancel==nil", []any{})
 
 	paramLogBuf := &mL1.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: defs.TxtFix("kernelKeeper"),
+		Prefix_: lev0.LetTxt("kernelKeeper"),
 	}
 
 	sf := &kernelKeeper{
@@ -57,7 +56,7 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(),
 		log:      mL1.NewLogBuf(paramLogBuf),
 		chSys_:   make(chan os.Signal, 2),
 	}
-	sf.log.Debug(defs.TxtFix("GetKernelKeeper(): first run"))
+	sf.log.Debug("GetKernelKeeper(): first run")
 	sf.wg.Add(qName)
 
 	go sf.run(sf.chSys_)
@@ -73,7 +72,7 @@ func (sf *kernelKeeper) Log() comp_spec.ILogBuf {
 
 // Работает в отдельном потоке и ждёт сигналов прерываний работы.
 func (sf *kernelKeeper) run(chSys chan os.Signal) {
-	sf.log.Debug(defs.TxtFix("run()"))
+	sf.log.Debug("run()")
 
 	// Регистрируем сигналы SIGINT (Ctrl+C) и SIGTERM (завершение процесса)
 	// syscall.SIGHUP: Сигнал, отправляемый при закрытии терминала.
@@ -81,11 +80,11 @@ func (sf *kernelKeeper) run(chSys chan os.Signal) {
 	signal.Notify(chSys, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT)
 	select {
 	case sig := <-chSys: // системный сигнал
-		sf.log.Debug(defs.TxtFix("run(): system signal, sig=%v\n"), sig)
+		sf.log.Debug("run(): system signal, sig=%v\n", sig)
 		sf.fnCancel()
 	case <-sf.ctx.Done(): // сигнал от приложения
-		sf.log.Debug(defs.TxtFix("run(): cancel app context, err=\n\t%v\n"), sf.ctx.Err())
+		sf.log.Debug("run(): cancel app context, err=\n\t%v\n", sf.ctx.Err())
 	}
 	sf.wg.Done(qName)
-	sf.log.Debug(defs.TxtFix("run(): end"))
+	sf.log.Debug("run(): end")
 }

+ 17 - 17
v4/lev2/kmodule/kmodule.go

@@ -5,10 +5,6 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
@@ -28,14 +24,14 @@ type kModule struct {
 	ctx       comp_spec.ILocalCtx
 	name      module_name.IModuleNameFix
 	bus       bus_spec.IKernelBus
-	timePhase core_spec.ISafeInt
-	strLive   core_spec.ISafeString
+	timePhase lev0.ISafeInt
+	strLive   lev0.ISafeString
 	stat      mod_spec.IModuleStat
 }
 
 // NewKernelModule -- возвращает новый модуль на основе ядра.
 func NewKernelModule(name module_name.IModuleNameFix) mod_spec.IKernelModule {
-	helpers.If(name == nil).Hassert("NewKernelModule(): name==nil", []any{})
+	lev0.If(name == nil).Hassert("NewKernelModule(): name==nil", []any{})
 	kCtx := kctx.GetKernelCtx()
 	sf := &kModule{
 		kCtx:      kCtx,
@@ -67,7 +63,9 @@ func (sf *kModule) Ctx() comp_spec.ILocalCtx {
 
 // Run -- запускает модуль в работу.
 func (sf *kModule) Run() {
-	helpers.If(true).Hassert("kModule.Run(): module='%v', parent not realized this method", []any{sf.name})
+	lev0.If(true).
+		Hassert("kModule.Run(): module='%v', parent not realized this method",
+			[]any{sf.name})
 }
 
 // Name -- возвращает уникальное имя модуля.
@@ -76,21 +74,23 @@ func (sf *kModule) Name() module_name.IModuleNameFix {
 }
 
 // IsWork -- возвращает признак состояния работы.
-func (sf *kModule) IsWork() core_spec.EBool {
-	helpers.If(true).Hassert("kModule.IsWork(): module='%v', parent not realized this method", []any{sf.name})
-	return ebool.NewEBool(false)
+func (sf *kModule) IsWork() lev0.Bool {
+	lev0.If(true).
+		Hassert("kModule.IsWork(): module='%v', parent not realized this method",
+			[]any{sf.name})
+	return false
 }
 
 // Live -- возвращает индикатор жизни модуля.
-func (sf *kModule) Live() defs.ITxtFix {
+func (sf *kModule) Live() *lev0.LTxt {
 	return sf.strLive.Get()
 }
 
 var (
-	f0 = defs.TxtFix("|")
-	f1 = defs.TxtFix("/")
-	f2 = defs.TxtFix("-")
-	f3 = defs.TxtFix("\\")
+	f0 = lev0.ATxt("|")
+	f1 = lev0.ATxt("/")
+	f2 = lev0.ATxt("-")
+	f3 = lev0.ATxt("\\")
 )
 
 // Сигнал жизни, каждые 5 сек публикует в шину метку.
@@ -98,7 +98,7 @@ func (sf *kModule) sigLive() {
 	var (
 		topic  = bus_ent.ITopicFix(topic.NewTopic(bus_ent.ATopic(sf.name.Get()) + "_live"))
 		iPhase = 0
-		res    *lev0.Result[core_spec.EBool]
+		res    *lev0.Result[lev0.Bool]
 	)
 	fnPhase := func() {
 		time.Sleep(time.Millisecond * time.Duration(sf.timePhase.Get()))

+ 12 - 12
v4/lev2/kmodule/mod_stat/mod_stat_day/mod_stat_day.go

@@ -10,30 +10,30 @@ import (
 	"time"
 
 	svg "github.com/ajstarks/svgo"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 // ModStatDay -- статистика модуля за первые 24 часа.
 type ModStatDay struct {
 	sync.RWMutex
-	lst    []defs.Int // Список значений за первые 24 часа
+	lst    []lev0.Int // Список значений за первые 24 часа
 	bufSvg *bytes.Buffer
 }
 
 // NewModStatDay -- возвращает новую статистику модуля за первые 24 часа.
 func NewModStatDay() *ModStatDay {
 	sf := &ModStatDay{
-		lst:    []defs.Int{},
+		lst:    []lev0.Int{},
 		bufSvg: bytes.NewBufferString(""),
 	}
 	return sf
 }
 
 // Sum -- возвращает сумму элементов по требованию.
-func (sf *ModStatDay) Sum() defs.Int {
+func (sf *ModStatDay) Sum() lev0.Int {
 	sf.RLock()
 	defer sf.RUnlock()
-	sum := defs.Int(0)
+	sum := lev0.Int(0)
 	for _, val := range sf.lst {
 		sum += val
 	}
@@ -41,7 +41,7 @@ func (sf *ModStatDay) Sum() defs.Int {
 }
 
 // Add -- добавляет значение в часовой срез.
-func (sf *ModStatDay) Add(val defs.Int) {
+func (sf *ModStatDay) Add(val lev0.Int) {
 	sf.Lock()
 	defer sf.Unlock()
 
@@ -56,7 +56,7 @@ func (sf *ModStatDay) Add(val defs.Int) {
 }
 
 // Svg -- возвращает сгенерированный SVG по часовому срезу.
-func (sf *ModStatDay) Svg() defs.ITxtFix {
+func (sf *ModStatDay) Svg() *lev0.LTxt {
 	sf.RLock()
 	defer sf.RUnlock()
 	sf.bufSvg.Reset()
@@ -74,10 +74,10 @@ func (sf *ModStatDay) Svg() defs.ITxtFix {
 	sf.drawNet(valMin, valMax, cnv)
 	cnv.End()
 	strOut := sf.bufSvg.String()
-	return defs.TxtFix(strOut)
+	return lev0.LetTxt(strOut)
 }
 
-func (sf *ModStatDay) drawNet(valMin, valMax defs.Int, cnv *svg.SVG) {
+func (sf *ModStatDay) drawNet(valMin, valMax lev0.Int, cnv *svg.SVG) {
 	// Метки величины
 	if valMin == math.MaxInt64 || valMin == math.MinInt64 {
 		valMin = 0
@@ -127,10 +127,10 @@ func (sf *ModStatDay) drawNet(valMin, valMax defs.Int, cnv *svg.SVG) {
 }
 
 // Вычисляет максимальное и минимальное значение в графике.
-func (sf *ModStatDay) getMinNax() (defs.Int, defs.Int) {
+func (sf *ModStatDay) getMinNax() (lev0.Int, lev0.Int) {
 	var (
-		valMin = defs.Int(math.MaxInt64)
-		valMax = defs.Int(math.MinInt64)
+		valMin = lev0.Int(math.MaxInt64)
+		valMax = lev0.Int(math.MinInt64)
 	)
 	for _, val := range sf.lst {
 		if val < valMin {

+ 10 - 10
v4/lev2/kmodule/mod_stat/mod_stat_minute/mod_stat_minute.go

@@ -10,30 +10,30 @@ import (
 	"time"
 
 	svg "github.com/ajstarks/svgo"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 // ModStatMinutes -- статистика модуля за первые 60 мин.
 type ModStatMinutes struct {
 	sync.RWMutex
-	lst    []defs.Int // Список значений за последние 60 мин
+	lst    []lev0.Int // Список значений за последние 60 мин
 	bufSvg *bytes.Buffer
 }
 
 // NewModStatMinute -- возвращает новую статистику модуля за последние 60 мин.
 func NewModStatMinute() *ModStatMinutes {
 	sf := &ModStatMinutes{
-		lst:    []defs.Int{},
+		lst:    []lev0.Int{},
 		bufSvg: bytes.NewBufferString(""),
 	}
 	return sf
 }
 
 // Sum -- возвращает сумму элементов по требованию.
-func (sf *ModStatMinutes) Sum() defs.Int {
+func (sf *ModStatMinutes) Sum() lev0.Int {
 	sf.RLock()
 	defer sf.RUnlock()
-	sum := defs.Int(0)
+	sum := lev0.Int(0)
 	for _, val := range sf.lst {
 		sum += val
 	}
@@ -41,7 +41,7 @@ func (sf *ModStatMinutes) Sum() defs.Int {
 }
 
 // Add -- добавляет значение в часовой срез.
-func (sf *ModStatMinutes) Add(val defs.Int) {
+func (sf *ModStatMinutes) Add(val lev0.Int) {
 	sf.Lock()
 	defer sf.Unlock()
 
@@ -56,7 +56,7 @@ func (sf *ModStatMinutes) Add(val defs.Int) {
 }
 
 // Svg -- возвращает сгенерированный SVG по часовому срезу.
-func (sf *ModStatMinutes) Svg() defs.ITxtFix {
+func (sf *ModStatMinutes) Svg() *lev0.LTxt {
 	sf.RLock()
 	defer sf.RUnlock()
 	sf.bufSvg.Reset()
@@ -66,8 +66,8 @@ func (sf *ModStatMinutes) Svg() defs.ITxtFix {
 	cnv.Desc("Graphic of last 60 minute")
 	cnv.Text(20, 20, "Last 60 minute", "")
 	var (
-		valMin = defs.Int(math.MaxInt64)
-		valMax = defs.Int(math.MinInt64)
+		valMin = lev0.Int(math.MaxInt64)
+		valMax = lev0.Int(math.MinInt64)
 	)
 	fnGetMinMax := func() { // Вычисляет максимальное и минимальное значение в графике
 		for _, val := range sf.lst {
@@ -88,7 +88,7 @@ func (sf *ModStatMinutes) Svg() defs.ITxtFix {
 	sf.drawNet(valMin, valMax, cnv)
 	cnv.End()
 	strOut := sf.bufSvg.String()
-	return defs.TxtFix(strOut)
+	return lev0.LetTxt(strOut)
 }
 
 func (sf *ModStatMinutes) drawNet(valMin, valMax defs.Int, cnv *svg.SVG) {

+ 11 - 12
v4/lev2/kmodule/mod_stat/mod_stat_sec/mod_stat_sec.go

@@ -10,14 +10,13 @@ import (
 	"time"
 
 	svg "github.com/ajstarks/svgo"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 // ModStatSec -- статистика модуля за первые 60 сек.
 type ModStatSec struct {
 	sync.RWMutex
-	lst      []defs.Int // Список значений за последние 60 сек
+	lst      []lev0.Int // Список значений за последние 60 сек
 	momentAt int64      // Метка времени для учёта текущей секунды
 	bufSvg   *bytes.Buffer
 }
@@ -25,7 +24,7 @@ type ModStatSec struct {
 // NewModStatSec -- возвращает новую статистику модуля за последние 60 сек.
 func NewModStatSec() *ModStatSec {
 	sf := &ModStatSec{
-		lst:      []defs.Int{},
+		lst:      []lev0.Int{},
 		bufSvg:   bytes.NewBufferString(""),
 		momentAt: time.Now().Local().Unix(),
 	}
@@ -33,10 +32,10 @@ func NewModStatSec() *ModStatSec {
 }
 
 // Sum -- возвращает сумму элементов по требованию.
-func (sf *ModStatSec) Sum() defs.Int {
+func (sf *ModStatSec) Sum() lev0.Int {
 	sf.RLock()
 	defer sf.RUnlock()
-	sum := defs.Int(0)
+	sum := lev0.Int(0)
 	for _, val := range sf.lst {
 		sum += val
 	}
@@ -44,7 +43,7 @@ func (sf *ModStatSec) Sum() defs.Int {
 }
 
 // Add -- добавляет значение в минутный срез.
-func (sf *ModStatSec) Add(val defs.Int) {
+func (sf *ModStatSec) Add(val lev0.Int) {
 	sf.Lock()
 	defer sf.Unlock()
 
@@ -74,7 +73,7 @@ func (sf *ModStatSec) Add(val defs.Int) {
 // )
 
 // Svg -- возвращает сгенерированный SVG по минутному срезу.
-func (sf *ModStatSec) Svg() core_spec.LTime {
+func (sf *ModStatSec) Svg() *lev0.LTxt {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.bufSvg.Reset()
@@ -86,8 +85,8 @@ func (sf *ModStatSec) Svg() core_spec.LTime {
 	cnv.Text(20, 20, "Last 60 sec", "")
 	// cnv.Circle(250, 250, 125, "fill:none;stroke:black")
 	var (
-		valMin = defs.Int(math.MaxInt64)
-		valMax = defs.Int(math.MinInt64)
+		valMin = lev0.Int(math.MaxInt64)
+		valMax = lev0.Int(math.MinInt64)
 	)
 	fnGetMinMax := func() { // Вычисляет максимальное и минимальное значение в графике
 		for _, val := range sf.lst {
@@ -109,10 +108,10 @@ func (sf *ModStatSec) Svg() core_spec.LTime {
 	cnv.End()
 	strOut := sf.bufSvg.String()
 	// strOut = strings.ReplaceAll(strOut, strCut, "")
-	return defs.TxtFix(strOut)
+	return lev0.LetTxt(strOut)
 }
 
-func (sf *ModStatSec) drawNet(valMin, valMax defs.Int, cnv *svg.SVG) {
+func (sf *ModStatSec) drawNet(valMin, valMax lev0.Int, cnv *svg.SVG) {
 	// Метки величины
 	if valMin == math.MaxInt64 {
 		valMin = 0

+ 22 - 25
v4/lev2/kmonolit/kmonolit.go

@@ -4,10 +4,7 @@ package kmonolit
 import (
 	"sync"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
-	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
@@ -22,9 +19,9 @@ type kMonolit struct {
 	lCtx    comp_spec.ILocalCtx
 	log     comp_spec.ILogBuf
 	name    mod_ent.AModuleName
-	isLocal core_spec.EBool
-	isWork  core_spec.ISafeBool
-	isEnd   core_spec.ISafeBool
+	isLocal *lev0.LBool
+	isWork  lev0.ISafeBool
+	isEnd   lev0.ISafeBool
 	dict    map[mod_ent.AModuleName]mod_spec.IKernelModule // Словарь модулей монолита
 }
 
@@ -34,7 +31,7 @@ var (
 )
 
 var (
-	txtIsLocal = defs.TxtFix("isLocal")
+	txtIsLocal = lev0.ATxt("isLocal")
 )
 
 // GetMonolit -- возвращает монолит.
@@ -44,12 +41,12 @@ func GetMonolit(name mod_ent.AModuleName) *kMonolit {
 	if mon != nil {
 		return mon
 	}
-	mKh.If(name == "").Hassert("NewMonolit(): name is empty")
+	lev0.If(name == "").Hassert("NewMonolit(): name is empty")
 	kCtx := kctx.GetKernelCtx()
 	opt := kCtx.Get(txtIsLocal)
 	opt.Hassert("GetMonolit(): in get from kernCtx isLocal -- not found")
 	isLocalCtx := opt.Some()
-	isLocal := isLocalCtx.Val().(defs.Bool)
+	isLocal := isLocalCtx.Val().(lev0.Bool)
 	lCtx := mL1.NewLocalCtx(kCtx.Ctx())
 	sf := &kMonolit{
 		kCtx:    kCtx,
@@ -58,11 +55,11 @@ func GetMonolit(name mod_ent.AModuleName) *kMonolit {
 		dict:    map[mod_ent.AModuleName]mod_spec.IKernelModule{},
 		isWork:  mL1.NewSafeBool(false),
 		isEnd:   mL1.NewSafeBool(false),
-		isLocal: ebool.NewEBool(isLocal),
+		isLocal: lev0.LetBool(isLocal),
 	}
 	sf.log = sf.lCtx.Log()
-	sf.kCtx.Set(defs.TxtFix("monolitName"), name, defs.TxtFix("name of monolit"))
-	sf.kCtx.Set(defs.TxtFix("monolit"), sf, defs.TxtFix("monolit-app"))
+	sf.kCtx.Set("monolitName", name, "name of monolit")
+	sf.kCtx.Set("monolit", sf, "monolit-app")
 	mon = sf
 	_ = mod_spec.IKernelMonolit(sf)
 	return sf
@@ -87,19 +84,19 @@ func (sf *kMonolit) Name() mod_ent.AModuleName {
 func (sf *kMonolit) Add(module mod_spec.IKernelModule) {
 	sf.kCtx.RLock()
 	defer sf.kCtx.RUnlock()
-	mKh.If(module == nil).Hassert("kMonolit.Add(): module==nil", []any{})
+	lev0.If(module == nil).Hassert("kMonolit.Add(): module==nil", []any{})
 	_, isOk := sf.dict[module.Name().Get()]
-	mKh.If(defs.Bool(isOk)).Hassert("kMonolit.Add(): module(%v) already exists", []any{module.Name()})
+	lev0.If(lev0.Bool(isOk)).Hassert("kMonolit.Add(): module(%v) already exists", []any{module.Name()})
 	sf.dict[module.Name().Get()] = module
-	sf.log.Debug(defs.TxtFix("kMonolit.Add(): module='%v'", module.Name()))
+	sf.log.Debug("kMonolit.Add(): module='%v'", module.Name())
 	if sf.isWork.Get() {
 		go module.Run()
-		sf.log.Debug(defs.TxtFix("kMonolit.Add(): module='%v' is run", module.Name()))
+		sf.log.Debug("kMonolit.Add(): module='%v' is run", module.Name())
 	}
-	key := defs.TxtFix("module_%v", len(sf.dict))
+	key := lev0.LetTxt("module_%v", len(sf.dict))
 	moduleName := module.Name()
-	comment := defs.TxtFix("kMonolit.Add(): module=" + moduleName.Txt().Get())
-	sf.lCtx.Set(key, module, comment)
+	comment := lev0.LetTxt("kMonolit.Add(): module=" + moduleName.Txt().Get())
+	sf.lCtx.Set(key.Get(), module, comment.Get())
 }
 
 // Run -- запускает монолит в работу.
@@ -116,18 +113,18 @@ func (sf *kMonolit) Run() {
 	for _, module := range sf.dict {
 		go module.Run()
 	}
-	sf.log.Debug(defs.TxtFix("kMonolit.Run()"))
+	sf.log.Debug("kMonolit.Run()")
 }
 
 // IsLocal -- возвращает признак локальной шины.
-func (sf *kMonolit) IsLocal() core_spec.EBool {
+func (sf *kMonolit) IsLocal() *lev0.LBool {
 	return sf.isLocal
 }
 
 // IsWork -- возвращает признак работы монолита.
-func (sf *kMonolit) IsWork() core_spec.EBool {
+func (sf *kMonolit) IsWork() *lev0.LBool {
 	res := sf.isWork.Get()
-	return ebool.NewEBool(res)
+	return lev0.LetBool(res)
 }
 
 // Ожидание завершения работы монолита.
@@ -138,5 +135,5 @@ func (sf *kMonolit) Wait() {
 	defer sf.kCtx.Unlock()
 	sf.isWork.Reset()
 	sf.isEnd.Set()
-	sf.log.Debug(defs.TxtFix("kMonolit.close(): end"))
+	sf.log.Debug("kMonolit.close(): end")
 }

+ 2 - 2
v4/lev2/kmonolit/kmonolit_test.go

@@ -100,7 +100,7 @@ func (sf *tester) new() {
 	sf.newGood1()
 }
 
-var txIsLocal = defs.TxtFix("isLocal")
+var txIsLocal = defs.ATxt("isLocal")
 
 func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
@@ -110,7 +110,7 @@ func (sf *tester) newGood1() {
 		}
 	}()
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set(txIsLocal, true, defs.TxtFix("type bus"))
+	kCtx.Set(txIsLocal, true, "type bus")
 	for {
 		time.Sleep(time.Millisecond * 1)
 		if kCtx.Get(txIsLocal) != nil {

+ 24 - 28
v4/lev2/kserv_http/kserv_http.go

@@ -16,10 +16,7 @@ import (
 	"github.com/gofiber/fiber/v3/middleware/compress"
 	"github.com/gofiber/fiber/v3/middleware/static"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
@@ -29,7 +26,7 @@ import (
 )
 
 var (
-	msg0       = defs.TxtFix("kernel_server_http")
+	msg0       = lev0.ATxt("kernel_server_http")
 	streamName = stream_name.NewAStreamName(msg0) // Контрольная строка для ожидателя потока
 )
 
@@ -38,10 +35,10 @@ type kServHttp struct {
 	kCtx     kspec.IKernelCtx
 	lCtx     comp_spec.ILocalCtx
 	log      comp_spec.ILogBuf
-	strUrl   defs.ITxtFix // URL, на котором слушает HTTP-сервер
+	strUrl   *lev0.LTxt // URL, на котором слушает HTTP-сервер
 	fiberApp *fiber.App
-	isWork   core_spec.ISafeBool
-	isEnd    core_spec.ISafeBool
+	isWork   lev0.ISafeBool
+	isEnd    lev0.ISafeBool
 }
 
 //go:embed static/*
@@ -50,20 +47,20 @@ var embedDirStatic embed.FS
 var (
 	kernServHttp *kServHttp
 	block        sync.Mutex
-	If           = helpers.If
+	If           = lev0.If
 )
 
-func getParams() (defs.ITxtFix, comp_spec.ILogBuf, kspec.IKernelCtx) {
+func getParams() (*lev0.LTxt, comp_spec.ILogBuf, kspec.IKernelCtx) {
 	param := &log_buf.LogBufParam{
 		IsTerm_: mL1.NewSafeBool(true),
-		Prefix_: defs.TxtFix("kServHttp"),
+		Prefix_: lev0.LetTxt("kServHttp"),
 	}
 	log := mL1.NewLogBuf(param)
-	log.Debug(defs.TxtFix("GetKernelServHttp(): first run"))
+	log.Debug("GetKernelServHttp(): first run")
 	strLocalUrl := os.Getenv("LOCAL_HTTP_URL")
 	If(strLocalUrl == "").Hassert("getParams(): env LOCAL_HTTP_URL not set")
 	kCtx := kctx.GetKernelCtx()
-	return defs.TxtFix(strLocalUrl), log, kCtx
+	return lev0.LetTxt(strLocalUrl), log, kCtx
 }
 
 // GetKernelServHttp -- возвращает  встроенный HTTP-сервер.
@@ -71,12 +68,12 @@ func GetKernelServHttp() kspec.IKernelServerHttp {
 	block.Lock()
 	defer block.Unlock()
 	if kernServHttp != nil {
-		kernServHttp.log.Debug(defs.TxtFix("GetKernelServHttp()"))
+		kernServHttp.log.Debug("GetKernelServHttp()")
 		return kernServHttp
 	}
 	strLocalUrl, log, kCtx := getParams()
 
-	optMonolit := kCtx.Get(defs.TxtFix("monolitName"))
+	optMonolit := kCtx.Get("monolitName")
 	optMonolit.Hassert("GetKernelServHttp(): not have monolit name from kCtx")
 	strMonolit := optMonolit.Some().Val().(core_spec.LTime)
 	confFiber := fiber.Config{
@@ -110,16 +107,15 @@ func GetKernelServHttp() kspec.IKernelServerHttp {
 		Title: fmt.Sprintf("Страница метрик %q", strMonolit),
 	}))
 	sf.kCtx.Wg().Add(streamName)
-	kCtx.Set(defs.TxtFix("fiberApp"), sf.fiberApp, defs.TxtFix("GetKernelServHttp() internal fiber app"))
+	kCtx.Set("fiberApp", sf.fiberApp, "GetKernelServHttp() internal fiber app")
 	kernServHttp = sf
-	kCtx.Set(defs.TxtFix("kServHttp"), kernServHttp, defs.TxtFix("kServHttp"))
+	kCtx.Set("kServHttp", kernServHttp, "kServHttp")
 	return kernServHttp
 }
 
 // IsWork -- возвращает признак работы.
-func (sf *kServHttp) IsWork() core_spec.EBool {
-	res := sf.isWork.Get()
-	return ebool.NewEBool(res)
+func (sf *kServHttp) IsWork() lev0.Bool {
+	return sf.isWork.Get()
 }
 
 // Log -- возвращает локальный лог.
@@ -142,23 +138,23 @@ func (sf *kServHttp) Run() {
 	if sf.isWork.Get() {
 		return
 	}
-	sf.log.Debug(defs.TxtFix("Run(): url='%v'", sf.strUrl))
+	sf.log.Debug("Run(): url='%v'", sf.strUrl)
 	lstPort := strings.Split(sf.strUrl.String(), ":")
 	strPort := lstPort[len(lstPort)-1]
 	strPort = strings.ReplaceAll(strPort, "/", "")
 	strPort = strings.ReplaceAll(strPort, `"`, "")
-	chErr := make(chan defs.IErr, 2)
+	chErr := make(chan *lev0.LErr, 2)
 	fnListen := func() {
 		defer close(chErr)
 		err := sf.fiberApp.Listen(":" + strPort)
-		chErr <- defs.Err("kServHttp.Run().fnListen(): in listen server on port=%q, err=\n\t%v", strPort, err)
+		chErr <- lev0.LetErr("kServHttp.Run().fnListen(): in listen server on port=%q, err=\n\t%v", strPort, err)
 	}
 	go fnListen()
 	go sf.fnChErr(chErr)
 	fnCheckServer := func() error {
 		client := &http.Client{Timeout: 5 * time.Millisecond}
-		url := defs.TxtFix(sf.strUrl.Get() + "monitor")
-		sf.log.Debug(defs.TxtFix("url=%v", url))
+		url := lev0.LetTxt(sf.strUrl.Get() + "monitor")
+		sf.log.Debug("url=%v", url.Get())
 		var (
 			resp *http.Response
 			err  error
@@ -182,10 +178,10 @@ func (sf *kServHttp) Run() {
 }
 
 // В отдельном потоке ждёт закрытия канала.
-func (sf *kServHttp) fnChErr(chErr <-chan defs.IErr) {
+func (sf *kServHttp) fnChErr(chErr <-chan *lev0.LErr) {
 	err := <-chErr
 	if err.Get() != "<nil>" {
-		err := defs.Err("kServHttp.fnChErr(): in listen, err=\n\t%w", err)
+		err := lev0.LetErr("kServHttp.fnChErr(): in listen, err=\n\t%w", err)
 		sf.log.Err(err)
 		sf.kCtx.Cancel()
 	}
@@ -202,5 +198,5 @@ func (sf *kServHttp) close() {
 	err := sf.fiberApp.Server().Shutdown()
 	If(err != nil).Assert("kServHttp.close(): in close server, err=\n\t%v", err)
 	sf.kCtx.Wg().Done(streamName)
-	sf.log.Debug(defs.TxtFix("close(): end"))
+	sf.log.Debug("close(): end")
 }

+ 4 - 4
v4/lev2/kserv_http/kserv_http_test.go

@@ -5,7 +5,7 @@ import (
 	"testing"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
@@ -43,8 +43,8 @@ func (sf *tester) close() {
 		sf.t.Fatalf("close(): isWork==true")
 	}
 	kernServHttp.Run()
-	chErr := make(chan defs.IErr, 2)
-	chErr <- defs.Err("test err")
+	chErr := make(chan *lev0.LErr, 2)
+	chErr <- lev0.LetErr("test err")
 	close(chErr)
 	kernServHttp.fnChErr(chErr)
 }
@@ -80,7 +80,7 @@ func (sf *tester) newGood1() {
 	sf.me = mock_env.MakeEnv()
 	_ = os.Unsetenv("LOCAL_HTTP_URL")
 	_ = os.Setenv("LOCAL_HTTP_URL", baseUrl)
-	sf.kCtx.Set(defs.TxtFix("monolitName"), "test_monolit", defs.TxtFix("comment"))
+	sf.kCtx.Set("monolitName", "test_monolit", "comment")
 	serv := GetKernelServHttp().(*kServHttp)
 	if serv != kernServHttp {
 		sf.t.Fatalf("newGood1(): bad IKernelServHttp")

+ 12 - 14
v4/lev2/kserv_http_std/kserv_http_std.go

@@ -8,7 +8,6 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
@@ -21,7 +20,7 @@ import (
 type kServHttpStd struct {
 	kCtx   kspec.IKernelCtx
 	log    comp_spec.ILogBuf
-	port   defs.Int
+	port   lev0.LInt
 	server *http.Server
 }
 
@@ -35,23 +34,23 @@ func GetKservHttpStd() *lev0.Result[*kServHttpStd] {
 	mu.Lock()
 	defer mu.Unlock()
 	if kServ != nil {
-		return lev0.NewOk(kServ)
+		return lev0.ResOk(kServ)
 	}
 	logBufParam := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: defs.TxtFix("kServHttpStd"),
+		Prefix_: lev0.LetTxt("kServHttpStd"),
 	}
 	log := mL1.NewLogBuf(logBufParam)
-	log.Debug(defs.TxtFix("GetKservHttpStd()"))
-	resPort := mL1.NewSafeIntGetenv(defs.TxtFix("SERV_HTTP_STD_PORT"))
+	log.Debug("GetKservHttpStd()")
+	resPort := mL1.NewSafeIntGetenv(lev0.LetTxt("SERV_HTTP_STD_PORT"))
 	resPort.Hassert("in get env SERV_HTTP_STD_PORT")
 	sf := &kServHttpStd{
 		kCtx: kctx.GetKernelCtx(),
 		log:  log,
-		port: resPort.Ok().Get(),
+		port: resPort.Ok(),
 	}
 	kServ = sf
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // Run -- запускает сервер вы работу.
@@ -65,20 +64,19 @@ func (sf *kServHttpStd) Run() {
 	}
 	// Запуск сервера в горутине
 	go func() {
-		msg := defs.TxtFix("kServHttpStd.Run().fn(): run on http://%v", sf.server.Addr)
-		sf.log.Debug(msg)
+		msg := lev0.LetTxt("kServHttpStd.Run().fn(): run on http://%v", sf.server.Addr)
+		sf.log.Debug(msg.Get())
 		if err := sf.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
-			err := defs.Err("kServHttpStd.Run.fn(): in work, err=\n\t%v", err)
+			err := lev0.LetErr("kServHttpStd.Run.fn(): in work, err=\n\t%v", err)
 			sf.log.Err(err)
 		}
 	}()
 	go sf.close()
 	if err := sf.server.Shutdown(sf.kCtx.Ctx()); err != nil {
-		msgErr := defs.TxtFix("kServHttpStd.Run(): ошибка при graceful shutdown, err=\n\t%v", err)
-		sf.log.Debug(msgErr)
+		sf.log.Debug("kServHttpStd.Run(): ошибка при graceful shutdown, err=\n\t%v", err)
 	}
 
-	sf.log.Info(defs.TxtFix("Сервер остановлен"))
+	sf.log.Info("Сервер остановлен")
 }
 
 func (sf *kServHttpStd) close() {

+ 3 - 4
v4/lev2/kspec/ikernel_wg.go

@@ -1,8 +1,7 @@
 package kspec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 )
@@ -16,11 +15,11 @@ type IKernelWg interface {
 	// Wait -- ожидает завершения работы всех потоков
 	Wait()
 	// IsWork -- признак работы ожидателя потоков (после закрытия добавлять нельзя)
-	IsWork() core_spec.EBool
+	IsWork() lev0.Bool
 	// List -- возвращает список имён потоков на ожидании
 	List() []*stream_name.AStreamName
 	// Len -- возвращает размер списка потоков ожидания
-	Len() defs.Int
+	Len() lev0.Int
 	// Log -- возвращает логгер ожидателя групп
 	Log() comp_spec.ILogBuf
 }

+ 18 - 24
v4/lev2/kwg/kwg.go

@@ -8,10 +8,7 @@ import (
 	"sync"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
-	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
@@ -24,8 +21,8 @@ import (
 type kernelWg struct {
 	sync.RWMutex
 	ctx        context.Context
-	dictStream map[*stream_name.AStreamName]bool // Словарь имён потоков с признаком работы
-	isWork     core_spec.ISafeBool
+	dictStream map[*stream_name.AStreamName]lev0.Bool // Словарь имён потоков с признаком работы
+	isWork     lev0.ISafeBool
 	log        comp_spec.ILogBuf
 }
 
@@ -39,21 +36,21 @@ func GetKernelWg(ctx context.Context) kspec.IKernelWg {
 	block.Lock()
 	defer block.Unlock()
 	if kernWg != nil {
-		kernWg.log.Debug(defs.TxtFix("GetKernelWg()"))
+		kernWg.log.Debug("GetKernelWg()")
 		return kernWg
 	}
-	mKh.If(ctx == nil).Hassert("GetKernelWg(): ctx==nil")
+	lev0.If(ctx == nil).Hassert("GetKernelWg(): ctx==nil")
 	paramLogBuf := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: defs.TxtFix("kernelWg"),
+		Prefix_: lev0.LetTxt("kernelWg"),
 	}
 	sf := &kernelWg{
 		ctx:        ctx,
-		dictStream: map[*stream_name.AStreamName]bool{},
+		dictStream: map[*stream_name.AStreamName]lev0.Bool{},
 		isWork:     mL1.NewSafeBool(false),
 		log:        mL1.NewLogBuf(paramLogBuf),
 	}
-	sf.log.Debug(defs.TxtFix("GetKernelWg(): run"))
+	sf.log.Debug("GetKernelWg(): run")
 	go sf.close()
 	sf.isWork.Set()
 	kernWg = sf
@@ -66,16 +63,15 @@ func (sf *kernelWg) Log() comp_spec.ILogBuf {
 }
 
 // Len -- возвращает размер списка ожидания потоков.
-func (sf *kernelWg) Len() defs.Int {
+func (sf *kernelWg) Len() lev0.Int {
 	sf.RLock()
 	defer sf.RUnlock()
-	return defs.Int(len(sf.dictStream))
+	return lev0.Int(len(sf.dictStream))
 }
 
 // IsWork -- возвращает признак работы ядра.
-func (sf *kernelWg) IsWork() core_spec.EBool {
-	res := sf.isWork.Get()
-	return ebool.NewEBool(res)
+func (sf *kernelWg) IsWork() lev0.Bool {
+	return sf.isWork.Get()
 }
 
 // List -- возвращает список имён потоков на ожидании.
@@ -94,8 +90,7 @@ func (sf *kernelWg) Done(name *stream_name.AStreamName) {
 	sf.Lock()
 	defer sf.Unlock()
 	delete(sf.dictStream, name)
-	msg := defs.TxtFix("Done(): stream(%v) done", name)
-	sf.log.Debug(msg)
+	sf.log.Debug("Done(): stream(%v) done", name)
 }
 
 // Wait -- блокирующий вызов; возвращает управление, только когда все потоки завершили работу.
@@ -106,19 +101,18 @@ func (sf *kernelWg) Wait() {
 			break
 		}
 	}
-	sf.log.Debug(defs.TxtFix("Wait(): done"))
+	sf.log.Debug("Wait(): done")
 }
 
 // Add -- добавляет поток в ожидание.
 func (sf *kernelWg) Add(name *stream_name.AStreamName) {
 	sf.Lock()
 	defer sf.Unlock()
-	msg := defs.TxtFix("Add(): stream('%v') done", name)
-	sf.log.Debug(msg)
-	mKh.If(!sf.isWork.Get()).Hassert("Add(): stream=%v, work end", []any{name})
-	mKh.If(name.Get() == "").Hassert("Add(): name stream is empty")
+	sf.log.Debug("Add(): stream('%v') done", name)
+	lev0.If(!sf.isWork.Get()).Hassert("Add(): stream=%v, work end", []any{name})
+	lev0.If(name.Get() == "").Hassert("Add(): name stream is empty")
 	_, isOk := sf.dictStream[name]
-	mKh.If(defs.Bool(isOk)).Hassert("Add(): stream '%v' already exists", name)
+	lev0.If(isOk).Hassert("Add(): stream '%v' already exists", name)
 	sf.dictStream[name] = true
 }
 

+ 2 - 3
v4/lev2/kwg/kwg_test.go

@@ -5,7 +5,6 @@ import (
 	"testing"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
@@ -34,7 +33,7 @@ func TestKernelWG(t *testing.T) {
 }
 
 var (
-	qName = stream_name.NewAStreamName(defs.TxtFix("test_stream"))
+	qName = stream_name.NewAStreamName("test_stream")
 )
 
 // Попытка добавления после закрытия ожидателя.
@@ -94,7 +93,7 @@ func (sf *tester) wait() {
 	sf.fnCancel()
 	for {
 		time.Sleep(time.Millisecond * 10)
-		if sf.wg.IsWork().IsNot() {
+		if sf.wg.IsWork() {
 			break
 		}
 	}

+ 3 - 3
v4/lev2/log_topic/log_topic.go

@@ -21,13 +21,13 @@ func NewLogTopic(topic topic.ITopicFix, client bus_spec.IBusClient) *lev0.Result
 	helpers.If(topic == nil).Hassert("NewLogTopic(): topic==nil", []any{})
 	if client == nil {
 		err := defs.Err("NewLogTopic(): IBusClient==nil")
-		return lev0.NewErr[*LogTopic](err)
+		return lev0.ResErr[*LogTopic](err)
 	}
 	sf := &LogTopic{
 		topic:  topic,
 		client: client,
 	}
-	return lev0.NewOk(sf)
+	return lev0.ResOk(sf)
 }
 
 // Pub -- публикует сообщение в топик.
@@ -35,7 +35,7 @@ func (sf *LogTopic) Pub(binMsg []byte) *lev0.Result[mKs.EBool] {
 	res := sf.client.Publish(sf.topic, binMsg)
 	if res.IsErr() {
 		err := defs.Err("LogTopic.Pub(): in pub with client, err=\n\t%w", res.Err())
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	return res
 }

+ 8 - 8
v4/lev2/lsi/kstore_kv/kstore_kv.go

@@ -92,9 +92,9 @@ func (sf *kStoreKv) Set(rec store_ent.IRecKvFix) *lev0.Result[core_spec.EBool] {
 	if err != nil {
 		err := defs.Err("Set(): key=%v, err=\n\t%w", key, err)
 		sf.log.Err(err)
-		return lev0.NewErr[core_spec.EBool](err)
+		return lev0.ResErr[core_spec.EBool](err)
 	}
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(ebool.NewEBool(true))
 }
 
 // Get -- возвращает значение по ключу.
@@ -115,9 +115,9 @@ func (sf *kStoreKv) Get(key store_ent.IStoreKeyFix) *lev0.Result[[]byte] {
 	if err != nil {
 		err := defs.Err("Get(): key=%v, err=\n\t%v", key, err)
 		sf.log.Err(err)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
-	return lev0.NewOk(binVal)
+	return lev0.ResOk(binVal)
 }
 
 // ByPrefix -- фильтрует ключи по префиксу.
@@ -148,9 +148,9 @@ func (sf *kStoreKv) ByPrefix(prefix store_ent.IStoreKeyFix) *lev0.Result[[]store
 	err := sf.db.View(fnPrefix)
 	if err != nil {
 		err := defs.Err("ByPrefix(): in find, err=\n\t%w", err)
-		return lev0.NewErr[[]store_ent.AStoreKey](err)
+		return lev0.ResErr[[]store_ent.AStoreKey](err)
 	}
-	return lev0.NewOk(lstKey)
+	return lev0.ResOk(lstKey)
 }
 
 // Delete -- удалить ключ из хранилища.
@@ -166,9 +166,9 @@ func (sf *kStoreKv) Delete(key store_ent.IStoreKeyFix) *lev0.Result[core_spec.EB
 	if err != nil {
 		err := defs.Err("Delete(): key=%v, err=\n\t%w", key, err)
 		sf.log.Err(err)
-		return lev0.NewErr[core_spec.EBool](err)
+		return lev0.ResErr[core_spec.EBool](err)
 	}
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(ebool.NewEBool(true))
 }
 
 // Открывает базу при создании.

+ 2 - 2
v4/lev2/lsi/store_ent/dict_rec/dict_rec.go

@@ -54,12 +54,12 @@ func (sf *DictRec) Get(key rec_key.IRecKeyFix) lev0.IOption[rec_kv.IRecKvFix] {
 func (sf *DictRec) Set(rec rec_kv.IRecKvFix) *lev0.Result[core_spec.EBool] {
 	if rec == nil {
 		err := defs.Err("DictRec.Set(): rec is nil")
-		return lev0.NewErr[core_spec.EBool](err)
+		return lev0.ResErr[core_spec.EBool](err)
 	}
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	sf.dict[rec.Key().Get()] = rec
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(ebool.NewEBool(true))
 }
 
 // Del -- удаление значения по ключу.

+ 8 - 6
v4/lev2/lsi/store_ent/rec_key/store_key.go

@@ -2,17 +2,19 @@
 package rec_key
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 // ARecKey -- ключ хранилища.
-type ARecKey def_spec.ATxt
+type ARecKey lev0.ATxt
+
+type IString interface{
+	String()string
+}
 
 // IRecKeyFix -- фиксированный ключ хранилища.
 type IRecKeyFix interface {
-	defs.IString
+	IString
 	// Get -- получить значение ключа хранилища.
 	Get() ARecKey
 	// Byte -- получить значение ключа хранилища в виде байтов.
@@ -26,7 +28,7 @@ type RecKey struct {
 
 // NewRecKey -- создать новый ключ хранилища.
 func NewRecKey(val ARecKey) *RecKey {
-	helpers.If(val == "").Hassert("NewRecKey(): val is empty")
+	lev0.If(string(val) == "").Hassert("NewRecKey(): val is empty")
 	return &RecKey{
 		val: val,
 	}

+ 8 - 12
v4/lev2/lti/bus_ent/handler_name/handler_name.go

@@ -2,33 +2,29 @@
 package handler_name
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 // AHandlerName -- имя функции обработчика.
-type AHandlerName def_spec.ATxt
+type AHandlerName lev0.ATxt
 
 // IHandlerNameFix -- неизменяемое имя функции обработчика.
 type IHandlerNameFix interface {
-	defs.IString
-	// Get -- возвращает имя функции обработчика.
-	Get() AHandlerName
+	lev0.IString[AHandlerName]
 	// Txt -- внутренне представление имени функции обработчика.
-	Txt() defs.ITxtFix
+	Txt() *lev0.LTxt
 }
 
 // HandlerName -- имя функции обработчика.
 type HandlerName struct {
-	val defs.ITxtFix
+	val *lev0.LTxt
 }
 
 // NewHandlerName -- создать новое имя функции обработчика.
 func NewHandlerName(val AHandlerName) *HandlerName {
-	helpers.If(val == "").Assert("NewAHandlerName: val is empty")
+	lev0.If(val == "").Assert("NewAHandlerName: val is empty")
 	sf := &HandlerName{
-		val: defs.TxtFix(val),
+		val: lev0.LetTxt(val),
 	}
 	_ = IHandlerNameFix(sf)
 	return sf
@@ -45,6 +41,6 @@ func (sf *HandlerName) String() string {
 }
 
 // Txt -- внутренне представление имени функции обработчика.
-func (sf *HandlerName) Txt() defs.ITxtFix {
+func (sf *HandlerName) Txt() *lev0.LTxt {
 	return sf.val
 }

+ 6 - 9
v4/lev2/lti/bus_ent/topic/topic.go

@@ -1,18 +1,15 @@
 package topic
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 // ATopic -- имя топика в шине.
-type ATopic defs.ATxt
+type ATopic lev0.ATxt
 
 // ITopicFix -- неизменяемое имя топика в шине.
 type ITopicFix interface {
-	defs.IString
-	// Get -- возвращает имя топика
-	Get() ATopic
+	lev0.IString[ATopic]
 }
 
 // ITopicMut -- изменяемое имя топика в шине.
@@ -29,7 +26,7 @@ type Topic struct {
 
 // NewTopic -- создает новый топик.
 func NewTopic(val ATopic) *Topic {
-	helpers.If(val == "").Hassert("NewTopic(): val is empty")
+	lev0.If(val == "").Hassert("NewTopic(): val is empty")
 	sf := &Topic{
 		val: val,
 	}
@@ -39,7 +36,7 @@ func NewTopic(val ATopic) *Topic {
 
 // String -- строковое представление топика.
 func (sf *Topic) String() string {
-	return defs.TxtFix(sf.val).String()
+	return string(sf.val)
 }
 
 // Get -- получить строковое представление топика.
@@ -49,6 +46,6 @@ func (sf *Topic) Get() ATopic {
 
 // Set -- установить строковое представление топика.
 func (sf *Topic) Set(val ATopic) {
-	helpers.If(val == "").Hassert("Topic.Set(): val is empty")
+	lev0.If(val == "").Hassert("Topic.Set(): val is empty")
 	sf.val = val
 }

+ 6 - 9
v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve.go

@@ -5,9 +5,6 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
@@ -15,7 +12,7 @@ import (
 
 // MockHandlerServe -- мок-обработчик входящих запросов.
 type MockHandlerServe struct {
-	IsBad_ mKs.ISafeBool           // Признак сбоя при вызове
+	IsBad_ lev0.ISafeBool           // Признак сбоя при вызове
 	Msg_   []byte                  // Для обратного вызова
 	Name_  bus_ent.IHandlerNameFix // Уникальное имя мок-обработчика подписки
 	Topic_ bus_ent.ITopicFix       // Имя топика подписки
@@ -24,8 +21,8 @@ type MockHandlerServe struct {
 
 // NewMockHandlerServe -- возвращает новый обработчик подписки.
 func NewMockHandlerServe(topic bus_ent.ITopicFix, name bus_ent.AHandlerName) *MockHandlerServe {
-	mKh.If(topic.Get() == "").Hassert("NewMockHandlerServe(): topic is empty")
-	mKh.If(name == "").Hassert("NewMockHandlerServe(): name is empty")
+	lev0.If(topic.Get() == "").Hassert("NewMockHandlerServe(): topic is empty")
+	lev0.If(name == "").Hassert("NewMockHandlerServe(): name is empty")
 	sf := &MockHandlerServe{
 		Topic_: topic,
 		Name_:  bus_ent.NewHandlerNameFix(name),
@@ -40,11 +37,11 @@ func (sf *MockHandlerServe) FnBack(binMsg []byte) *lev0.Result[[]byte] {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	if sf.IsBad_.Get() {
-		err := defs.Err("FnBack(): isBad==true")
-		return lev0.NewErr[[]byte](err)
+		err := lev0.LetErr("FnBack(): isBad==true")
+		return lev0.ResErr[[]byte](err)
 	}
 	sf.Msg_ = binMsg
-	return lev0.NewOk(binMsg)
+	return lev0.ResOk(binMsg)
 }
 
 // Возвращает уникальное имя обработчика подписки.

+ 1 - 1
v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http_test.go

@@ -7,7 +7,7 @@ import (
 
 	"github.com/gofiber/fiber/v3"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"

+ 6 - 8
v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub.go

@@ -5,9 +5,7 @@ import (
 	"crypto/rand"
 	"sync"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
@@ -20,9 +18,9 @@ type MockHandlerSub struct {
 }
 
 // NewMockHandlerSub -- возвращает новый обработчик подписки.
-func NewMockHandlerSub(topic bus_ent.ITopicFix, localHook defs.ITxtFix) *MockHandlerSub {
-	mKh.If(topic == nil).Hassert("NewMockHandlerSub(): topic is nil")
-	mKh.If(localHook == nil).Hassert("NewMockHandlerSub(): name is empty")
+func NewMockHandlerSub(topic bus_ent.ITopicFix, localHook *lev0.LTxt) *MockHandlerSub {
+	lev0.If(topic == nil).Hassert("NewMockHandlerSub(): topic is nil")
+	lev0.If(localHook == nil).Hassert("NewMockHandlerSub(): name is empty")
 	handlerName := bus_ent.NewHandlerNameFix(bus_ent.AHandlerName(localHook.String() + "_" + rand.Text()))
 	sf := &MockHandlerSub{
 		Topic_: topic,
@@ -33,10 +31,10 @@ func NewMockHandlerSub(topic bus_ent.ITopicFix, localHook defs.ITxtFix) *MockHan
 }
 
 // Возвращает хранимое значение.
-func (sf *MockHandlerSub) Msg() defs.ITxtFix {
+func (sf *MockHandlerSub) Msg() *lev0.LTxt {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
-	return defs.TxtFix(def_spec.ATxt(sf.Msg_))
+	return lev0.LetTxt(lev0.ATxt(sf.Msg_))
 }
 
 // Функция обратного вызова подписки.

+ 5 - 6
v4/lev2/lti/bus_spec/ikernel_bus.go

@@ -2,8 +2,7 @@
 package bus_spec
 
 import (
-		"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
@@ -14,19 +13,19 @@ import (
 //	Подписка и обслуживание входящих запросов требует _обработчиков_.
 type IKernelBus interface {
 	// Publish -- публикует сообщение в шину
-	Publish(topic bus_ent.ITopicFix, binMsg []byte) *lev0.Result[core_spec.EBool]
+	Publish(topic bus_ent.ITopicFix, binMsg []byte) *lev0.Result[lev0.Bool]
 	// SendRequest -- выполняет запрос по указанному топику
 	SendRequest(topic bus_ent.ITopicFix, binReq []byte) *lev0.Result[[]byte]
 
 	// Subscribe -- подписывает обработчик на топик
-	Subscribe(IBusHandlerSubscribe) *lev0.Result[core_spec.EBool]
+	Subscribe(IBusHandlerSubscribe) *lev0.Result[lev0.Bool]
 	// Unsubscribe -- отписывается от топика
 	Unsubscribe(IBusHandlerSubscribe)
 	// RegisterServe -- Регистрирует обработчик на обслуживание входящих запросов
-	RegisterServe(IBusHandlerServe) *lev0.Result[core_spec.EBool]
+	RegisterServe(IBusHandlerServe) *lev0.Result[lev0.Bool]
 
 	// IsWork -- возвращает признак работы шины
-	IsWork() core_spec.EBool
+	IsWork() lev0.Bool
 	// Log -- возвращает буферный лог
 	Log() log_buf.ILogBuf
 }

+ 3 - 3
v4/lev2/lti/dot/msg_pub/msg_pub_test.go

@@ -3,7 +3,7 @@ package msg_pub
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
@@ -24,7 +24,7 @@ func (sf *tester) resp() {
 	sf.t.Log("resp")
 	sf.respBad1()
 	resp := &PublishResp{
-		Status_: defs.TxtFix("test_ok"),
+		Status_: lev0.LetTxt("test_ok"),
 	}
 	resp.SelfCheck()
 }
@@ -51,7 +51,7 @@ func (sf *tester) req() {
 	sf.reqBad1()
 	req := &PublishReq{
 		Topic_:  qName,
-		Uuid_:   defs.TxtFix("test_uuid"),
+		Uuid_:   lev0.LetTxt("test_uuid"),
 		BinMsg_: []byte("test msg"),
 	}
 	req.SelfCheck()

+ 8 - 9
v4/lev2/lti/dot/msg_serve/msg_serve.go

@@ -2,32 +2,31 @@
 package msg_serve
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
 // ServeReq -- входящий запрос на обслуживание.
 type ServeReq struct {
 	Topic_  bus_ent.ATopic `json:"topic"`
-	Uuid_   defs.ITxtFix   `json:"uuid"`
+	Uuid_   *lev0.LTxt     `json:"uuid"`
 	BinReq_ []byte         `json:"req"`
 }
 
 // SelfCheck -- проверяет структуру на правильность полей.
 func (sf *ServeReq) SelfCheck() {
-	mKh.If(sf.Topic_ == "").Hassert("ServeReq.SelfCheck(): topic is empty")
-	mKh.If(sf.Uuid_.Get() == "").Hassert("ServeReq.SelfCheck(): uuid is empty")
+	lev0.If(sf.Topic_ == "").Hassert("ServeReq.SelfCheck(): topic is empty")
+	lev0.If(sf.Uuid_.Get() == "").Hassert("ServeReq.SelfCheck(): uuid is empty")
 }
 
 // ServeResp -- ответ на входящий запрос.
 type ServeResp struct {
-	Status_  defs.ITxtFix `json:"status"`
-	Uuid_    defs.ITxtFix `json:"uuid"`
-	BinResp_ []byte       `json:"resp"`
+	Status_  *lev0.LTxt `json:"status"`
+	Uuid_    *lev0.LTxt `json:"uuid"`
+	BinResp_ []byte     `json:"resp"`
 }
 
 // SelfCheck -- проверяет правильность своих полей.
 func (sf *ServeResp) SelfCheck() {
-	mKh.If(sf.Status_.Get() == "").Hassert("ServeResp.SelfCheck(): status is empty")
+	lev0.If(sf.Status_.Get() == "").Hassert("ServeResp.SelfCheck(): status is empty")
 }

+ 3 - 4
v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go

@@ -4,8 +4,7 @@ package dict_sub_hook
 import (
 	"sync"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
@@ -33,13 +32,13 @@ func (sf *dictSubHook) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	if handler == nil {
-		err := defs.Err("dictSubHook.Unsubscribe(): handler==nil")
+		err := lev0.LetErr("dictSubHook.Unsubscribe(): handler==nil")
 		sf.kCtx.Log().Err(err)
 		return
 	}
 	handlerName := handler.Name()
 	delete(sf.dict, handlerName.Get())
-	sf.kCtx.Del(defs.TxtFix(handler.Name().Get()))
+	sf.kCtx.Del(lev0.LetTxt(handler.Name().Get()))
 }
 
 // Subscribe -- добавляет в словарь подписки новый обработчик.

+ 3 - 3
v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook_test.go

@@ -3,7 +3,7 @@ package dict_sub_hook
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_local"
@@ -24,8 +24,8 @@ var (
 func TestDictSubWebHook(t *testing.T) {
 	sf := &tester{
 		t:        t,
-		handSub:  mock_hand_sub_local.NewMockHandlerSub(qTopicHand1, defs.TxtFix("hand_name1")),
-		handSub2: mock_hand_sub_local.NewMockHandlerSub(qTopicHand2, defs.TxtFix("hand_name2")),
+		handSub:  mock_hand_sub_local.NewMockHandlerSub(qTopicHand1, lev0.LetTxt("hand_name1")),
+		handSub2: mock_hand_sub_local.NewMockHandlerSub(qTopicHand2, lev0.LetTxt("hand_name2")),
 	}
 	sf.new()
 	sf.add()

+ 11 - 14
v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve.go

@@ -7,9 +7,6 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
@@ -35,20 +32,20 @@ func NewDictServe() *dictServe {
 }
 
 // Register -- регистрирует обработчик запросов.
-func (sf *dictServe) Register(handler bus_spec.IBusHandlerServe) *lev0.Result[core_spec.EBool] {
+func (sf *dictServe) Register(handler bus_spec.IBusHandlerServe) *lev0.Result[lev0.Bool] {
 	sf.Lock()
 	defer sf.Unlock()
 	if handler == nil {
-		err := defs.Err("dictServe.Register(): IBusHandlerSubscribe==nil")
-		return lev0.NewErr[core_spec.EBool](err)
+		err := lev0.LetErr("dictServe.Register(): IBusHandlerSubscribe==nil")
+		return lev0.ResErr[lev0.Bool](err)
 	}
 	topic := handler.Topic()
 	isTwinRegister := sf.register(handler)
 	if isTwinRegister {
-		err := defs.Err("dictServe.Register(): handler of topic (%v) already register", topic.Get())
-		return lev0.NewErr[core_spec.EBool](err)
+		err := lev0.LetErr("dictServe.Register(): handler of topic (%v) already register", topic.Get())
+		return lev0.ResErr[lev0.Bool](err)
 	}
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(lev0.Bool(true))
 }
 
 // Unregister -- удаляет обработчик запросов из словаря.
@@ -56,7 +53,7 @@ func (sf *dictServe) Unregister(handler bus_spec.IBusHandlerServe) {
 	sf.Lock()
 	defer sf.Unlock()
 	if handler == nil {
-		err := defs.Err("dictServe.Unregister(): IBusHandlerSubscribe==nil")
+		err := lev0.LetErr("dictServe.Unregister(): IBusHandlerSubscribe==nil")
 		sf.kCtx.Log().Err(err)
 		return
 	}
@@ -69,8 +66,8 @@ func (sf *dictServe) SendRequest(topic bus_ent.ITopicFix, binReq []byte) *lev0.R
 	defer sf.RUnlock()
 	handler, isOk := sf.dictServe[topic.Get()]
 	if !isOk {
-		err := defs.Err("dictServe.SendRequest(): handler for topic (%v) not exists", topic.Get())
-		return lev0.NewErr[[]byte](err)
+		err := lev0.LetErr("dictServe.SendRequest(): handler for topic (%v) not exists", topic.Get())
+		return lev0.ResErr[[]byte](err)
 	}
 	var (
 		chRes = make(chan *lev0.Result[[]byte], 2)
@@ -85,8 +82,8 @@ func (sf *dictServe) SendRequest(topic bus_ent.ITopicFix, binReq []byte) *lev0.R
 	go fnCall()
 	select {
 	case <-ctx.Done():
-		err := defs.Err("dictServe.SendRequest(): in call for topic (%v), err=\n\t%w", topic.Get(), ctx.Err())
-		return lev0.NewErr[[]byte](err)
+		err := lev0.LetErr("dictServe.SendRequest(): in call for topic (%v), err=\n\t%w", topic.Get(), ctx.Err())
+		return lev0.ResErr[[]byte](err)
 	case res := <-chRes:
 		return res
 	}

+ 2 - 3
v4/lev2/lti/kbus/dict_topic_sub/dict_topic_sub_test.go

@@ -4,7 +4,6 @@ import (
 	"testing"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_local"
@@ -27,7 +26,7 @@ var (
 func TestDictSub(t *testing.T) {
 	sf := &tester{
 		t:    t,
-		hand: mock_hand_sub_local.NewMockHandlerSub(qTopicDictSub, defs.TxtFix("name_dict_sub")),
+		hand: mock_hand_sub_local.NewMockHandlerSub(qTopicDictSub, "name_dict_sub"),
 	}
 	sf.new()
 	sf.addBad1()
@@ -46,7 +45,7 @@ func (sf *tester) unsub1() {
 	sf.t.Log("unsub1")
 	sf.dict.Unsubscribe(sf.hand)
 	sf.dict.Read(qTopicTest, []byte("test test"))
-	hand := mock_hand_sub_local.NewMockHandlerSub(qTopicDictSub1, defs.TxtFix("name_dict_sub"))
+	hand := mock_hand_sub_local.NewMockHandlerSub(qTopicDictSub1, "name_dict_sub")
 	sf.dict.Unsubscribe(hand)
 	count := 0
 	for count < 100 {

+ 32 - 35
v4/lev2/lti/kbus_base/kbus_base.go

@@ -5,10 +5,6 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
@@ -21,13 +17,13 @@ import (
 )
 
 var (
-	busBaseStreamName = stream_name.NewAStreamName(defs.TxtFix("bus_base"))
+	busBaseStreamName = stream_name.NewAStreamName(lev0.LetTxt("bus_base"))
 )
 
 // KBusBase -- базовая часть шины данных.
 type KBusBase struct {
 	KCtx_     kspec.IKernelCtx
-	IsWork_   core_spec.ISafeBool
+	IsWork_   lev0.ISafeBool
 	lCtx      comp_spec.ILocalCtx
 	log       comp_spec.ILogBuf
 	dictSub   bus_spec.IDictTopicSub
@@ -60,7 +56,7 @@ func GetKernelBusBase() *KBusBase {
 	go Bus_.run()
 	Bus_.IsWork_.Set()
 	Bus_.KCtx_.Wg().Add(busBaseStreamName)
-	Bus_.KCtx_.Set(defs.TxtFix("kernBusBase"), Bus_, "base of data bus")
+	Bus_.KCtx_.Set("kernBusBase", Bus_, "base of data bus")
 	_ = bus_spec.IKernelBus(Bus_)
 	return Bus_
 }
@@ -71,7 +67,7 @@ func (sf *KBusBase) Log() comp_spec.ILogBuf {
 }
 
 func (sf *KBusBase) run() {
-	sf.log.Debug(defs.TxtFix("KBusBase.run()"))
+	sf.log.Debug("KBusBase.run()")
 	for {
 		break
 	}
@@ -79,74 +75,75 @@ func (sf *KBusBase) run() {
 
 // Unsubscribe -- отписывает обработчик от топика.
 func (sf *KBusBase) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
-	msg := defs.TxtFix("KBusBase.Unsubscribe(): handler='%v'",
+	msg := lev0.LetTxt("KBusBase.Unsubscribe(): handler='%v'",
 		handler.Name())
-	sf.log.Debug(msg)
+	sf.log.Debug(msg.Get())
 	sf.dictSub.Unsubscribe(handler)
 }
 
 // Subscribe -- подписывает обработчик на топик.
-func (sf *KBusBase) Subscribe(handler bus_spec.IBusHandlerSubscribe) *lev0.Result[core_spec.EBool] {
-	msg := defs.TxtFix("KBusBase.Subscribe(): handler='%v'",
-		handler.Name())
+func (sf *KBusBase) Subscribe(handler bus_spec.IBusHandlerSubscribe) *lev0.Result[*lev0.LBool] {
+	msg := lev0.LetTxt("KBusBase.Subscribe(): handler='%v'",
+		handler.Name()).Get()
 	sf.log.Debug(msg)
-	helpers.If(!sf.IsWork_.Get()).Hassert("KBusBase.Subscribe():  handler='%v', bus already closed", []any{handler.Name()})
+	lev0.If(!sf.IsWork_.Get()).Hassert("KBusBase.Subscribe():  handler='%v', bus already closed",
+		[]any{handler.Name()})
 	sf.dictSub.Subscribe(handler)
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(lev0.LetBool(true))
 }
 
 // SendRequest -- отправляет запрос в шину данных.
 func (sf *KBusBase) SendRequest(topic bus_ent.ITopicFix, binReq []byte) *lev0.Result[[]byte] {
-	msg := defs.TxtFix("KBusBase.SendRequest(): topic='%v'", topic.Get())
+	msg := lev0.LetTxt("KBusBase.SendRequest(): topic='%v'", topic.Get()).Get()
 	sf.log.Debug(msg)
 	if !sf.IsWork_.Get() {
-		err := defs.Err("KBusBase.SendRequest():  topic='%v', bus already closed", topic.Get())
+		err := lev0.LetErr("KBusBase.SendRequest():  topic='%v', bus already closed", topic.Get())
 		sf.log.Err(err)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
 	res := sf.dictServe.SendRequest(topic, binReq)
 	if res.IsErr() {
-		err := defs.Err("KBusBase.SendRequest(): topic='%v', err=\n\t%w", topic.Get(), res.Err())
+		err := lev0.LetErr("KBusBase.SendRequest(): topic='%v', err=\n\t%w", topic.Get(), res.Err())
 		sf.log.Err(err)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
 	return res
 }
 
 // RegisterServe -- регистрирует обработчики входящих запросов.
-func (sf *KBusBase) RegisterServe(handler bus_spec.IBusHandlerServe) *lev0.Result[core_spec.EBool] {
+func (sf *KBusBase) RegisterServe(handler bus_spec.IBusHandlerServe) *lev0.Result[lev0.Bool] {
 	if handler == nil {
-		err := defs.Err("KBusBase.RegisterServe(): IBusHandlerServe==nil")
-		return lev0.NewErr[core_spec.EBool](err)
+		err := lev0.LetErr("KBusBase.RegisterServe(): IBusHandlerServe==nil")
+		return lev0.ResErr[*lev0.LBool](err)
 	}
-	msg := defs.TxtFix("KBusBase.RegisterServe(): handler='%v'", handler.Name())
+	msg := lev0.LetTxt("KBusBase.RegisterServe(): handler='%v'", handler.Name()).Get()
 	sf.log.Debug(msg)
 	res := sf.dictServe.Register(handler)
 	if res.IsErr() {
-		err := defs.Err("KBusBase.RegisterServe(): handler='%v', err=\n\t%w", handler.Name(), res.Err())
+		err := lev0.LetErr("KBusBase.RegisterServe(): handler='%v', err=\n\t%w", handler.Name(), res.Err())
 		sf.log.Err(err)
-		return lev0.NewErr[core_spec.EBool](err)
+		return lev0.ResErr[*lev0.LBool](err)
 	}
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(lev0.LetBool(true))
 }
 
 // Publish -- публикует сообщение в шину.
-func (sf *KBusBase) Publish(topic bus_ent.ITopicFix, binMsg []byte) *lev0.Result[core_spec.EBool] {
-	msg := defs.TxtFix("KBusBase.Publish(): topic='%v'", topic)
+func (sf *KBusBase) Publish(topic bus_ent.ITopicFix, binMsg []byte) *lev0.Result[lev0.Bool] {
+	msg := lev0.LetTxt("KBusBase.Publish(): topic='%v'", topic).Get()
 	sf.log.Debug(msg)
 	if !sf.IsWork_.Get() {
-		err := defs.Err("KBusBase.Publish(): topic='%v',bus already closed", topic)
+		err := lev0.LetErr("KBusBase.Publish(): topic='%v',bus already closed", topic)
 		sf.log.Err(err)
-		return lev0.NewErr[core_spec.EBool](err)
+		return lev0.ResErr[lev0.Bool](err)
 	}
 	// Асинхронный запуск чтения
 	go sf.dictSub.Read(topic, binMsg)
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(lev0.Bool(true))
 }
 
 // IsWork -- возвращает признак работы шины.
-func (sf *KBusBase) IsWork() core_spec.EBool {
-	return ebool.NewEBool(sf.IsWork_.Get())
+func (sf *KBusBase) IsWork() *lev0.LBool {
+	return lev0.LetBool(sf.IsWork_.Get())
 }
 
 // Ожидает закрытия шины в отдельном потоке.
@@ -159,5 +156,5 @@ func (sf *KBusBase) close() {
 	}
 	sf.IsWork_.Reset()
 	sf.KCtx_.Wg().Done(busBaseStreamName)
-	sf.log.Debug(defs.TxtFix("KBusBase.close(): done"))
+	sf.log.Debug("KBusBase.close(): done")
 }

+ 20 - 20
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go

@@ -125,21 +125,21 @@ func (sf *ClientBusHttp) Subscribe(handler bus_spec.IBusHandlerSubscribe) *lev0.
 	resBody := sf.makePost(hReq)
 	if resBody.IsErr() {
 		err := defs.Err("ClientBusHttp.Subscribe(): in make POST-request, err=\n\t%w", err)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	resp := &dot.SubscribeResp{}
 	err = json.Unmarshal(resBody.Ok(), resp)
 	if err != nil {
 		err := defs.Err("ClientBusHttp.Subscribe(): in unmarshal response, err=\n\t%v", err)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	if resp.Status_.Get() != "ok" {
 		err := defs.Err("ClientBusHttp.Subscribe(): resp!='ok', err=\n\t%v", resp.Status_)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	if resp.Uuid_ != req.Uuid_ {
 		err := defs.Err("ClientBusHttp.Subscribe(): resp uuid(%v) bad", resp.Uuid_)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	res := sf.bus.Subscribe(handler)
 	return res
@@ -174,31 +174,31 @@ func (sf *ClientBusHttp) SendRequest(topic bus_ent.ITopicFix, binReq []byte) *le
 	err = json.Unmarshal(resBody.Ok(), resp)
 	if err != nil {
 		err := defs.Err("ClientBusHttp.SendRequest(): in unmarshal response, err=\n\t%v", err)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
 	if resp.Status_.Get() != "ok" {
 		err := defs.Err("ClientBusHttp.SendRequest(): resp!='ok', err=\n\t%v", resp.Status_)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
 	if resp.Uuid_ != req.Uuid_ {
 		err := defs.Err("ClientBusHttp.SendRequest(): resp uuid(%v) bad", resp.Uuid_)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
-	return lev0.NewOk(resp.BinResp_)
+	return lev0.ResOk(resp.BinResp_)
 }
 
 // RegisterServe -- регистрирует в локальной шине обработчик.
 func (sf *ClientBusHttp) RegisterServe(handler bus_spec.IBusHandlerServe) *lev0.Result[mKs.EBool] {
 	if handler == nil {
 		err := defs.Err("ClientBusHttp.RegisterServe(): handler==nil")
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	res := sf.bus.RegisterServe(handler)
 	if res.IsErr() {
 		err := defs.Err("ClientBusHttp.RegisterServe(): in register serve to bus, err=\n\t%v", res.Err())
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(ebool.NewEBool(true))
 }
 
 // Publish -- публикует сообщение в дистанционной шину.
@@ -222,23 +222,23 @@ func (sf *ClientBusHttp) Publish(topic bus_ent.ITopicFix, binMsg []byte) *lev0.R
 	resBody := sf.makePost(hReq)
 	if resBody.IsErr() {
 		err := defs.Err("ClientBusHttp.Publish(): in make request, err=\n\t%w", err)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	resp := &dot.PublishResp{}
 	err = json.Unmarshal(resBody.Ok(), resp)
 	if err != nil {
 		err := defs.Err("ClientBusHttp.Publish(): in unmarshal response, err=\n\t%v", err)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	if resp.Status_.Get() != "ok" {
 		err := defs.Err("ClientBusHttp.Publish(): resp!='ok', err=\n\t%v", resp.Status_)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
 	if resp.Uuid_ != req.Uuid_ {
 		err := defs.Err("ClientBusHttp.Publish(): resp uuid(%v) bad", resp.Uuid_)
-		return lev0.NewErr[mKs.EBool](err)
+		return lev0.ResErr[mKs.EBool](err)
 	}
-	return lev0.NewOk(ebool.NewEBool(true))
+	return lev0.ResOk(ebool.NewEBool(true))
 }
 
 // Единый обработчик запросов.
@@ -247,7 +247,7 @@ func (sf *ClientBusHttp) makePost(hReq *http.Request) *lev0.Result[[]byte] {
 	_resp, err := http.DefaultClient.Do(hReq)
 	if err != nil {
 		err := defs.Err("ClientBusHttp.makePost(): after request, err=\n\t%w", err)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
 	defer func() {
 		_ = _resp.Body.Close()
@@ -255,16 +255,16 @@ func (sf *ClientBusHttp) makePost(hReq *http.Request) *lev0.Result[[]byte] {
 	if _resp.StatusCode != http.StatusOK {
 		err := defs.Err("ClientBusHttp.makePost(): url=%q, status=%q",
 			hReq.URL, _resp.Status)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
 
 	binBody, err := io.ReadAll(_resp.Body)
 	if err != nil {
 		err := defs.Err("ClientBusHttp.makePost(): after read body, err=\n\t%v",
 			err)
-		return lev0.NewErr[[]byte](err)
+		return lev0.ResErr[[]byte](err)
 	}
-	return lev0.NewOk(binBody)
+	return lev0.ResOk(binBody)
 }
 
 // Log -- возвращает локальный лог клиента.

+ 27 - 28
v4/lev2/lti/kbus_http/kbus_http.go

@@ -7,7 +7,7 @@ import (
 
 	"github.com/gofiber/fiber/v3"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
@@ -41,10 +41,10 @@ func GetKernelBusHttp() bus_spec.IKernelBus {
 	}
 	paramLogBuf := &mL1.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: defs.TxtFix("kBusHttp"),
+		Prefix_: lev0.LetTxt("kBusHttp"),
 	}
 	log := mL1.NewLogBuf(paramLogBuf)
-	log.Debug(defs.TxtFix("GetKernelBusHttp(): new"))
+	log.Debug("GetKernelBusHttp(): new")
 	kCtx := kctx.GetKernelCtx()
 	kBus := kbus_base.GetKernelBusBase()
 	sf := &kBusHttp{
@@ -57,29 +57,28 @@ func GetKernelBusHttp() bus_spec.IKernelBus {
 	fibApp.Post("/bus/unsub", sf.postUnsub)         // Топик отписки, IN
 	fibApp.Post("/bus/request", sf.postSendRequest) // Топик входящих запросов, IN
 	fibApp.Post("/bus/pub", sf.postPublish)         // Топик публикаций подписки, IN
-	kCtx.Set(defs.TxtFix("kernBus"), sf,
-		"GetKernelBusHttp(): http data bus")
+	kCtx.Set("kernBus", sf, "GetKernelBusHttp(): http data bus")
 	Bus_ = sf
 	return Bus_
 }
 
 // Входящий запрос HTTP на подписку.
 func (sf *kBusHttp) postSub(ctx fiber.Ctx) error {
-	sf.log.Debug(defs.TxtFix("postSub()"))
+	sf.log.Debug("postSub()")
 	ctx.Set("Content-type", "text/html; charset=utf8")
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
-	sf.log.Debug(defs.TxtFix("postSub()"))
+	sf.log.Debug("postSub()")
 	req := &dot.SubscribeReq{}
 	err := ctx.Bind().Body(req)
 	if err != nil {
 		resp := &dot.SubscribeResp{
-			Status_: defs.TxtFix("kernelBusHttp.postSub(): in parse request, err=\n\t%v\n", err),
+			Status_: lev0.LetTxt("kernelBusHttp.postSub(): in parse request, err=\n\t%v\n", err),
 			Uuid_:   req.Uuid_,
 		}
 		resp.SelfCheck()
 		ctx.Response().SetStatusCode(http.StatusBadRequest)
-		err := defs.Err("kBusHttp.postSub(): in body parser, status=%q", resp.Status_)
+		err := lev0.LetErr("kBusHttp.postSub(): in body parser, status=%q", resp.Status_)
 		sf.log.Err(err)
 		return ctx.JSON(resp)
 	}
@@ -94,13 +93,13 @@ func (sf *kBusHttp) processSubscribe(req *dot.SubscribeReq) *dot.SubscribeResp {
 	topic := bus_ent.ITopicFix(topic.NewTopic(req.Topic_))
 	handler := mock_hand_sub_http.NewMockHandSubHttp(topic, req.WebHook_)
 	resp := &dot.SubscribeResp{
-		Status_: defs.TxtFix("ok"),
+		Status_: lev0.LetTxt("ok"),
 		Uuid_:   req.Uuid_,
 		Name_:   handler.Name().Get(),
 	}
 	res := sf.Subscribe(handler)
 	if res.IsErr() {
-		resp.Status_ = defs.TxtFix(
+		resp.Status_ = lev0.LetTxt(
 			"kernelBusHttp.processSubscribe(): err=\n\t%v",
 			res.Err())
 		return resp
@@ -110,18 +109,18 @@ func (sf *kBusHttp) processSubscribe(req *dot.SubscribeReq) *dot.SubscribeResp {
 
 // Входящая публикация.
 func (sf *kBusHttp) postPublish(ctx fiber.Ctx) error {
-	sf.log.Debug(defs.TxtFix("postPublish()"))
+	sf.log.Debug("postPublish()")
 	sf.postCommon(ctx)
 	req := &dot.PublishReq{}
 	err := ctx.Bind().Body(req)
 	if err != nil {
 		resp := &dot.PublishResp{
-			Status_: defs.TxtFix("kernelBusHttp.postPublish(): in parse request, err=\n\t%v\n", err),
+			Status_: lev0.LetTxt("kernelBusHttp.postPublish(): in parse request, err=\n\t%v\n", err),
 			Uuid_:   req.Uuid_,
 		}
 		resp.SelfCheck()
 		ctx.Response().SetStatusCode(http.StatusBadRequest)
-		err := defs.Err("postPublish(): in body parser, status=%v", resp.Status_)
+		err := lev0.LetErr("postPublish(): in body parser, status=%v", resp.Status_)
 		sf.log.Err(err)
 		return ctx.JSON(resp)
 	}
@@ -132,18 +131,18 @@ func (sf *kBusHttp) postPublish(ctx fiber.Ctx) error {
 
 // Входящая отписка от топика по HTTP.
 func (sf *kBusHttp) postUnsub(ctx fiber.Ctx) error {
-	sf.log.Debug(defs.TxtFix("postUnsub()"))
+	sf.log.Debug("postUnsub()")
 	sf.postCommon(ctx)
 	req := &dot.UnsubReq{}
 	err := ctx.Bind().Body(req)
 	if err != nil {
 		resp := &dot.ServeResp{
-			Status_: defs.TxtFix("kernelBusHttp.postSendRequest(): err=\n\t%v", err),
+			Status_: lev0.LetTxt("kernelBusHttp.postSendRequest(): err=\n\t%v", err),
 			Uuid_:   req.Uuid_,
 		}
 		resp.SelfCheck()
 		ctx.Response().SetStatusCode(http.StatusBadRequest)
-		err := defs.Err("kBusHttp.postUnsub(): in body parser, status=%q", resp.Status_)
+		err := lev0.LetErr("kBusHttp.postUnsub(): in body parser, status=%q", resp.Status_)
 		sf.log.Err(err)
 		return ctx.JSON(resp)
 	}
@@ -165,11 +164,11 @@ func (sf *kBusHttp) processPublish(req *dot.PublishReq) *dot.PublishResp {
 	topic := bus_ent.ITopicFix(topic.NewTopic(req.Topic_))
 	res := sf.Publish(topic, req.BinMsg_)
 	resp := &dot.PublishResp{
-		Status_: defs.TxtFix("ok"),
+		Status_: lev0.LetTxt("ok"),
 		Uuid_:   req.Uuid_,
 	}
 	if res.IsErr() {
-		resp.Status_ = defs.TxtFix("kernelBusHttp.processPublish(): err=\n\t%v", res.Err())
+		resp.Status_ = lev0.LetTxt("kernelBusHttp.processPublish(): err=\n\t%v", res.Err())
 		return resp
 	}
 	return resp
@@ -177,7 +176,7 @@ func (sf *kBusHttp) processPublish(req *dot.PublishReq) *dot.PublishResp {
 
 // Входящий запрос.
 func (sf *kBusHttp) postSendRequest(ctx fiber.Ctx) error {
-	sf.log.Debug(defs.TxtFix("postSendRequest()"))
+	sf.log.Debug("postSendRequest()")
 	ctx.Set("Content-type", "text/html; charset=utf8")
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
@@ -185,12 +184,12 @@ func (sf *kBusHttp) postSendRequest(ctx fiber.Ctx) error {
 	err := ctx.Bind().Body(req)
 	if err != nil {
 		resp := &dot.ServeResp{
-			Status_: defs.TxtFix("kernelBusHttp.postSendRequest(): err=\n\t%v", err),
+			Status_: lev0.LetTxt("kernelBusHttp.postSendRequest(): err=\n\t%v", err),
 			Uuid_:   req.Uuid_,
 		}
 		resp.SelfCheck()
 		ctx.Response().SetStatusCode(http.StatusBadRequest)
-		err := defs.Err("kBusHttp.postSendRequest(): in body parser, status=%v", resp.Status_)
+		err := lev0.LetErr("kBusHttp.postSendRequest(): in body parser, status=%v", resp.Status_)
 		sf.log.Err(err)
 		return ctx.JSON(resp)
 	}
@@ -205,11 +204,11 @@ func (sf *kBusHttp) processSendRequest(req *dot.ServeReq) *dot.ServeResp {
 	topic := bus_ent.ITopicFix(topic.NewTopic(req.Topic_))
 	res := sf.SendRequest(topic, req.BinReq_)
 	resp := &dot.ServeResp{
-		Status_: defs.TxtFix("ok"),
+		Status_: lev0.LetTxt("ok"),
 		Uuid_:   req.Uuid_,
 	}
 	if res.IsErr() {
-		resp.Status_ = defs.TxtFix("kernelBusHttp.processSendRequest(): err=\n\t%v", res.Err())
+		resp.Status_ = lev0.LetTxt("kernelBusHttp.processSendRequest(): err=\n\t%v", res.Err())
 		return resp
 	}
 	resp.BinResp_ = res.Ok()
@@ -220,17 +219,17 @@ func (sf *kBusHttp) processSendRequest(req *dot.ServeReq) *dot.ServeResp {
 func (sf *kBusHttp) processUnsubRequest(req *dot.UnsubReq) *dot.UnsubResp {
 	req.SelfCheck()
 	resp := &dot.UnsubResp{
-		Status_: defs.TxtFix("ok"),
+		Status_: lev0.LetTxt("ok"),
 		Uuid_:   req.Uuid_,
 	}
-	optHandler := sf.KCtx_.Get(defs.TxtFix(req.HandlerName_))
+	optHandler := sf.KCtx_.Get(req.HandlerName_)
 	if optHandler.IsNone() {
-		resp.Status_ = defs.TxtFix("kernelBusHttp.processUnsubRequest(): not get handler(%v) from kernel ctx",
+		resp.Status_ = lev0.LetTxt("kernelBusHttp.processUnsubRequest(): not get handler(%v) from kernel ctx",
 			req.HandlerName_)
 		return resp
 	}
 	if optHandler == nil {
-		resp.Status_ = defs.TxtFix("kernelBusHttp.processUnsubRequest(): handler(%v) not exists", req.HandlerName_)
+		resp.Status_ = lev0.LetTxt("kernelBusHttp.processUnsubRequest(): handler(%v) not exists", req.HandlerName_)
 		return resp
 	}
 	hand := optHandler.Some().Val().(bus_spec.IBusHandlerSubscribe)

+ 3 - 4
v4/lev2/lti/kbus_http/kbus_http_test.go

@@ -9,8 +9,7 @@ import (
 	"testing"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -40,11 +39,11 @@ func TestKernelBusHttp(t *testing.T) {
 	sf := &tester{
 		t: t,
 		handSub: mock_hand_sub_local.NewMockHandlerSub(qNameSub,
-			defs.TxtFix("http://localhost:18200/bus/pub")),
+			lev0.LetTxt("http://localhost:18200/bus/pub")),
 		handServ: mock_hand_serve.NewMockHandlerServe(qNameServ, "name_serv"),
 	}
 	ctx := kctx.GetKernelCtx()
-	ctx.Set(defs.TxtFix("monolitName"), "test_monolit", "comment")
+	ctx.Set(lev0.LetTxt("monolitName"), "test_monolit", "comment")
 	sf.get()
 	sf.req()
 	sf.sub()

+ 3 - 3
v4/lev2/wui/hx_swap/hx_swap.go

@@ -4,14 +4,14 @@ package hx_swap
 import (
 	"sync"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
 )
 
 // HxSwap -- атрибут HTMX (политика замены).
 type HxSwap struct {
 	sync.RWMutex
-	swap defs.ITxtMut
+	swap *lev0.MTxt
 }
 
 // NewHxSwap -- возвращает новую политику замены.
@@ -29,7 +29,7 @@ func (sf *HxSwap) String() string {
 }
 
 // Swap -- возвращает хранимое значение политики замена.
-func (sf *HxSwap) Swap() defs.ITxtMut {
+func (sf *HxSwap) Swap() *lev0.MTxt {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.swap

+ 3 - 3
v4/lev2/wui/hx_trigger/hx_trigger.go

@@ -4,14 +4,14 @@ package hx_trigger
 import (
 	"sync"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
 )
 
 // HxTrigger -- атрибут HTMX (триггер запроса).
 type HxTrigger struct {
 	sync.RWMutex
-	trigger defs.ITxtMut
+	trigger *lev0.MTxt
 }
 
 // NewHxTrigger -- возвращает новый триггер запроса.
@@ -31,7 +31,7 @@ func (sf *HxTrigger) String() string {
 }
 
 // Trigger -- возвращает хранимое значение триггера запроса.
-func (sf *HxTrigger) Trigger() defs.ITxtMut {
+func (sf *HxTrigger) Trigger() *lev0.MTxt {
 	sf.RLock()
 	defer sf.RUnlock()
 

+ 2 - 2
v4/lev2/wui/hx_url/hx_url.go

@@ -2,7 +2,7 @@
 package hx_url
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/hx_url_method"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/hx_url_patch"
 	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
@@ -15,7 +15,7 @@ type HxUrl struct {
 }
 
 // NewHxUrl -- возвращает новый URL запроса.
-func NewHxUrl(patch defs.ITxtFix) *HxUrl {
+func NewHxUrl(patch *lev0.LTxt) *HxUrl {
 	sf := &HxUrl{
 		method: hx_url_method.NewHxUrlMethod(),
 		patch:  hx_url_patch.NewHxUrlPatch(patch),

+ 2 - 2
v4/lev2/wui/hx_url/hx_url_test.go

@@ -3,11 +3,11 @@ package hx_url
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 )
 
 func TestHxUrl(t *testing.T) {
-	swap := NewHxUrl(defs.TxtFix("/wui/click/abc"))
+	swap := NewHxUrl(lev0.LetTxt("/wui/click/abc"))
 	if swap == nil {
 		t.Fatalf("swap==nil")
 	}

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません