Ver Fonte

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

SVI há 1 mês atrás
pai
commit
3f6f8d8125
46 ficheiros alterados com 723 adições e 870 exclusões
  1. 24 28
      v4/kern.go
  2. 2 6
      v4/kern_test.go
  3. 0 20
      v4/lev0/core_spec/ebool.go
  4. 2 2
      v4/lev0/core_spec/estr.go
  5. 9 9
      v4/lev0/core_spec/ikernel_int.go
  6. 2 2
      v4/lev0/core_spec/isafe_bool_react.go
  7. 0 25
      v4/lev0/core_spec/itime.go
  8. 0 17
      v4/lev0/defs/def_bool/def_bool.go
  9. 3 3
      v4/lev0/defs/def_let/def_let.go
  10. 30 0
      v4/lev0/defs/def_let_bool/def_let_bool.go
  11. 14 14
      v4/lev0/defs/def_let_err/def_let_err.go
  12. 40 0
      v4/lev0/defs/def_let_int/def_let_int.go
  13. 74 0
      v4/lev0/defs/def_let_time/def_let_time.go
  14. 12 12
      v4/lev0/defs/def_let_txt/def_let_txt.go
  15. 40 0
      v4/lev0/defs/def_mut_bool/def_mut_bool.go
  16. 99 0
      v4/lev0/defs/def_mut_int/def_mut_int.go
  17. 81 0
      v4/lev0/defs/def_mut_time/def_mut_time.go
  18. 32 31
      v4/lev0/defs/def_mut_txt/def_mut_txt.go
  19. 67 2
      v4/lev0/defs/def_spec/def_spec.go
  20. 5 2
      v4/lev0/defs/def_spec/def_tuf.go
  21. 4 1
      v4/lev0/defs/def_spec_base/def_spec_base.go
  22. 45 25
      v4/lev0/defs/defs.go
  23. 0 68
      v4/lev0/etypes/ebool/ebool.go
  24. 4 4
      v4/lev0/etypes/estr/estr.go
  25. 1 1
      v4/lev0/etypes/etypes.go
  26. 44 17
      v4/lev0/lev0.go
  27. 11 10
      v4/lev0/option/option.go
  28. 15 16
      v4/lev0/option/option_test.go
  29. 22 22
      v4/lev0/tuf/tuf.go
  30. 0 83
      v4/lev0/voc/etime/etime.go
  31. 0 25
      v4/lev0/voc/etime/etime_test.go
  32. 0 2
      v4/lev0/voc/vbool/vbool.go
  33. 0 92
      v4/lev0/voc/vmask/vmask.go
  34. 0 28
      v4/lev0/voc/voc.go
  35. 5 5
      v4/lev1/comp_spec/ilocal_ctx.go
  36. 1 2
      v4/lev1/comp_spec/ilog_buf.go
  37. 0 118
      v4/lev1/kint/kint.go
  38. 0 135
      v4/lev1/kint/kint_test.go
  39. 2 9
      v4/lev1/lev1.go
  40. 3 3
      v4/lev1/lev1_test.go
  41. 12 12
      v4/lev1/local_ctx/ctx_value/ctx_value.go
  42. 2 1
      v4/lev1/local_ctx/ctx_value/ctx_value_test.go
  43. 9 10
      v4/lev1/local_ctx/local_ctx.go
  44. 5 6
      v4/lev1/log_buf/log_msg/log_msg.go
  45. 1 1
      v4/lev2/kmodule/mod_stat/mod_stat_sec/mod_stat_sec.go
  46. 1 1
      v4/lev2/kserv_http/kserv_http.go

+ 24 - 28
v4/kern.go

@@ -5,9 +5,10 @@ import (
 	"context"
 	"time"
 
-	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"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"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
@@ -41,21 +42,21 @@ func GetKernelCtx() kspec.IKernelCtx {
 }
 
 // Result — обёртка вокруг результата с возможной ошибкой.
-type Result[T any] = mL0.Result[T]
+type Result[T any] = lev0.Result[T]
 
 // NewErr -- возвращает Result с ошибкой.
-func NewErr[T any](err defs.IErr) *Result[T] {
-	return mL0.NewErr[T](err)
+func NewErr[T any](err T) *Result[T] {
+	return lev0.NewErr[T](err)
 }
 
 // NewOk -- возвращает успешный Result с значением.
 func NewOk[T any](res T) *Result[T] {
-	return mL0.NewOk(res)
+	return lev0.NewOk(res)
 }
 
 // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
-func WrapErr[T any](res *Result[T], err defs.IErr) *Result[T] {
-	return mL0.WrapErr(res, err)
+func WrapErr[T any](res *Result[T], err T) *Result[T] {
+	return lev0.WrapErr(res, err)
 }
 
 // GetKernelStoreKv -- возвращает быстрое key-value хранилище ядра.
@@ -87,9 +88,9 @@ func NewSafeBool(val defs.Bool) ISafeBool {
 // GetKernelBusLocal -- возвращает локальную шину данных.
 func GetKernelBusLocal() bus_spec.IKernelBus {
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set(defs.TxtFix("monolitName"),
+	kCtx.Set(defs.LetTxt("monolitName"),
 		"unknown monolit",
-		defs.TxtFix("GetKernelBusLocal()"))
+		defs.LetTxt("GetKernelBusLocal()"))
 	lBus := kbus_local.GetKernelBusLocal()
 	return lBus
 }
@@ -112,10 +113,10 @@ func SleepMs() {
 // GetMonolitLocal -- возвращает монолит с локальной шиной.
 func GetMonolitLocal(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set(defs.TxtFix("isLocal"), true, defs.TxtFix("bus type"))
+	kCtx.Set(defs.LetTxt("isLocal"), true, defs.LetTxt("bus type"))
 	for {
 		time.Sleep(time.Millisecond * 1)
-		optIsLocal := kCtx.Get(defs.TxtFix("isLocal"))
+		optIsLocal := kCtx.Get(defs.LetTxt("isLocal"))
 		if optIsLocal.IsSome() {
 			break
 		}
@@ -129,10 +130,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.TxtFix("isLocal"), false, defs.TxtFix("bus type"))
+	kCtx.Set(defs.LetTxt("isLocal"), false, defs.LetTxt("bus type"))
 	for {
 		time.Sleep(time.Millisecond * 1)
-		optIsLocal := kCtx.Get(defs.TxtFix("isLocal"))
+		optIsLocal := kCtx.Get(defs.LetTxt("isLocal"))
 		if optIsLocal.IsSome() {
 			break
 		}
@@ -160,7 +161,7 @@ func NewClientBusLocal() bus_spec.IBusClient {
 // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP.
 //
 
-func NewClientBusHttp(url defs.ITxtFix) bus_spec.IBusClient {
+func NewClientBusHttp(url *defs.LTxt) bus_spec.IBusClient {
 	client := client_bus_http.NewClientBusHttp(url)
 	return client
 }
@@ -230,8 +231,8 @@ func NewSafeInt(val defs.Int) core_spec.ISafeInt {
 // NewInt -- возвращает новую целочисленную переменную.
 //
 
-func NewInt(val defs.Int) core_spec.Int {
-	val_ := mL1.NewInt(val)
+func LetInt(val lev0.Int) *lev0.LInt {
+	val_ := lev0.LetInt(val)
 	return val_
 }
 
@@ -251,20 +252,15 @@ func NewSafeString() core_spec.ISafeString {
 	return str
 }
 
+// Option — обёртка вокруг результата с возможной пустотой.
+type Option[T any] = lev0.Option[T]
+
 // NewSome -- возвращает новый не пустой результат операции.
-func NewSome[T any](some T) mL0.IOption[T] {
-	return mL0.NewSome(some)
+func NewSome[T any](some T) *Option[T] {
+	return lev0.NewSome(some)
 }
 
 // NewNone -- возвращает новый пустой результат операции.
-func NewNone[T any]() mL0.IOption[T] {
-	return mL0.NewNone[T]()
+func NewNone[T any]() *Option[T] {
+	return lev0.NewNone[T]()
 }
-
-// FnIf -- проверяет с жёстким падением условие.
-// type FnIf = helpers.FnIf
-
-// If -- возвращает ссылку на функцию If (Hasssert/Assert).
-// func If() FnIf {
-// 	return helpers.If
-// }

+ 2 - 6
v4/kern_test.go

@@ -4,10 +4,7 @@ import (
 	"os"
 	"testing"
 
-	// mL0 "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"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
@@ -55,11 +52,10 @@ func (sf *tester) new() {
 	sf.new3()
 
 	_ = NewOk("test ok")
-	_ = NewErr[core_spec.EBool](defs.Err("test err"))
 	_ = NewSome("test err")
 	_ = NewNone[int64]()
 
-	valInt := NewInt(28)
+	valInt := LetInt(28)
 	if val := valInt.Get(); val != 28 {
 		sf.t.Fatalf("new(): cal(%v)!=28", val)
 	}
@@ -148,7 +144,7 @@ func (sf *tester) new1() {
 	if clientLocal == nil {
 		sf.t.Fatalf("new1(): (local) IBusClient==nil")
 	}
-	clientHttp := NewClientBusHttp(defs.TxtFix("test_url"))
+	clientHttp := NewClientBusHttp(defs.LetTxt("test_url"))
 	if clientHttp == nil {
 		sf.t.Fatalf("new1(): (http) IBusClient==nil")
 	}

+ 0 - 20
v4/lev0/core_spec/ebool.go

@@ -1,20 +0,0 @@
-package core_spec
-
-import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
-
-// EBool -- расширенный бул.
-type EBool interface {
-	// IsOk -- проверяет на true.
-	IsOk() def_spec_base.Bool
-	// IsNot -- проверяет на false.
-	IsNot() def_spec_base.Bool
-}
-
-// EBoolMut -- мутабельный расширенный бул.
-type EBoolMut interface {
-	EBool
-	// Set -- устанавливает булево.
-	Set()
-	// Reset -- сбрасывает булево.
-	Reset()
-}

+ 2 - 2
v4/lev0/core_spec/estr.go

@@ -7,12 +7,12 @@ type EStr interface {
 	// SelfCheck -- выполняет самопроверку строки.
 	SelfCheck()
 	// Get -- возвращает строку.
-	Get() def_spec.ITxtFix
+	Get() *def_spec.LTxt
 }
 
 // EStrMut -- мутабельная расширенная строка.
 type EStrMut interface {
 	EStr
 	// Set -- устанавливает строку.
-	Set(def_spec.ITxtFix)
+	Set(*def_spec.LTxt)
 }

+ 9 - 9
v4/lev0/core_spec/ikernel_int.go

@@ -1,15 +1,15 @@
 package core_spec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 // Int -- целочисленный тип ядра.
 type Int interface {
 	// Get -- возвращает хранимое значение потокобезопасной переменной
-	Get() def_spec.Int
+	Get() defs.Int
 	// Set -- устанавливает хранимое потокобезопасное значение
-	Set(def_spec.Int)
+	Set(defs.Int)
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// Inc -- увеличивает число на 1
@@ -17,17 +17,17 @@ type Int interface {
 	// Dec -- уменьшает число на 1
 	Dec()
 	// FromStr -- устанавливает значение из строки
-	FromStr(def_spec.ITxtFix) *def_spec.Result[def_spec.Int]
+	FromStr(*defs.LTxt) *defs.Result[defs.Int]
 	// ToStr -- возвращает как строку
-	ToStr() def_spec.ITxtFix
+	ToStr() *defs.LTxt
 	// FromByte -- устанавливает значение из байтов
-	FromByte([]byte) *def_spec.Result[def_spec.Int]
+	FromByte([]byte) *defs.Result[defs.Int]
 	// ToByte -- возвращает как срез байт
 	ToByte() []byte
 	// FromBool -- устанавливает значение из булева
-	FromBool(def_spec.Bool) def_spec.Int
+	FromBool(defs.Bool) defs.Int
 	// ToBool -- возвращает как булево значение
-	ToBool() def_spec.Bool
+	ToBool() defs.Bool
 	// Getenv -- устанавливает значение из окружения
-	Getenv(def_spec.ITxtFix) *def_spec.Result[def_spec.Int]
+	Getenv(*defs.LTxt) *defs.Result[defs.Int]
 }

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

@@ -8,7 +8,7 @@ import (
 type ISafeBoolReact interface {
 	ISafeBool
 	// Add -- добавляет функцию обратного вызова
-	Add(key def_spec.ITxtFix, fn func(EBoolMut)) *Result[bool]
+	Add(key *def_spec.LTxt, fn func(def_spec.MBool)) *Result[bool]
 	// Delete -- удаляет функцию обратного вызова по ключу
-	Delete(key def_spec.ITxtFix)
+	Delete(key *def_spec.LTxt)
 }

+ 0 - 25
v4/lev0/core_spec/itime.go

@@ -1,25 +0,0 @@
-package core_spec
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-)
-
-// ITimeFix -- метка времени.
-// Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type ITimeFix def_spec.ITxtFix
-
-// ITime -- интерфейс времени.
-// Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type ITime interface {
-	def_spec.IString
-	def_spec.ITuf
-	// Time -- получить время.
-	Time() ITimeFix
-}
-
-// ITimeMut -- интерфейс времени с мутацией.
-type ITimeMut interface {
-	ITime
-	// Set -- установить время.
-	Set(val ITimeFix)
-}

+ 0 - 17
v4/lev0/defs/def_bool/def_bool.go

@@ -1,17 +0,0 @@
-package def_bool
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
-)
-
-// LetBool -- возвращает новый неизменяемый Bool
-func LetBool(val def_spec.Bool) *def_let.Let[def_spec.Bool] {
-	return def_let.NewLet(val)
-}
-
-// MutBool -- возвращает новый изменяемый Bool
-func MutBool(val def_spec.Bool) *def_mut.Mut[def_spec.Bool] {
-	return def_mut.NewMut(val)
-}

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

@@ -1,12 +1,12 @@
-// package def_let -- иммутабельный контейнер
+// package def_let -- неизменяемый контейнер
 package def_let
 
-// Let -- иммутабельный контейнер
+// Let -- неизменяемый контейнер
 type Let[T any] struct {
 	val T
 }
 
-// NewLet -- возвращает новый параметрический иммуьабельный контейнер
+// NewLet -- возвращает новый параметрический неизменяемый контейнер
 func NewLet[T any](val T) *Let[T] {
 	return &Let[T]{val: val}
 }

+ 30 - 0
v4/lev0/defs/def_let_bool/def_let_bool.go

@@ -0,0 +1,30 @@
+// package def_let_bool -- неизменяемое булево значение
+package def_let_bool
+
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
+)
+
+// LBool -- неизменяемое булево значение
+type LBool struct {
+	*def_let.Let[def_spec_base.Bool]
+}
+
+// LetBool -- возвращает новый неизменяемый Bool
+func LetBool(val def_spec_base.Bool) *LBool {
+	sf := &LBool{
+		Let: def_let.NewLet(val),
+	}
+	return sf
+}
+
+// IsFalse -- проверяет на false.
+func (sf *LBool) IsFalse() def_spec_base.Bool {
+	return sf.Get() == false
+}
+
+// IsTrue -- проверяет на true.
+func (sf *LBool) IsTrue() def_spec_base.Bool {
+	return sf.Get() == true
+}

+ 14 - 14
v4/lev0/defs/def_let_err/def_let_err.go

@@ -3,39 +3,39 @@ package def_let_err
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_txt"
-	"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"
 )
 
-// LetErr -- обёрнутая ошибка.
-type LetErr struct {
-	*def_let_txt.LetTxt
+// LErr -- обёрнутая ошибка.
+type LErr struct {
+	*def_let_txt.LTxt
 }
 
-// Err -- создать новую обёрнутую ошибку.
-func Err(msg def_spec.ATxt, arg ...any) *LetErr {
-	helpers.If(msg == "").Hassert("Err(): msg is empty")
-	sf := &LetErr{
-		LetTxt: def_let_txt.NewLetTxt(msg, arg...),
+// LetErr -- создать новую обёрнутую ошибку.
+func LetErr[T def_spec_fn.TxtConstraint](msg T, arg ...any) *LErr {
+	helpers.If(msg == "").Hassert("LetErr(): msg is empty")
+	sf := &LErr{
+		LTxt: def_let_txt.LetTxt(msg, arg...),
 	}
 	return sf
 }
 
 // WrapErr -- возвращает обёрнутую ошибку.
-func (sf *LetErr)WrapErr(err error, arg ...any) *LetErr {
-	_sf := &LetErr{
-		LetTxt: def_let_txt.NewLetTxt(err.Error(), arg...),
+func (sf *LErr) WrapErr(err error, arg ...any) *LErr {
+	_sf := &LErr{
+		LTxt: def_let_txt.LetTxt(err.Error(), arg...),
 	}
 	return _sf
 }
 
 // IsErr -- возвращает true, если ошибка.
-func (sf *LetErr) IsErr() def_spec_base.Bool {
+func (sf *LErr) IsErr() def_spec_base.Bool {
 	return sf.Get() != ""
 }
 
 // Error -- возвращает хранимую ошибку.
-func (sf *LetErr) Error() string {
+func (sf *LErr) Error() string {
 	return sf.String()
 }

+ 40 - 0
v4/lev0/defs/def_let_int/def_let_int.go

@@ -0,0 +1,40 @@
+// package def_let_int -- внутренне неизменяемое целое
+package def_let_int
+
+import (
+	"encoding/binary"
+
+	"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]
+}
+
+// LetInt -- возвращает новое внутреннее неизменяемое целое.
+func LetInt(val def_spec_base.Int) *LInt {
+	sf := &LInt{
+		Let: def_let.NewLet(val),
+	}
+	return sf
+}
+
+// Get -- возвращает хранимое значение потокобезопасной переменной.
+func (sf *LInt) Get() def_spec_base.Int {
+	return sf.Let.Get()
+}
+
+// ToStr -- возвращает как строку.
+func (sf *LInt) ToStr() def_spec_base.ATxt {
+	return def_spec_fn.Sprintf("%v", sf.Let.Get())
+}
+
+// ToByte -- возвращает как срез байт.
+func (sf *LInt) ToByte() []byte {
+	buf := make([]byte, 8)
+	binary.BigEndian.PutUint64(buf, uint64(sf.Let.Get()))
+	return buf
+}

+ 74 - 0
v4/lev0/defs/def_let_time/def_let_time.go

@@ -0,0 +1,74 @@
+// package def_let_time -- внутреннее низменяемое время
+package def_let_time
+
+import (
+	"time"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_err"
+	"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"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/tuf"
+)
+
+// LTime -- внутренее неизменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+type LTime struct {
+	*def_let.Let[def_spec_base.Time]
+}
+
+// LetTime -- возвращает новое внутреннее неизменяемое время.
+func LetTime[T def_spec_fn.TxtConstraint](val T) *LTime {
+	helpers.If(val == "").Hassert("LetTime(): val is empty")
+	sf := &LTime{
+		Let: def_let.NewLet(def_spec_base.Time(val)),
+	}
+	return sf
+}
+
+// LetTimeAuto -- возвращает новое автоматическое внутреннее неизменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+func LetTimeAuto() *LTime {
+	_val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
+	val := def_spec_base.Time(_val)
+	sf := &LTime{
+		Let: def_let.NewLet(val),
+	}
+	return sf
+}
+
+// LetTimeFromTuf -- десериализует из def_spec_base.ATxt в строки.
+func LetTimeFromTuf(txtMsg def_spec_base.ATxt) *option.Option[*def_let_err.LErr] {
+	resRec := tuf.RecFromTuf("ETime", txtMsg) // Получить текст записи
+	if resRec.IsErr() {
+		err := def_let_err.LetErr("FromTuf(): in extract record from TUF, err=\n\t%v", resRec.Error())
+		return option.NewSome(err)
+	}
+	return option.NewNone[*def_let_err.LErr]()
+}
+
+// Get -- получить время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+func (sf *LTime) Get() def_spec_base.Time {
+	return def_spec_base.Time(sf.Let.Get())
+}
+
+// ToTuf -- сериализует себя в строку.
+func (sf *LTime) ToTuf() def_spec_base.ATxt {
+	txtRes := tuf.StrToTuf("val", def_spec_base.ATxt(sf.Let.Get()))
+	lenVal:=len(string(sf.Let.Get()))
+	isFill:=def_spec_base.Bool(lenVal>0)
+	txtRes += tuf.BoolToTuf("isFill", isFill)
+	txtRes = tuf.RecToTuf("LTime", txtRes)
+	return txtRes
+}
+
+// String -- возвращает строку.
+func (sf *LTime) String() string {
+	return string(sf.Let.Get())
+}

+ 12 - 12
v4/lev0/defs/def_let_txt/def_let_txt.go

@@ -1,4 +1,4 @@
-// package def_let_txt -- неизменяемый текст
+// package def_let_txt -- неизменяемый текст.
 package def_let_txt
 
 import (
@@ -12,49 +12,49 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
-// LetTxt -- алиас для внутренней строки.
-type LetTxt struct {
+// LTxt -- неизменяемый текст
+type LTxt struct {
 	*def_let.Let[def_spec_base.ATxt]
 }
 
-// NewLetTxt -- создать новую неизменяемую строку.
-func NewLetTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *LetTxt {
+// LetTxt -- создать новую неизменяемую строку.
+func LetTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *LTxt {
 	_msg := def_spec_fn.Sprintf(msg, arg...)
-	sf := &LetTxt{
+	sf := &LTxt{
 		Let: def_let.NewLet(_msg),
 	}
 	return sf
 }
 
 // TrimSuffix -- обрезает суффикс строки.
-func (sf *LetTxt) TrimSuffix(suffix any) def_spec_base.ATxt {
+func (sf *LTxt) TrimSuffix(suffix any) def_spec_base.ATxt {
 	suf := fmt.Sprintf("%v", suffix)
 	txt := strings.TrimSuffix(sf.String(), suf)
 	return def_spec_base.ATxt(txt)
 }
 
 // Rune -- возвращает внутреннюю строку в виде рун.
-func (sf LetTxt) Rune() []rune {
+func (sf LTxt) Rune() []rune {
 	return []rune(sf.Get())
 }
 
 // Byte -- возвращает внутреннюю строку в виде байтов.
-func (sf LetTxt) Byte() []byte {
+func (sf LTxt) Byte() []byte {
 	return []byte(sf.Get())
 }
 
 // Len -- возвращает длину строки.
-func (sf LetTxt) Len() def_spec_base.Int {
+func (sf LTxt) Len() def_spec_base.Int {
 	return def_spec_base.Int(len(sf.Get()))
 }
 
 // String -- возвращает строку по требованию.
-func (sf LetTxt) String() string {
+func (sf LTxt) String() string {
 	return string(sf.Get())
 }
 
 // Atoi -- возвращает возможное число.
-func (sf LetTxt) Atoi() *result.Result[def_spec_base.Int] {
+func (sf LTxt) Atoi() *result.Result[def_spec_base.Int] {
 	iRes, err := strconv.Atoi(sf.String())
 	if err != nil {
 		err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w",

+ 40 - 0
v4/lev0/defs/def_mut_bool/def_mut_bool.go

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

+ 99 - 0
v4/lev0/defs/def_mut_int/def_mut_int.go

@@ -0,0 +1,99 @@
+// package def_mut_int -- внутренне изменяемое целое
+package def_mut_int
+
+import (
+	"bytes"
+	"encoding/binary"
+
+	"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"
+)
+
+// MInt -- внутренне изменяемое целое.
+type MInt struct {
+	*def_mut.Mut[def_spec_base.Int]
+}
+
+// MutInt -- возвращает новое внутреннее изменяемое целое.
+func MutInt(val def_spec_base.Int) *MInt {
+	sf := &MInt{
+		Mut: def_mut.NewMut(val),
+	}
+	return sf
+}
+
+// Get -- возвращает хранимое значение потокобезопасной переменной.
+func (sf *MInt) Get() def_spec_base.Int {
+	return sf.Mut.Get()
+}
+
+// ToStr -- возвращает как строку.
+func (sf *MInt) ToStr() def_spec_base.ATxt {
+	return def_spec_fn.Sprintf("%v", sf.Mut.Get())
+}
+
+// ToByte -- возвращает как срез байт.
+func (sf *MInt) ToByte() []byte {
+	buf := make([]byte, 8)
+	binary.BigEndian.PutUint64(buf, uint64(sf.Mut.Get()))
+	return buf
+}
+
+// Set -- устанавливает хранимое потокобезопасное значение.
+func (sf *MInt) Set(val def_spec_base.Int) {
+	sf.Mut.Set(val)
+}
+
+// Inc -- увеличивает на единицу.
+func (sf *MInt) Inc() {
+	val := sf.Mut.Get()
+	val++
+	sf.Mut.Set(val)
+}
+
+// Dec -- уменьшает на единицу.
+func (sf *MInt) Dec() {
+	val := sf.Mut.Get()
+	val--
+	sf.Mut.Set(val)
+}
+
+// Reset -- сбрасывает хранимое потокобезопасное значение.
+func (sf *MInt) Reset() {
+	sf.Mut.Set(0)
+}
+
+// FromStr -- устанавливает значение из строки.
+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)
+	}
+	sf.Mut.Set(res.Ok())
+	return result.NewOk(sf.Mut.Get())
+}
+
+// FromByte -- устанавливает значение из байтов (BigEndian, net order).
+func (sf *MInt) FromByte(binData []byte) *result.Result[def_spec_base.Int] {
+	lenBin := len(binData)
+	if lenBin < 8 {
+		err := def_let_err.LetErr("MInt.FromByte(): len(%v) bytes shorts",
+			lenBin)
+		return result.NewErr[def_spec_base.Int](err)
+	}
+	var signed int64
+	buf := bytes.NewReader(binData)
+	err := binary.Read(buf, binary.BigEndian, &signed)
+	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)
+	}
+	sf.Mut.Set(def_spec_base.Int(signed))
+	return result.NewOk(sf.Mut.Get())
+}

+ 81 - 0
v4/lev0/defs/def_mut_time/def_mut_time.go

@@ -0,0 +1,81 @@
+// package def_mut_time -- внутреннее изменяемое время
+package def_mut_time
+
+
+import (
+	"time"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_err"
+	"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"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/tuf"
+)
+
+// MTime -- внутренее изменяемое время
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+type MTime struct {
+	*def_mut.Mut[def_spec_base.Time]
+}
+
+// MutTime -- возвращает новое внутреннее изменяемое время.
+func MutTime[T def_spec_fn.TxtConstraint](val T) *MTime {
+	helpers.If(val == "").Hassert("MutTime(): val is empty")
+	sf := &MTime{
+		Mut: def_mut.NewMut(def_spec_base.Time(val)),
+	}
+	return sf
+}
+
+// MutTimeAuto -- возвращает новое автоматическое внутреннее изменяемое время
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+func MutTimeAuto() *MTime {
+	_val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
+	val := def_spec_base.Time(_val)
+	sf := &MTime{
+		Mut: def_mut.NewMut(val),
+	}
+	return sf
+}
+
+// MutTimeFromTuf -- десериализует из def_spec_base.ATxt в строки.
+func MutTimeFromTuf(txtMsg def_spec_base.ATxt) *option.Option[*def_let_err.LErr] {
+	resRec := tuf.RecFromTuf("ETime", txtMsg) // Получить текст записи
+	if resRec.IsErr() {
+		err := def_let_err.LetErr("MutTimeFromTuf(): in extract record from TUF, err=\n\t%v", resRec.Error())
+		return option.NewSome(err)
+	}
+	return option.NewNone[*def_let_err.LErr]()
+}
+
+// Get -- получить время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+func (sf *MTime) Get() def_spec_base.Time {
+	return def_spec_base.Time(sf.Mut.Get())
+}
+
+// ToTuf -- сериализует себя в строку.
+func (sf *MTime) ToTuf() def_spec_base.ATxt {
+	txtRes := tuf.StrToTuf("val", def_spec_base.ATxt(sf.Mut.Get()))
+	lenVal:=len(string(sf.Mut.Get()))
+	isFill:=def_spec_base.Bool(lenVal>0)
+	txtRes += tuf.BoolToTuf("isFill", isFill)
+	txtRes = tuf.RecToTuf("MTime", txtRes)
+	return txtRes
+}
+
+// Set -- устанавливает типизированное значение.
+func (sf *MTime) Set(val def_spec_base.Time) {
+	helpers.If(val == "").Hassert("MTime.Set(): val is empty")
+	sf.Mut.Set(val)
+}
+
+// String -- возвращает строку.
+func (sf *MTime) String() string {
+	return string(sf.Mut.Get())
+}

+ 32 - 31
v4/lev0/defs/def_mut_txt/def_mut_txt.go

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

+ 67 - 2
v4/lev0/defs/def_spec/def_spec.go

@@ -2,6 +2,13 @@
 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"
@@ -13,19 +20,54 @@ 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]
+type Result[T any] = result.Result[T]
 
 // NewOk -- возвращает успешный Result с значением.
 func NewOk[T any](value T) *Result[T] {
@@ -40,4 +82,27 @@ func NewErr[T any](err error) *Result[T] {
 // 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)
+}

+ 5 - 2
v4/lev0/defs/def_spec/def_tuf.go

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

+ 4 - 1
v4/lev0/defs/def_spec_base/def_spec_base.go

@@ -8,4 +8,7 @@ type Int int
 type ATxt string
 
 // Bool -- внутренее представление логического значения.
-type Bool bool
+type Bool bool
+
+// Time -- внутренее представление времени.
+type Time ATxt

+ 45 - 25
v4/lev0/defs/defs.go

@@ -2,10 +2,11 @@
 package defs
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_err"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_let_err"
+	"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_txt"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
 // Bool -- внутренне представление логического значения.
@@ -14,56 +15,75 @@ type Bool = def_spec.Bool
 // Int -- внутренне представление числа.
 type Int = def_spec.Int
 
+// LInt -- внутренне неизменяемое целое.
+type LInt=def_spec.LInt
+
 // IString -- внутренне представление строки.
 type IString = def_spec.IString
 
 // ATxt -- внутренее представление текста.
 type ATxt = def_spec.ATxt
 
-// ITxtFix -- внутренне представление неизменяемой строки.
-type ITxtFix = def_spec.ITxtFix
+// TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt).
+type TxtConstraint = def_spec.TxtConstraint
+
+// LTxt -- внутренний неизменяемый текст.
+type LTxt = def_spec.LTxt
 
-// TxtFix -- возвращает новый неизменяемый внутренний текст.
-func TxtFix[T def_spec.TxtConstraint](msg T, arg ...any) ITxtFix {
-	sf := def_txt.TxtFix(msg, arg...)
-	return sf
+// LetTxt -- создать новую неизменяемую строку.
+func LetTxt[T TxtConstraint](msg T, arg ...any) *LTxt {
+	return def_spec.LetTxt(msg, arg...)
 }
 
-// ITxtMut -- внутренне представление изменяемой строки.
-type ITxtMut = def_spec.ITxtMut
+// MTxt -- внутренний изменяемый текст.
+type MTxt = def_spec.MTxt
 
-// TxtMut -- возвращает новый неизменяемый внутренний текст.
-func TxtMut[T def_spec.TxtConstraint](msg T, arg ...any) ITxtMut {
-	sf := def_txt.TxtMut(msg, arg...)
-	return sf
+func MutTxt[T TxtConstraint](msg T, arg ...any) *MTxt {
+	return def_spec.MutTxt(msg, arg...)
 }
 
-// IErr -- внутренне представление ошибки.
-type IErr = def_spec.IErr
+// LErr -- внутренняя неизменяемая ошибка.
+type LErr = def_let_err.LErr
 
-// Err -- создать новую обёрнутую ошибку.
-func Err(msg ATxt, arg ...any) IErr {
-	return def_err.Err(msg, arg...)
+// LetErr -- создать новую обёрнутую ошибку.
+func LetErr[T TxtConstraint](msg T, arg ...any) *LErr {
+	return def_let_err.LetErr(msg, arg...)
 }
 
 // BucketName -- имя сущности.
-type BucketName ITxtFix
+type BucketName *LTxt
 
 // ITuf -- интерфейс к сериализатору TUF.
 type ITuf = def_spec.ITuf
 
 // Result -- результат выполнения.
-type Result[T any] = def_spec.Result[T]
+type Result[T any] = result.Result[T]
 
-// IOption -- опциональный результат.
-type IOption[T any] = def_spec.IOption[T]
+// Option -- опциональный результат.
+type Option[T any] = option.Option[T]
 
 // NewSome -- создать новый опциональный результат.
-func NewSome[T any](val T) IOption[T] {
+func NewSome[T any](val T) *Option[T] {
 	return option.NewSome(val)
 }
 
 // NewNone -- создать новый опциональный результат.
-func NewNone[T any]() IOption[T] {
+func NewNone[T any]() *Option[T] {
 	return option.NewNone[T]()
 }
+
+// Time -- внутренее представление времени.
+type Time = def_spec.Time
+
+
+// LTime -- внутренее неизменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+type LTime=def_let_time.LTime
+
+// LetTimeAuto -- возвращает новое автоматическое внутреннее неизменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+func LetTimeAuto()*LTime{
+	return def_let_time.LetTimeAuto()
+}

+ 0 - 68
v4/lev0/etypes/ebool/ebool.go

@@ -1,68 +0,0 @@
-// package ebool -- расширенное булево значение
-package ebool
-
-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/helpers"
-)
-
-// EBool -- расширенное булево.
-type EBool struct {
-	val   defs.Bool // Хранимое значение.
-	isMut defs.Bool // Признак мутабельности.
-}
-
-// NewEBool -- возвращает новый расширенный бул.
-func NewEBool(val defs.Bool) mKs.EBool {
-	sf := &EBool{
-		val: val,
-	}
-	return sf
-}
-
-// NewEBoolMut -- возвращает новый расширенный мутируемый бул.
-func NewEBoolMut(val defs.Bool) mKs.EBoolMut {
-	sf := &EBool{
-		val:   val,
-		isMut: true,
-	}
-	return sf
-}
-
-// IsNot -- проверяет на false.
-//
-
-func (sf *EBool) IsNot() defs.Bool {
-	return !sf.val
-}
-
-// IsOk -- проверяет на true.
-//
-
-func (sf *EBool) IsOk() defs.Bool {
-	return sf.val
-}
-
-// IsMut -- возвращает признак мутабельности.
-//
-
-func (sf *EBool) IsMut() defs.Bool {
-	return sf.isMut
-}
-
-var (
-	If = helpers.If
-)
-
-// Set -- устанавливает новое значение.
-func (sf *EBool) Set() {
-	If(sf.isMut).Hassert("EBool.Set(): not mutable")
-	sf.val = true
-}
-
-// Reset -- сбрасывает новое значение.
-func (sf *EBool) Reset() {
-	If(sf.isMut).Hassert("EBool.Reset(): not mutable")
-	sf.val = false
-}

+ 4 - 4
v4/lev0/etypes/estr/estr.go

@@ -9,7 +9,7 @@ import (
 
 // EStr -- расширенная строка.
 type EStr struct {
-	val    defs.ITxtFix // Хранимое значение
+	val    *defs.LTxt // Хранимое значение
 	lenMin defs.Int     // Минимальная длина строки
 	lenMax defs.Int     // Максимальная длина строки
 	isMut  defs.Bool    // Признак мутабельности
@@ -39,7 +39,7 @@ func OptStrMaxLen(lenMax defs.Int) FnOptStr {
 }
 
 // OptStr -- устанавливает начальное значение строки.
-func OptStr(val defs.ITxtFix) FnOptStr {
+func OptStr(val *defs.LTxt) FnOptStr {
 	return func(sf *EStr) {
 		sf.val = val
 	}
@@ -80,7 +80,7 @@ func NewStrMut(opt ...FnOptStr) mKs.EStrMut {
 }
 
 // Set -- устанавливает значение расширенной строки.
-func (sf *EStr) Set(val defs.ITxtFix) {
+func (sf *EStr) Set(val *defs.LTxt) {
 	mHp.If(!sf.isMut).
 		Hassert("EStrMut.Set(): нельзя изменить значение расширенной строки, если она не мутабельна, val=%q",
 			val.Get())
@@ -98,6 +98,6 @@ func (sf *EStr) SelfCheck() {
 }
 
 // Get -- возвращает хранимое значение расширенной строки.
-func (sf *EStr) Get() defs.ITxtFix {
+func (sf *EStr) Get() *defs.LTxt {
 	return sf.val
 }

+ 1 - 1
v4/lev0/etypes/etypes.go

@@ -27,7 +27,7 @@ func OptStrMaxLen(lenMax defs.Int) FnOptStr {
 }
 
 // OptStr -- устанавливает начальное значение строки.
-func OptStr(val defs.ITxtFix) FnOptStr {
+func OptStr(val *defs.LTxt) FnOptStr {
 	return estr.OptStr(val)
 }
 

+ 44 - 17
v4/lev0/lev0.go

@@ -2,18 +2,48 @@
 package lev0
 
 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/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
 )
 
-// ETime -- расширенное время.
-type ETime = mKs.ITime
+// ATxt -- внутренее представление текста.
+type ATxt = defs.ATxt
 
-// EStr -- расширенная строка.
-type EStr = mKs.EStr
+// Bool -- внутренее представление логического значения.
+type Bool = defs.Bool
+
+// Time -- внутреннее время.
+type Time = defs.Time
+
+// LTime -- внутренее неизменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+type LTime = defs.LTime
+
+// LetTimeAuto -- возвращает новое автоматическое внутреннее неизменяемое время.
+//
+// Вывод: "2006-01-02 15:04:05.000 -07 MST".
+func LetTimeAuto() *LTime {
+	return defs.LetTimeAuto()
+}
+
+// Int -- внутренне представление числа.
+type Int = defs.Int
+
+// LInt -- внутренне неизменяемое целое.
+type LInt = defs.LInt
+
+// TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt).
+type TxtConstraint = defs.TxtConstraint
+
+// LTxt -- внутренний неизменяемый текст.
+type LTxt = defs.LTxt
+
+// LetTxt -- создать новую неизменяемую строку.
+func LetTxt[T TxtConstraint](msgFormat T, arg ...any) *LTxt {
+	return defs.LetTxt(msgFormat, arg...)
+}
 
 // Result — обёртка вокруг результата с возможной ошибкой.
 type Result[T any] = result.Result[T]
@@ -24,31 +54,28 @@ func NewOk[T any](res T) *Result[T] {
 }
 
 // NewErr -- возвращает Result с ошибкой.
-func NewErr[T any](err defs.IErr) *Result[T] {
+func NewErr[T any](err error) *Result[T] {
 	return result.NewErr[T](err)
 }
 
 // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
-func WrapErr[T any](res *Result[T], err defs.IErr) *Result[T] {
+func WrapErr[T any](res *Result[T], err error) *Result[T] {
 	return result.WrapErr(res, err)
 }
 
-// IOption — обёртка вокруг результата с возможной пустотой.
-type IOption[T any] = mKs.IOption[T]
+// Option — обёртка вокруг результата с возможной пустотой.
+type Option[T any] = defs.Option[T]
 
 // NewSome -- возвращает новый не пустой результат операции.
-func NewSome[T any](some T) IOption[T] {
-	return option.NewSome(some)
+func NewSome[T any](some T) *Option[T] {
+	return defs.NewSome(some)
 }
 
 // NewNone -- возвращает новый пустой результат операции.
-func NewNone[T any]() IOption[T] {
-	return option.NewNone[T]()
+func NewNone[T any]() *Option[T] {
+	return defs.NewNone[T]()
 }
 
-// FnIf -- проверяет с жёстким падением условие.
-// type FnIf = helpers.FnIf
-
 // SleepMs -- задержка в миллисекундах.
 func SleepMs() {
 	helpers.SleepMs()

+ 11 - 10
v4/lev0/option/option.go

@@ -1,8 +1,7 @@
 package option
 
 import (
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"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/helpers"
 )
 
@@ -12,26 +11,28 @@ type Option[T any] struct {
 }
 
 // NewSome - полезный результат.
-func NewSome[T any](value T) mKs.IOption[T] {
+func NewSome[T any](value T) *Option[T] {
 	helpers.If(helpers.IsNil(value)).Hassert("NewSome[T any](): value==nil")
-	sf := &Option[T]{some: &value}
+	sf := &Option[T]{
+		some: &value,
+	}
 	return sf
 }
 
 // NewNone - нет результата в ответе.
-func NewNone[T any]() def_spec.IOption[T] {
+func NewNone[T any]() *Option[T] {
 	return &Option[T]{
 		some: nil,
 	}
 }
 
 // IsSome - проверяет, есть ли значение.
-func (sf *Option[T]) IsSome() bool {
+func (sf *Option[T]) IsSome() def_spec_base.Bool {
 	return sf.some != nil
 }
 
 // IsNone - проверяет, есть ли значение.
-func (sf *Option[T]) IsNone() bool {
+func (sf *Option[T]) IsNone() def_spec_base.Bool  {
 	return sf.some == nil
 }
 
@@ -42,7 +43,7 @@ func (sf *Option[T]) Some() T {
 }
 
 // SomeOr - возвращает значение или дефолтное.
-func (sf Option[T]) SomeOr(defaultValue T) T {
+func (sf *Option[T]) SomeOr(defaultValue T) T {
 	if sf.some == nil {
 		return defaultValue
 	}
@@ -59,13 +60,13 @@ func (sf *Option[T]) SomeOrFn(fn func() T) T {
 }
 
 // Hassert -- проверяет, что не пустое значение (с паникой).
-func (sf *Option[T]) Hassert(msgFormat def_spec.ATxt, args ...any) T {
+func (sf *Option[T]) Hassert(msgFormat def_spec_base.ATxt, args ...any) T {
 	helpers.If(sf.some == nil).Hassert(msgFormat, args...)
 	return *sf.some
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-func (sf *Option[T]) Assert(msgFormat def_spec.ATxt, args ...any) T {
+func (sf *Option[T]) Assert(msgFormat def_spec_base.ATxt, args ...any) T {
 	helpers.If(sf.some == nil).Assert(msgFormat, args...)
 	return *sf.some
 }

+ 15 - 16
v4/lev0/option/option_test.go

@@ -3,7 +3,7 @@ package option
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 )
 
 type testerOption struct {
@@ -33,7 +33,7 @@ func (sf *testerOption) createNoneGood1() {
 			sf.t.Fatalf("createNoneGood1(): panic=%v", _panic)
 		}
 	}()
-	opt := NewNone[def_spec.ATxt]()
+	opt := NewNone[def_spec_base.ATxt]()
 	if opt.IsSome() {
 		sf.t.Fatalf("createNoneGood1(): is ok")
 	}
@@ -49,13 +49,12 @@ func (sf *testerOption) createNoneGood1() {
 	if val := opt.SomeOrFn(sf.fnWrap2); val != "test5" {
 		sf.t.Fatalf("createNoneGood1(): val bad")
 	}
-	_opt := opt.(*Option[def_spec.ATxt])
-	sf.unwrapErr(_opt)
-	sf.hassert(_opt)
-	sf.assert(_opt)
+	sf.unwrapErr(opt)
+	sf.hassert(opt)
+	sf.assert(opt)
 }
 
-func (sf *testerOption) assert(res *Option[def_spec.ATxt]) {
+func (sf *testerOption) assert(res *Option[def_spec_base.ATxt]) {
 	sf.t.Log("assert")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -65,9 +64,9 @@ func (sf *testerOption) assert(res *Option[def_spec.ATxt]) {
 	res.Hassert(testAssert)
 }
 
-const testAssert = def_spec.ATxt("test assert")
+const testAssert = def_spec_base.ATxt("test assert")
 
-func (sf *testerOption) hassert(res *Option[def_spec.ATxt]) {
+func (sf *testerOption) hassert(res *Option[def_spec_base.ATxt]) {
 	sf.t.Log("hassert")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -77,7 +76,7 @@ func (sf *testerOption) hassert(res *Option[def_spec.ATxt]) {
 	res.Hassert(testAssert)
 }
 
-func (sf *testerOption) unwrapErr(res *Option[def_spec.ATxt]) {
+func (sf *testerOption) unwrapErr(res *Option[def_spec_base.ATxt]) {
 	sf.t.Log("unwrapErr")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -88,7 +87,7 @@ func (sf *testerOption) unwrapErr(res *Option[def_spec.ATxt]) {
 }
 
 var (
-	str = def_spec.ATxt("test val")
+	str = def_spec_base.ATxt("test val")
 )
 
 func (sf *testerOption) createSomeGood2() {
@@ -108,7 +107,7 @@ func (sf *testerOption) createSomeGood2() {
 	if val := opt.Some(); val != str {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
-	txtTest1 := def_spec.ATxt("test1")
+	txtTest1 := def_spec_base.ATxt("test1")
 	if val := opt.SomeOr(txtTest1); val != str {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
@@ -122,15 +121,15 @@ func (sf *testerOption) createSomeGood2() {
 	opt.Assert(txtTest)
 }
 
-const txtTest = def_spec.ATxt("test")
+const txtTest = def_spec_base.ATxt("test")
 
 // Функция высшего порядка для замещения ошибки.
-func (sf *testerOption) fnWrap2() def_spec.ATxt {
+func (sf *testerOption) fnWrap2() def_spec_base.ATxt {
 	return "test5"
 }
 
 // Функция высшего порядка для замещения ошибки.
-func (sf *testerOption) fnWrap() def_spec.ATxt {
+func (sf *testerOption) fnWrap() def_spec_base.ATxt {
 	return "test1"
 }
 
@@ -153,6 +152,6 @@ func (sf *testerOption) createSomeBad1() {
 			sf.t.Fatalf("createSomeBad1(): panic==nil")
 		}
 	}()
-	var str def_spec.ATxt
+	var str def_spec_base.ATxt
 	_ = NewSome(str)
 }

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

@@ -5,63 +5,63 @@ import (
 	"fmt"
 	"strings"
 
-	"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/defs/def_let_err"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
 // StrToTuf -- конвертация строки в ITuf.
-func StrToTuf(key, val def_spec.ATxt) def_spec.ATxt {
+func StrToTuf(key, val def_spec_base.ATxt) def_spec_base.ATxt {
 	keyCheck(key)
 
 	txtRes := "ATxt;" + string(key) + ";" + replace(val) + "\n"
-	return def_spec.ATxt(txtRes)
+	return def_spec_base.ATxt(txtRes)
 }
 
 // BoolToTuf -- конвертация bool в ITuf.
-func BoolToTuf(key def_spec.ATxt, val def_spec.Bool) def_spec.ATxt {
+func BoolToTuf(key def_spec_base.ATxt, val def_spec_base.Bool) def_spec_base.ATxt {
 	keyCheck(key)
 	txtRes := "Bool;" + string(key) + ";" + fmt.Sprint(val) + "\n"
-	return def_spec.ATxt(txtRes)
+	return def_spec_base.ATxt(txtRes)
 }
 
 // RecToTuf -- конвертация записи в TUF.
-func RecToTuf(type_, val def_spec.ATxt) def_spec.ATxt {
+func RecToTuf(type_, val def_spec_base.ATxt) def_spec_base.ATxt {
 	keyCheck(type_)
 	strRes := "Rec;" + string(type_) + ";" + replace(val) + "\n"
-	return def_spec.ATxt(strRes)
+	return def_spec_base.ATxt(strRes)
 }
 
 // RecFromTuf -- конвертация записи из TUF.
-func RecFromTuf(type_, val def_spec.ATxt) *def_spec.Result[def_spec.ATxt] {
+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.ATxt](
-			def_err.Err("tuf.RecFromTuf(): valTuf len(%v)!=3", len(lstField)))
+		return result.NewErr[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.ATxt](
-			def_err.Err("tuf.RecFromTuf(): valTuf(%v) not record", lstField[0]))
+		return result.NewErr[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.ATxt](
-			def_err.Err("tuf.RecFromTuf(): valTuf(%v) not valid type(%v)", lstField[1], type_))
+		return result.NewErr[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)
 }
 
 // Проверяет ключ на допустимое значение.
-func keyCheck(key def_spec.ATxt) {
-	helpers.If(def_spec.Bool(strings.Contains(string(key), ";"))).Hassert("tuf.keyCheck(): key contains ';'")
-	helpers.If(def_spec.Bool(strings.Contains(string(key), "\n"))).Hassert("tuf.keyCheck(): key contains '\\n'")
-	helpers.If(def_spec.Bool(strings.Contains(string(key), "="))).Hassert("tuf.keyCheck(): key contains '='")
+func keyCheck(key def_spec_base.ATxt) {
+	helpers.If(def_spec_base.Bool(strings.Contains(string(key), ";"))).Hassert("tuf.keyCheck(): key contains ';'")
+	helpers.If(def_spec_base.Bool(strings.Contains(string(key), "\n"))).Hassert("tuf.keyCheck(): key contains '\\n'")
+	helpers.If(def_spec_base.Bool(strings.Contains(string(key), "="))).Hassert("tuf.keyCheck(): key contains '='")
 }
 
 // Заменяет все запрещённые комбинации.
-func replace(val def_spec.ATxt) string {
+func replace(val def_spec_base.ATxt) string {
 	strVal := strings.ReplaceAll(string(val), "\r", "")
 	strVal = strings.ReplaceAll(strVal, "\n", "`NL")
 	strVal = strings.ReplaceAll(strVal, "`", "`TL")
@@ -71,10 +71,10 @@ func replace(val def_spec.ATxt) string {
 }
 
 // Восстанавливает строку.
-func restore(val string) def_spec.ATxt {
+func restore(val string) def_spec_base.ATxt {
 	strVal := strings.ReplaceAll(val, "`TL", "`")
 	strVal = strings.ReplaceAll(strVal, "`CS", ";")
 	strVal = strings.ReplaceAll(strVal, "`EQ", "=")
 	strVal = strings.ReplaceAll(strVal, "`NL", "\n")
-	return def_spec.ATxt(strVal)
+	return def_spec_base.ATxt(strVal)
 }

+ 0 - 83
v4/lev0/voc/etime/etime.go

@@ -1,83 +0,0 @@
-package etime
-
-import (
-	"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/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/tuf"
-)
-
-// ETime -- метка времени.
-// Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type ETime struct {
-	core_spec.ITimeFix
-	isFill defs.Bool // Признак заполнения
-}
-
-// NewETime -- создает новый экземпляр ETime.
-func NewETime(val core_spec.ITimeFix) core_spec.ITime {
-	helpers.If(val.Get() == "").Hassert("NewETime(): val is empty")
-	sf := &ETime{
-		ITimeFix: val,
-		isFill:   true,
-	}
-	return sf
-}
-
-// NewETimeAuto -- создаёт фиксированную авто-метку времени.
-func NewETimeAuto() core_spec.ITime {
-	sf := &ETime{
-		isFill: true,
-	}
-	val := defs.TxtFix(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST"))
-	sf.Set(core_spec.ITimeFix(val))
-	return sf
-}
-
-// NewETimeAutoMut -- создаёт изменяемую авто-метку времени.
-func NewETimeAutoMut() core_spec.ITimeMut {
-	sf := &ETime{
-		isFill: true,
-	}
-	val := defs.TxtFix(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST"))
-	sf.Set(val)
-	return sf
-}
-
-// String -- возвращает строку.
-func (sf *ETime) String() string {
-	helpers.If(sf.Get() == "").Hassert("ETime.String(): значение не инициализировано")
-	return sf.ITimeFix.String()
-}
-
-// Time -- возвращает типизированную строку.
-func (sf *ETime) Time() core_spec.ITimeFix {
-	helpers.If(sf.Get() == "").Hassert("ETime.Time(): значение не инициализировано")
-	return sf.ITimeFix
-}
-
-// Set -- устанавливает типизированное значение.
-func (sf *ETime) Set(val core_spec.ITimeFix) {
-	helpers.If(val.Get() == "").Hassert("ETime.Set(): val is empty")
-	sf.ITimeFix = val
-}
-
-// ToTuf -- сериализует себя в строку.
-func (sf *ETime) ToTuf() defs.ATxt {
-	txtRes := tuf.StrToTuf("val", sf.Get())
-	txtRes += tuf.BoolToTuf("isFill", sf.isFill)
-	txtRes = tuf.RecToTuf("ETime", txtRes)
-	return txtRes
-}
-
-// FromTuf -- десериализует из defs.ATxt в строки.
-func (sf *ETime) FromTuf(txtMsg defs.ATxt) defs.IOption[defs.IErr] {
-	resRec := tuf.RecFromTuf("ETime", txtMsg) // Получить текст записи
-	if resRec.IsErr() {
-		err := defs.Err("ETime.FromTuf(): in extract record from TUF, err=\n\t%v", resRec.Error())
-		return defs.NewSome(err)
-	}
-	return defs.NewNone[defs.IErr]()
-}

+ 0 - 25
v4/lev0/voc/etime/etime_test.go

@@ -1,25 +0,0 @@
-package etime
-
-import (
-	"testing"
-
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-)
-
-type testTime struct {
-	t *testing.T
-}
-
-func TestATime(t *testing.T) {
-	sf := &testTime{
-		t: t,
-	}
-	sf.get()
-}
-
-// Получение времени.
-func (t *testTime) get() {
-	a := NewETime(defs.TxtFix("123"))
-	_ = a.String()
-	_ = a.Time()
-}

+ 0 - 2
v4/lev0/voc/vbool/vbool.go

@@ -1,2 +0,0 @@
-// package vbool -- тип булева с маской признаков
-package vbool

+ 0 - 92
v4/lev0/voc/vmask/vmask.go

@@ -1,92 +0,0 @@
-// package vmask -- набор масок для защиты "снизу"
-package vmask
-
-import (
-	"encoding/json"
-)
-
-// AMask -- маска значения-объекта.
-type AMask byte
-
-// Mask -- маска для защиты "снизу".
-type Mask struct {
-	Val AMask // `json:"mask"` Набор признаков.
-}
-
-// VMask -- обёртка маски для защиты "снизу".
-type VMask struct {
-	val Mask // Набор признаков.
-}
-
-const (
-	CanMut     = AMask(0) // Признак мутабельности значения
-	CanDefault = AMask(1) // Признак значения по умолчанию
-	IsAuto     = AMask(2) // Признак авто-инициализации
-)
-
-// NewVMask -- создать маску для защиты "снизу".
-func NewVMask(mask AMask) VMask {
-	sf := VMask{
-		val: Mask{
-			Val: mask,
-		},
-	}
-	return sf
-}
-
-// IsAuto -- возвращает признак авто-инициализации.
-func (sf *VMask) IsAuto() bool {
-	return sf.val.Val&IsAuto != 0
-}
-
-// CanDefault -- возвращает признак значения по умолчанию.
-func (sf *VMask) CanDefault() bool {
-	return sf.val.Val&CanDefault != 0
-}
-
-// CanMut -- возвращает признак мутабельности.
-func (sf *VMask) CanMut() bool {
-	return sf.val.Val&CanMut != 0
-}
-
-// Get -- возвращает маску значения.
-func (sf *VMask) Get() AMask {
-	return sf.val.Val
-}
-
-// MarshalJSON -- реализация интерфейса Marshaler.
-func (sf *VMask) MarshalJSON() ([]byte, error) {
-	// Возвращаем кастомную строку JSON
-	return json.Marshal(sf.val)
-}
-
-// UnmarshalJSON -- реализация интерфейса Unmarshaler.
-func (sf *VMask) UnmarshalJSON(binData []byte) error {
-	var mask Mask
-	if err := json.Unmarshal(binData, &mask); err != nil {
-		return err
-	}
-	sf.val = mask
-	return nil
-}
-
-// String -- строковое представление маски.
-func (sf *VMask) String() string {
-	out := ""
-	if sf.CanMut() {
-		out += "CanMut"
-	}
-	if sf.CanDefault() {
-		if len(out) > 0 {
-			out += "|"
-		}
-		out += "CanDefault"
-	}
-	if sf.IsAuto() {
-		if len(out) > 0 {
-			out += "|"
-		}
-		out += "IsAuto"
-	}
-	return "[" + out + "]"
-}

+ 0 - 28
v4/lev0/voc/voc.go

@@ -1,28 +0,0 @@
-// package voc -- value-objects core
-package voc
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
-)
-
-// NewETime -- создать новую метку времени.
-//
-
-func NewETime(val core_spec.ITimeFix) core_spec.ITime {
-	return etime.NewETime(val)
-}
-
-// NewETimeAuto -- создать новую фиксированную авто-метку
-//
-
-func NewETimeAuto() core_spec.ITime {
-	return etime.NewETimeAuto()
-}
-
-// NewETimeAutoMut -- создать новую фиксированную авто-метку
-//
-
-func NewETimeAutoMut() core_spec.ITimeMut {
-	return etime.NewETimeAutoMut()
-}

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

@@ -3,8 +3,8 @@ package comp_spec
 import (
 	"context"
 
+	"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/lev1/local_ctx/ctx_value"
 )
 
@@ -15,13 +15,13 @@ type ICtxValue = ctx_value.ICtxValue
 type ILocalCtx interface {
 	core_spec.IRWMutex
 	// Get -- извлекает значение из контекста
-	Get(key defs.ITxtFix) core_spec.IOption[ICtxValue]
+	Get(key *lev0.LTxt) *lev0.Option[ICtxValue]
 	// Del -- удаляет значение из контекста
-	Del(key defs.ITxtFix)
+	Del(key *lev0.LTxt)
 	// Set -- добавляет значение в контекст
-	Set(key defs.ITxtFix, val any, comment any)
+	Set(key *lev0.LTxt, val any, comment any)
 	// Size -- возвращает размер словаря контекста
-	Size() defs.Int
+	Size() lev0.Int
 	// SortedList -- возвращает сортированный список объектов контекста
 	SortedList() []ICtxValue
 	// Cancel -- отменяет контекст

+ 1 - 2
v4/lev1/comp_spec/ilog_buf.go

@@ -2,7 +2,6 @@ package comp_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-		"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf/log_msg"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
@@ -15,7 +14,7 @@ type ILogMsg = log_msg.ILogMsg
 // ILogBus -- публикует в топики логи.
 type ILogBus interface {
 	// DebugAdd -- добавляет топик для отладочного сообщения
-	DebugAdd(topic bus_ent.ITopicFix, bus bus_spec.IBusClient) *lev0.Result[core_spec.EBool]
+	DebugAdd(topic bus_ent.ITopicFix, bus bus_spec.IBusClient) *lev0.Result[lev0.Bool]
 }
 
 // ILogBuf -- буферизованный лог для диагностики.

+ 0 - 118
v4/lev1/kint/kint.go

@@ -1,118 +0,0 @@
-// package kint -- целочисленная переменная ядра.
-package kint
-
-import (
-	"bytes"
-	"encoding/binary"
-	"os"
-	"strconv"
-
-	"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 KernInt struct {
-	val defs.Int
-}
-
-// NewInt -- возвращает новое целое ядра.
-func NewInt(val defs.Int) core_spec.Int {
-	sf := &KernInt{
-		val: val,
-	}
-	return sf
-}
-
-// Get -- возвращает хранимое значение потокобезопасной переменной.
-func (sf *KernInt) Get() defs.Int {
-	return sf.val
-}
-
-// Set -- устанавливает хранимое потокобезопасное значение.
-func (sf *KernInt) Set(val defs.Int) {
-	sf.val = val
-}
-
-// Inc -- увеличивает на единицу.
-func (sf *KernInt) Inc() {
-	sf.val++
-}
-
-// Dec -- уменьшает на единицу.
-func (sf *KernInt) Dec() {
-	sf.val--
-}
-
-// Reset -- сбрасывает хранимое потокобезопасное значение.
-func (sf *KernInt) Reset() {
-	sf.val = 0
-}
-
-// FromStr -- устанавливает значение из строки.
-func (sf *KernInt) FromStr(strVal defs.ITxtFix) *lev0.Result[defs.Int] {
-	iVal, err := strconv.Atoi(strVal.String())
-	if err != nil {
-		err := defs.Err("KInt.FromStr(): vak(%v) bad, err=\n\t%w", strVal, err)
-		return lev0.NewErr[defs.Int](err)
-	}
-	sf.val = defs.Int(iVal)
-	return lev0.NewOk(sf.val)
-}
-
-// ToStr -- возвращает как строку.
-func (sf *KernInt) ToStr() defs.ITxtFix {
-	return defs.TxtFix("%v", sf.val)
-}
-
-// FromByte -- устанавливает значение из байтов (BigEndian, net order).
-func (sf *KernInt) FromByte(binData []byte) *lev0.Result[defs.Int] {
-	lenBin := len(binData)
-	if lenBin < 8 {
-		err := defs.Err("KInt.FromByte(): len(%v) bytes shorts", lenBin)
-		return lev0.NewErr[defs.Int](err)
-	}
-	var signed int64
-	buf := bytes.NewReader(binData)
-	err := binary.Read(buf, binary.BigEndian, &signed)
-	if err != nil {
-		err := defs.Err("KInt.FromByte(): in read []byte, err=\n\t%w", err)
-		return lev0.NewErr[defs.Int](err)
-	}
-	sf.val = defs.Int(signed)
-	return lev0.NewOk(sf.val)
-}
-
-// ToByte -- возвращает как срез байт.
-func (sf *KernInt) ToByte() []byte {
-	buf := make([]byte, 8)
-	binary.BigEndian.PutUint64(buf, uint64(sf.val))
-	return buf
-}
-
-// FromBool -- устанавливает значение из булева.
-func (sf *KernInt) FromBool(isVal defs.Bool) defs.Int {
-	if isVal {
-		sf.val = -1
-		return -1
-	}
-	sf.val = 0
-	return 0
-}
-
-// ToBool -- возвращает как булево значение.
-func (sf *KernInt) ToBool() defs.Bool {
-	return sf.val != 0
-}
-
-// Getenv -- устанавливает значение из окружения.
-func (sf *KernInt) Getenv(env defs.ITxtFix) *lev0.Result[defs.Int] {
-	strVal := defs.ATxt(os.Getenv(env.String()))
-	res := sf.FromStr(defs.TxtFix(strVal))
-	if res.IsErr() {
-		err := defs.Err("safeInt.Getenv(): from env %v, err=\n\t%w", env, res.Err())
-		return lev0.NewErr[defs.Int](err)
-	}
-	return lev0.NewOk(sf.val)
-}

+ 0 - 135
v4/lev1/kint/kint_test.go

@@ -1,135 +0,0 @@
-package kint
-
-import (
-	"os"
-	"testing"
-
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-)
-
-type tester struct {
-	t *testing.T
-}
-
-func TestKInt(t *testing.T) {
-	sf := &tester{
-		t: t,
-	}
-	sf.new()
-}
-
-// новый KInt.
-func (sf *tester) new() {
-	sf.t.Log("new")
-	val := NewInt(12)
-	if val == nil {
-		sf.t.Fatalf("new(): val==nil")
-	}
-
-	sf.new0(val)
-	sf.new1(val)
-	sf.new2(val)
-	sf.new3(val)
-}
-
-var testVal = defs.TxtFix("TEST_VAL")
-
-func (sf *tester) new3(val Int) {
-	_ = os.Unsetenv("TEST_VAL")
-	_ = os.Setenv("TEST_VAL", "57")
-	resInt := val.Getenv(testVal)
-	resInt.Hassert("get env")
-	if resInt.Ok() != 57 {
-		sf.t.Fatalf("new(): isVal==true")
-	}
-
-	_ = os.Unsetenv(testVal.String())
-	_ = os.Setenv(testVal.String(), "u578")
-	resInt = val.Getenv(testVal)
-	if resInt.IsOk() {
-		sf.t.Fatalf("new(): ok==true")
-	}
-	if val.Get() != 57 {
-		sf.t.Fatalf("new(): val=%v !57", val.Get())
-	}
-
-	val.Inc()
-	if val.Get() != 58 {
-		sf.t.Fatalf("new(): val=%v !58", val.Get())
-	}
-	val.Dec()
-	if val.Get() != 57 {
-		sf.t.Fatalf("new(): val=%v !57", val.Get())
-	}
-}
-
-func (sf *tester) new2(val Int) {
-	binData := val.ToByte()
-	binData = binData[:2]
-	res := val.FromByte(binData)
-	if res.IsOk() {
-		sf.t.Fatalf("new(): err==nil")
-	}
-
-	resInt := val.FromByte([]byte("travolta"))
-	if resInt.IsErr() {
-		sf.t.Fatalf("new(): err==nil")
-	}
-
-	valBool := val.FromBool(true)
-	if valBool != -1 {
-		sf.t.Fatalf("new(): isVal==false")
-	}
-
-	valBool = val.FromBool(false)
-	if valBool != 0 {
-		sf.t.Fatalf("new(): isVal==true")
-	}
-	val.Set(3)
-	isBool := val.ToBool()
-	if !isBool {
-		sf.t.Fatalf("new(): isBool==false")
-	}
-}
-
-func (sf *tester) new1(val Int) {
-	resStr := val.FromStr(defs.TxtFix("k26"))
-	if val.Get() != 26 {
-		sf.t.Fatalf("new(): val=%v !26", val.Get())
-	}
-	if !resStr.IsErr() {
-		sf.t.Fatalf("new(): err==nil")
-	}
-	txtVal := val.ToStr()
-	if txtVal.Get() != "26" {
-		sf.t.Fatalf("new(): val=%v !26", txtVal.Get())
-	}
-	binData := val.ToByte()
-	if len(binData) != 8 {
-		sf.t.Fatalf("new(): len=%v !8", len(binData))
-	}
-	resInt := val.FromByte(binData)
-	resInt.Hassert("FromByte")
-
-}
-
-func (sf *tester) new0(val Int) {
-	val0 := val.Get()
-	if val0 != 12 {
-		sf.t.Fatalf("new(): val0=%v !12", val0)
-	}
-	val.Set(14)
-	if val.Get() != 14 {
-		sf.t.Fatalf("new(): val=%v !14", val.Get())
-	}
-	val.Reset()
-	if val.Get() != 0 {
-		sf.t.Fatalf("new(): val=%v !0", val.Get())
-	}
-	resStr := val.FromStr(defs.TxtFix("26"))
-	if val.Get() != 26 {
-		sf.t.Fatalf("new(): val=%v !26", val.Get())
-	}
-	resStr.Hassert("bad convert")
-}

+ 2 - 9
v4/lev1/lev1.go

@@ -10,7 +10,6 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kint"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
@@ -44,12 +43,12 @@ func NewSafeString() mKs.ISafeString {
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(strVal defs.ITxtFix) *lev0.Result[mKs.ISafeInt] {
+func NewSafeIntFromStr(strVal *lev0.LTxt) *lev0.Result[mKs.ISafeInt] {
 	return safe_int.NewSafeIntFromStr(strVal)
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeIntGetenv(env defs.ITxtFix) *lev0.Result[mKs.ISafeInt] {
+func NewSafeIntGetenv(env *lev0.LTxt) *lev0.Result[mKs.ISafeInt] {
 	return safe_int.NewSafeIntGetenv(env)
 }
 
@@ -78,12 +77,6 @@ func SleepMs() {
 	time.Sleep(time.Millisecond * 1)
 }
 
-// NewInt -- возвращает новую целочисленную переменную.
-func NewInt(val defs.Int) mKs.Int {
-	val_ := kint.NewInt(val)
-	return val_
-}
-
 // NewLocalCtx -- возвращает новый локальный контекст.
 func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx {
 	lCtx := local_ctx.NewLocalCtx(ctx)

+ 3 - 3
v4/lev1/lev1_test.go

@@ -4,7 +4,7 @@ package lev1
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
@@ -25,7 +25,7 @@ func TestLev1(t *testing.T) {
 
 func (sf *tester) newSafeIntGetenv() {
 	sf.t.Log("newSafeIntGetenv")
-	safeInt := NewSafeIntGetenv(defs.TxtFix("test_env"))
+	safeInt := NewSafeIntGetenv(lev0.LetTxt("test_env"))
 	if safeInt == nil {
 		sf.t.Fatalf("newSafeIntGetenv(): safeInt==nil")
 	}
@@ -33,7 +33,7 @@ func (sf *tester) newSafeIntGetenv() {
 
 func (sf *tester) newSafeIntFromStr() {
 	sf.t.Log("newSafeIntFromStr")
-	safeInt := NewSafeIntFromStr(defs.TxtFix("123"))
+	safeInt := NewSafeIntFromStr(lev0.LetTxt("123"))
 	if safeInt == nil {
 		sf.t.Fatalf("newSafeIntFromStr(): safeInt==nil")
 	}

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

@@ -4,17 +4,17 @@ package ctx_value
 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/lev0/voc/etime"
 )
 
 // ICtxValue -- интерфейс к значению локального контекста.
 type ICtxValue interface {
 	core_spec.IRWMutex
 	// Key -- возвращает ключ значения
-	Key() defs.ITxtFix
+	Key() *lev0.LTxt
 	// Val -- возвращает хранимое значение
 	Val() any
 	// CreateAt -- возвращает метку времени создания
@@ -22,34 +22,34 @@ type ICtxValue interface {
 	// UpdateAt -- возвращает метку времени обновления
 	UpdateAt() core_spec.ITimeMut
 	// Comment -- возвращает комментарий значения
-	Comment() defs.ITxtFix
+	Comment() *lev0.LTxt
 }
 
 // CtxValue -- потокобезопасное значение локального контекста.
 type CtxValue struct {
 	sync.RWMutex
-	key       defs.ITxtFix
-	createAt  core_spec.ITime
+	key       *lev0.LTxt
+	createAt  *lev0.LTime
 	Val_      any
-	UpdateAt_ core_spec.ITimeMut
-	Comment_  defs.ITxtFix
+	UpdateAt_ *lev0.MTime
+	Comment_  *lev0.LTxt
 }
 
 // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
-func NewCtxValue(key defs.ITxtFix, val any, comment any) ICtxValue {
+func NewCtxValue(key *lev0.LTxt, val any, comment lev0.ATxt) ICtxValue {
 	helpers.If(key == nil).Hassert("NewCtxValue(): key is empty", []any{})
 	sf := &CtxValue{
 		key:       key,
-		createAt:  etime.NewETimeAuto(),
-		UpdateAt_: etime.NewETimeAutoMut(),
+		createAt:  lev0.LetTimeAuto(),
+		UpdateAt_: lev0.MutTimeAuto(),
 		Val_:      val,
-		Comment_:  defs.TxtFix("%v", comment),
+		Comment_:  lev0.LetTxt(comment),
 	}
 	return sf
 }
 
 // Key -- возвращает ключ значения.
-func (sf *CtxValue) Key() defs.ITxtFix {
+func (sf *CtxValue) Key() *lev0.LTxt {
 	return sf.key
 }
 

+ 2 - 1
v4/lev1/local_ctx/ctx_value/ctx_value_test.go

@@ -3,6 +3,7 @@ package ctx_value
 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"
 )
@@ -23,7 +24,7 @@ func TestCtxValue(t *testing.T) {
 // Создаёт значение локального контекста.
 func (sf *tester) new() {
 	sf.t.Log("new")
-	sf.val = NewCtxValue(defs.TxtFix("test_key"), 5, "test_value")
+	sf.val = NewCtxValue(lev0.LetTxt("test_key"), 5, "test_value")
 	if sf.val == nil {
 		sf.t.Fatalf("new(): val==nil")
 	}

+ 9 - 10
v4/lev1/local_ctx/local_ctx.go

@@ -5,12 +5,11 @@ import (
 	"context"
 	"sync"
 
-	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"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/lev0/voc/etime"
 	"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"
@@ -22,13 +21,13 @@ import (
 type ILocalCtx interface {
 	core_spec.IRWMutex
 	// Get -- извлекает значение из контекста
-	Get(key defs.ITxtFix) core_spec.IOption[comp_spec.ICtxValue]
+	Get(key *lev0.LTxt) *lev0.Option[comp_spec.ICtxValue]
 	// Del -- удаляет значение из контекста
-	Del(key defs.ITxtFix)
+	Del(key *lev0.LTxt)
 	// Set -- добавляет значение в контекст
-	Set(key defs.ITxtFix, val any, comment any)
+	Set(key *lev0.LTxt, val any, comment any)
 	// Size -- возвращает размер словаря контекста
-	Size() defs.Int
+	Size() lev0.Int
 	// SortedList -- возвращает сортированный список объектов контекста
 	SortedList() []comp_spec.ICtxValue
 	// Cancel -- отменяет контекст
@@ -93,19 +92,19 @@ func (sf *LocalCtx) Log() comp_spec.ILogBuf {
 }
 
 // Get -- возвращает хранимое значение.
-func (sf *LocalCtx) Get(key defs.ITxtFix) mL0.IOption[comp_spec.ICtxValue] {
+func (sf *LocalCtx) Get(key defs.ITxtFix) *lev0.Option[comp_spec.ICtxValue] {
 	sf.RLock()
 	defer sf.RUnlock()
 	if key.Get() == "" {
-		return mL0.NewNone[comp_spec.ICtxValue]()
+		return lev0.NewNone[comp_spec.ICtxValue]()
 	}
 	msg := defs.TxtFix("Get(): key='%v'", key)
 	sf.log.Debug(msg)
 	val, isOk := sf.dictVal[key.Get()]
 	if !isOk {
-		return mL0.NewNone[comp_spec.ICtxValue]()
+		return lev0.NewNone[comp_spec.ICtxValue]()
 	}
-	return mL0.NewSome(val)
+	return lev0.NewSome(val)
 }
 
 // Del -- удаляет значение из контекста.

+ 5 - 6
v4/lev1/log_buf/log_msg/log_msg.go

@@ -5,20 +5,19 @@ import (
 	"fmt"
 
 	"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/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
 // ILogMsg -- сообщение лога.
 type ILogMsg interface {
 	defs.IString
 	// CreateAt -- когда создано
-	CreateAt() core_spec.ITime
+	CreateAt() lev0.Time
 	// Level -- уровень сообщения
-	Level() defs.ITxtMut
+	Level() *lev0.MTxt
 	// Msg -- текст сообщения
-	Msg() defs.ITxtFix
+	Msg() *lev0.LTxt
 }
 
 const (
@@ -33,7 +32,7 @@ const (
 type logMsg struct {
 	level     defs.ITxtMut
 	createdAt core_spec.ITime
-	msg       core_spec.ITimeFix
+	msg       core_spec.LTime
 }
 
 // NewLogMsg -- возвращает новое сообщение логгера.

+ 1 - 1
v4/lev2/kmodule/mod_stat/mod_stat_sec/mod_stat_sec.go

@@ -74,7 +74,7 @@ func (sf *ModStatSec) Add(val defs.Int) {
 // )
 
 // Svg -- возвращает сгенерированный SVG по минутному срезу.
-func (sf *ModStatSec) Svg() core_spec.ITimeFix {
+func (sf *ModStatSec) Svg() core_spec.LTime {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.bufSvg.Reset()

+ 1 - 1
v4/lev2/kserv_http/kserv_http.go

@@ -78,7 +78,7 @@ func GetKernelServHttp() kspec.IKernelServerHttp {
 
 	optMonolit := kCtx.Get(defs.TxtFix("monolitName"))
 	optMonolit.Hassert("GetKernelServHttp(): not have monolit name from kCtx")
-	strMonolit := optMonolit.Some().Val().(core_spec.ITimeFix)
+	strMonolit := optMonolit.Some().Val().(core_spec.LTime)
 	confFiber := fiber.Config{
 		ServerHeader: strMonolit.String(),
 		UnescapePath: true,