Kaynağa Gözat

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

SVI 4 ay önce
ebeveyn
işleme
964ced9539
53 değiştirilmiş dosya ile 180 ekleme ve 176 silme
  1. 3 2
      v4/docs/index.md
  2. 1 1
      v4/kern_test.go
  3. 4 4
      v4/lev0/etypes/estr/estr.go
  4. 4 4
      v4/lev0/helpers/helpers.go
  5. 5 5
      v4/lev0/option/option.go
  6. 15 23
      v4/lev0/result/result.go
  7. 4 4
      v4/lev0/voc/etime/etime.go
  8. 0 1
      v4/lev1/lev1.go
  9. 1 1
      v4/lev1/local_ctx/ctx_value/ctx_value.go
  10. 1 1
      v4/lev1/local_ctx/local_ctx.go
  11. 3 3
      v4/lev1/log_buf/log_buf.go
  12. 6 5
      v4/lev1/log_buf/log_msg/log_msg.go
  13. 3 3
      v4/lev1/lst_sort/lst_sort.go
  14. 13 15
      v4/lev1/mock_env/mock_env.go
  15. 8 8
      v4/lev2/kchan/kchan.go
  16. 1 0
      v4/lev2/kern_ent/kern_ent.go
  17. 0 0
      v4/lev2/kern_ent/stream_name/README.md
  18. 1 1
      v4/lev2/kern_ent/stream_name/stream_name.go
  19. 4 4
      v4/lev2/kernel_keeper/kernel_keeper.go
  20. 3 3
      v4/lev2/kmodule/kmodule.go
  21. 1 1
      v4/lev2/kmodule/mod_stat/mod_stat.go
  22. 3 3
      v4/lev2/kmonolit/kmonolit.go
  23. 4 5
      v4/lev2/kserv_http/kserv_http.go
  24. 1 1
      v4/lev2/kspec/ikernel_wg.go
  25. 5 5
      v4/lev2/kwg/kwg.go
  26. 1 1
      v4/lev2/kwg/kwg_test.go
  27. 1 1
      v4/lev2/log_topic/log_topic.go
  28. 6 6
      v4/lev2/lsi/kstore_kv/kstore_kv.go
  29. 1 1
      v4/lev2/lsi/kstore_kv/kstore_kv_test.go
  30. 3 3
      v4/lev2/lsi/kstore_kv_std/kv_bucket_base/kv_bucket_base.go
  31. 1 1
      v4/lev2/lsi/store_ent/rec_key/store_key.go
  32. 3 3
      v4/lev2/lsi/store_ent/rec_kv/rec_kv.go
  33. 2 2
      v4/lev2/lsi/store_ent/rec_meta/rec_meta.go
  34. 2 2
      v4/lev2/lsi/store_ent/rec_val/rec_val.go
  35. 1 1
      v4/lev2/lti/bus_ent/handler_name/handler_name.go
  36. 2 2
      v4/lev2/lti/bus_ent/topic/topic.go
  37. 2 2
      v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve.go
  38. 3 3
      v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http.go
  39. 2 2
      v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub.go
  40. 3 3
      v4/lev2/lti/dot/msg_pub/msg_pub.go
  41. 3 3
      v4/lev2/lti/dot/msg_serve/msg_serve.go
  42. 5 5
      v4/lev2/lti/dot/msg_sub/msg_sub.go
  43. 3 3
      v4/lev2/lti/dot/msg_unsub/msg_unsub.go
  44. 1 1
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go
  45. 2 2
      v4/lev2/lti/kbus/dict_topic_sub/dict_topic_sub.go
  46. 2 2
      v4/lev2/lti/kbus_base/kbus_base.go
  47. 22 11
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go
  48. 1 1
      v4/lev2/wui/hx_url_patch/hx_url_patch.go
  49. 1 1
      v4/lev2/wui/hx_vals/hx_vals.go
  50. 1 1
      v4/lev2/wui/wui_button/wui_button.go
  51. 1 1
      v4/lev3/mod_ent/module_name/module_name.go
  52. 7 7
      v4/lev3/mod_serv_http/mod_serv_http_test.go
  53. 4 2
      v4/lev3/mod_wui/mod_wui.go

+ 3 - 2
v4/docs/index.md

@@ -113,8 +113,9 @@ kern — фреймворк для создания модульных комп
 
 ## Сделать
 
-- +++ разложить Hassert и Assert на условия и действие!!!
-- BaseBus и LocalBus
+- [x] разложить Hassert и Assert на условия и действие!!!
+- +++ перейти на структурированный лог
+- ++ BaseBus и LocalBus упростить
 - перевести все базовые типы на внутренние
 - контрактные внутренние типы;
 - TUF сериализация/десериализация (собственная разработка, замена JSON);

+ 1 - 1
v4/kern_test.go

@@ -4,10 +4,10 @@ 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"
-	mL0  "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"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"

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

@@ -22,7 +22,7 @@ const msg1 = "EStr.OptStrMinLen: мин длина строки должна б
 
 // OptStrMinLen -- устанавливает минимальную длину строки.
 func OptStrMinLen(lenMin defs.Int) FnOptStr {
-	mHp.If(lenMin >= 0).Hassert(msg1)
+	mHp.If(lenMin < 0).Hassert(msg1)
 	return func(sf *EStr) {
 		sf.lenMin = lenMin
 	}
@@ -33,7 +33,7 @@ const msg2 = "EStr.OptStrMaxLen: макс длина строки должна 
 // OptStrMaxLen -- устанавливает максимальную длину строки.
 func OptStrMaxLen(lenMax defs.Int) FnOptStr {
 	return func(sf *EStr) {
-		mHp.If(lenMax >= sf.lenMin).Hassert(msg2)
+		mHp.If(lenMax < sf.lenMin).Hassert(msg2)
 		sf.lenMax = lenMax
 	}
 }
@@ -81,7 +81,7 @@ func NewStrMut(opt ...FnOptStr) mKs.EStrMut {
 
 // Set -- устанавливает значение расширенной строки.
 func (sf *EStr) Set(val defs.ITxtFix) {
-	mHp.If(sf.isMut).
+	mHp.If(!sf.isMut).
 		Hassert("EStrMut.Set(): нельзя изменить значение расширенной строки, если она не мутабельна, val=%q",
 			val.Get())
 	sf.val = val
@@ -91,7 +91,7 @@ func (sf *EStr) Set(val defs.ITxtFix) {
 // SelfCheck -- самопроверка расширенной строки.
 func (sf *EStr) SelfCheck() {
 	mHp.If(sf.val.Len() < sf.lenMin).
-		Hassert("EStr.SelfCheck(): строка не может быть %v", sf.lenMin)
+		Hassert("EStr.SelfCheck(): строка не может быть короче %v", sf.lenMin)
 	mHp.If(sf.val.Len() > sf.lenMax).
 		Hassert("EStr.SelfCheck(): строка не может быть длиннее %v",
 			sf.lenMax)

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

@@ -38,7 +38,7 @@ var (
 type IAssertAction interface {
 	// Assert -- жёсткое падение кроме прода
 	Assert(msgFormat def_spec.ATxt, args ...any)
-	// Hassert -- нжёсткое падение даже на проде
+	// Hassert -- жёсткое падение даже на проде
 	Hassert(msgFormat def_spec.ATxt, args ...any)
 }
 
@@ -50,7 +50,7 @@ type AssertAction struct {
 
 // Hassert -- проверка на правильность утверждения с безусловным падением в панику даже на проде (hard assert).
 func (sf *AssertAction) Hassert(msgFormat def_spec.ATxt, args ...any) {
-	if sf.isCond {
+	if !sf.isCond {
 		return
 	}
 	msg := def_spec.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
@@ -59,7 +59,7 @@ func (sf *AssertAction) Hassert(msgFormat def_spec.ATxt, args ...any) {
 
 // Assert -- проверка на правильность утверждения с падением в панику кроме прода (soft assert).
 func (sf *AssertAction) Assert(msgFormat def_spec.ATxt, args ...any) {
-	if sf.isCond {
+	if !sf.isCond {
 		return
 	}
 	msg := def_spec.Sprintf("SOFT ASSERT "+msgFormat+"\n", args...)
@@ -69,7 +69,7 @@ func (sf *AssertAction) Assert(msgFormat def_spec.ATxt, args ...any) {
 	log.Print(msg)
 }
 
-type FnIf func(isCond def_spec.Bool)IAssertAction
+type FnIf func(isCond def_spec.Bool) IAssertAction
 
 // If -- условие для проверки.
 func If(isCond def_spec.Bool) IAssertAction {

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

@@ -22,7 +22,7 @@ func NewSome[T any](value T) mKs.IOption[T] {
 	case reflect.Pointer, reflect.Slice, reflect.Map, reflect.Chan,
 		reflect.Func, reflect.Interface:
 		isNil := defs.Bool(v.IsNil())
-		mH.Hassert(!isNil, "NewSome[T any](): value==nil")
+		mH.If(isNil).Hassert("NewSome[T any](): value==nil")
 	}
 	sf := &Option[T]{some: &value}
 	return sf
@@ -47,7 +47,7 @@ func (sf *Option[T]) IsNone() bool {
 
 // Some - извлекает значение (паника, если None).
 func (sf *Option[T]) Some() T {
-	mH.Hassert(sf.some != nil, "Option[T].Some(): val==nil!")
+	mH.If(sf.some == nil).Hassert("Option[T].Some(): val==nil!")
 	return *sf.some
 }
 
@@ -61,7 +61,7 @@ func (sf Option[T]) SomeOr(defaultValue T) T {
 
 // SomeOrFn -- возвращает значение, если оно есть, или результат выполнения функции.
 func (sf *Option[T]) SomeOrFn(fn func() T) T {
-	mH.Hassert(fn != nil, "Option[T].SomeOrFn(): fn==nil")
+	mH.If(fn == nil).Hassert("Option[T].SomeOrFn(): fn==nil")
 	if sf.some == nil {
 		return fn()
 	}
@@ -70,12 +70,12 @@ func (sf *Option[T]) SomeOrFn(fn func() T) T {
 
 // Hassert -- проверяет, что не пустое значение (с паникой).
 func (sf *Option[T]) Hassert(msgFormat def_spec.ATxt, args ...any) T {
-	mH.Hassert(sf.some != nil, msgFormat, args...)
+	mH.If(sf.some == nil).Hassert(msgFormat, args...)
 	return *sf.some
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
 func (sf *Option[T]) Assert(msgFormat def_spec.ATxt, args ...any) T {
-	mH.Assert(sf.some != nil, msgFormat, args...)
+	mH.If(sf.some == nil).Assert(msgFormat, args...)
 	return *sf.some
 }

+ 15 - 23
v4/lev0/result/result.go

@@ -29,7 +29,7 @@ func NewOk[T any](result T) def_spec.IResult[T] {
 	switch v.Kind() {
 	case reflect.Pointer, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
 		isNil := def_spec.Bool(v.IsNil())
-		mKh.Hassert(!isNil, str5)
+		mKh.If(isNil).Hassert(str5)
 	}
 	sf := &Result[T]{
 		val: result,
@@ -44,7 +44,7 @@ var (
 
 // NewErr -- возвращает Result с ошибкой.
 func NewErr[T any](err error) def_spec.IResult[T] {
-	mKh.Hassert(err != nil, str6)
+	mKh.If(err == nil).Hassert(str6)
 	sf := &Result[T]{
 		err: err,
 	}
@@ -59,8 +59,8 @@ var (
 
 // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
 func WrapErr[T any](res def_spec.IResult[T], err error) def_spec.IResult[T] {
-	mKh.Hassert(res.IsErr(), str7)
-	mKh.Hassert(err != nil, str8)
+	mKh.If(res.IsOk()).Hassert(str7)
+	mKh.If(err == nil).Hassert(str8)
 	err0 := res.Err() // Чтобы не было паники при финализации и обернуть ошибку
 	err = fmt.Errorf("%v, err=\n\t%w", err0, err)
 	sf := NewErr[T](err)
@@ -72,9 +72,7 @@ var (
 )
 
 func (sf *Result[T]) destroy(res *Result[T]) {
-	if !res.isCheck {
-		mKh.Hassert(false, str9)
-	}
+	mKh.If(!res.isCheck).Hassert(str9)
 }
 
 // IsOk -- возвращает true, если Result содержит значение.
@@ -91,7 +89,7 @@ func (sf *Result[T]) IsErr() def_spec.Bool {
 
 // Ok -- возвращает значение, если оно есть, иначе паникует.
 func (sf *Result[T]) Ok() T {
-	mKh.Hassert(sf.err == nil, "Result[T].Ok(): err!=nil, err=\n\t%v", sf.err)
+	mKh.If(sf.err != nil).Hassert("Result[T].Ok(): err!=nil, err=\n\t%v", sf.err)
 	sf.isCheck = true
 	return sf.val
 }
@@ -112,7 +110,7 @@ var (
 
 // OkOrFn -- возвращает значение, если оно есть, или результат выполнения функции.
 func (sf *Result[T]) OkOrFn(fn func() T) T {
-	mKh.Hassert(fn != nil, str11)
+	mKh.If(fn == nil).Hassert(str11)
 	sf.isCheck = true
 	if sf.err != nil {
 		sf.val = fn()
@@ -127,7 +125,7 @@ var (
 
 // Err -- возвращает ошибку, если она есть.
 func (sf *Result[T]) Err() error {
-	mKh.Hassert(sf.err != nil, str12)
+	mKh.If(sf.err == nil).Hassert(str12)
 	sf.isCheck = true
 	return sf.err
 }
@@ -136,33 +134,27 @@ const str13 = "Result[T].Error(): err==nil"
 
 // Error -- возвращает строковое представление ошибки, если она есть.
 func (sf *Result[T]) Error() string {
-	mKh.Hassert(sf.err != nil, str13)
+	mKh.If(sf.err == nil).Hassert(str13)
 	sf.isCheck = true
 	return sf.err.Error()
 }
 
 // Hassert -- проверяет, что нет ошибки (с паникой).
 func (sf *Result[T]) Hassert(msgFormat def_spec.ATxt, args ...any) T {
-	txtErr := def_spec.ATxt("")
-	if !sf.isCheck {
-		txtErr = def_spec.Sprintf("Result[T].Hassert(): not check error, err=\n\t%v", sf.err)
-	} else {
-		txtErr = def_spec.Sprintf(msgFormat+txtErr, args...)
+	if sf.err != nil {
+		txtErr := def_spec.Sprintf("Result[T].Hassert(): have error, err=\n\t%v", sf.err)
+		mKh.If(sf.err != nil).Hassert(txtErr)
 	}
-	mKh.Hassert(sf.err == nil, txtErr)
 	sf.isCheck = true
 	return sf.val
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
 func (sf *Result[T]) Assert(msgFormat def_spec.ATxt, args ...any) T {
-	txtErr := def_spec.ATxt("")
-	if !sf.isCheck {
-		txtErr = def_spec.Sprintf("Result[T].Assert(): not check error, , err=\n\t%v", sf.err)
-	} else {
-		txtErr = def_spec.Sprintf(msgFormat+txtErr, args...)
+	if sf.err != nil {
+		txtErr := def_spec.Sprintf("Result[T].Assert(): have error, , err=\n\t%v", sf.err)
+		mKh.If(sf.err != nil).Assert(txtErr, args...)
 	}
-	mKh.Assert(sf.err == nil, txtErr, args...)
 	sf.isCheck = true
 	return sf.val
 }

+ 4 - 4
v4/lev0/voc/etime/etime.go

@@ -19,7 +19,7 @@ type ETime struct {
 
 // NewETime -- создает новый экземпляр ETime.
 func NewETime(val defs.ITimeFix) mKs.ITime {
-	helpers.Hassert(val.Get() != "", "NewETime(): val is empty")
+	helpers.If(val.Get() == "").Hassert("NewETime(): val is empty")
 	sf := &ETime{
 		ITimeFix: val,
 		isFill:   true,
@@ -49,19 +49,19 @@ func NewETimeAutoMut() mKs.ITimeMut {
 
 // String -- возвращает строку.
 func (sf *ETime) String() string {
-	helpers.Hassert(sf.Get() != "", "ETime.String(): значение не инициализировано")
+	helpers.If(sf.Get() == "").Hassert("ETime.String(): значение не инициализировано")
 	return sf.ITimeFix.String()
 }
 
 // Time -- возвращает типизированную строку.
 func (sf *ETime) Time() defs.ITimeFix {
-	helpers.Hassert(sf.Get() != "", "ETime.Time(): значение не инициализировано")
+	helpers.If(sf.Get() == "").Hassert("ETime.Time(): значение не инициализировано")
 	return sf.ITimeFix
 }
 
 // Set -- устанавливает типизированное значение.
 func (sf *ETime) Set(val defs.ITimeFix) {
-	helpers.Hassert(val.Get() != "", "ETime.Set(): val is empty")
+	helpers.If(val.Get() == "").Hassert("ETime.Set(): val is empty")
 	sf.ITimeFix = val
 }
 

+ 0 - 1
v4/lev1/lev1.go

@@ -8,7 +8,6 @@ import (
 	mL0 "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/lev0/helpers"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kint"

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

@@ -37,7 +37,7 @@ type CtxValue struct {
 
 // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
 func NewCtxValue(key defs.ITxtFix, val any, comment any) ICtxValue {
-	helpers.Hassert(key != nil, "NewCtxValue(): key is empty", []any{})
+	helpers.If(key == nil).Hassert("NewCtxValue(): key is empty", []any{})
 	sf := &CtxValue{
 		key:       key,
 		createAt:  etime.NewETimeAuto(),

+ 1 - 1
v4/lev1/local_ctx/local_ctx.go

@@ -54,7 +54,7 @@ type LocalCtx struct {
 
 // NewLocalCtx -- возвращает новый локальный контекст.
 func NewLocalCtx(ctx context.Context) ILocalCtx {
-	helpers.Hassert(ctx != nil, "NewLocalCtx(): ctx==nil", []any{})
+	helpers.If(ctx == nil).Hassert("NewLocalCtx(): ctx==nil", []any{})
 	_ctx, fnCancel := context.WithCancel(ctx)
 	paramLogBuf := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),

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

@@ -37,7 +37,7 @@ type ILogBuf interface {
 }
 
 var (
-	hassert = helpers.Hassert
+	If = helpers.If
 )
 
 // LogBufParam -- параметры логирующего буфера.
@@ -48,7 +48,7 @@ type LogBufParam struct {
 
 // SelfCheck -- проверяет корректность параметров.
 func (sf *LogBufParam) SelfCheck() {
-	hassert(sf.IsTerm_ != nil, "LogBufParam.SelfCheck(): IsTerm_==nil")
+	If(sf.IsTerm_ == nil).Hassert("LogBufParam.SelfCheck(): IsTerm_==nil")
 }
 
 // LogBuf -- потокобезопасный буфер лога.
@@ -61,7 +61,7 @@ type LogBuf struct {
 
 // NewLogBuf -- возвращает новый потокобезопасный буфер лога.
 func NewLogBuf(param *LogBufParam) ILogBuf {
-	hassert(param != nil, "NewLogBuf(): param=nil")
+	If(param == nil).Hassert("NewLogBuf(): param==nil")
 	param.SelfCheck()
 	sf := &LogBuf{
 		LogBufParam: param,

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

@@ -22,10 +22,11 @@ type ILogMsg interface {
 }
 
 const (
-	DEBUG = -3
-	INFO  = -2
-	WARN  = -1
-	ERROR = 0
+	DEBUG  = -4
+	INFO   = -3
+	WARN   = -2
+	ERROR  = -1
+	NOTSET = 0
 )
 
 // logMsg -- сообщение логгера.
@@ -78,6 +79,6 @@ func (sf *logMsg) check(level defs.Int) {
 	case ERROR:
 		sf.level.Set("ERRO")
 	default:
-		helpers.Hassert(false, "logMsg.check(): unknown level(%v)", []any{level})
+		helpers.If(true).Hassert("logMsg.check(): NOTSET level(%v)", []any{level})
 	}
 }

+ 3 - 3
v4/lev1/lst_sort/lst_sort.go

@@ -28,7 +28,7 @@ func NewLstSort() *LstSort {
 func (sf *LstSort) Add(val comp_spec.ICtxValue) {
 	sf.Lock()
 	defer sf.Unlock()
-	helpers.Hassert(val != nil, "LstSort.Add(): ICtxValue==nil", []any{})
+	helpers.If(val == nil).Hassert("LstSort.Add(): ICtxValue==nil", []any{})
 	sf.lstVal = append(sf.lstVal, val)
 	sf.sort()
 }
@@ -61,8 +61,8 @@ func (sf *LstSort) Size() defs.Int {
 func (sf *LstSort) Get(ind defs.Int) comp_spec.ICtxValue {
 	sf.RLock()
 	defer sf.RUnlock()
-	helpers.Hassert(ind >= 0, "LstSort.Get(): ind(%v)<0", []any{ind})
-	helpers.Hassert(ind < defs.Int(len(sf.lstVal)), "LstSort.Get(): ind(%v)>=len(%v)", []any{ind, len(sf.lstVal)})
+	helpers.If(ind < 0).Hassert("LstSort.Get(): ind(%v)<0", []any{ind})
+	helpers.If(ind >= defs.Int(len(sf.lstVal))).Hassert("LstSort.Get(): ind(%v)>=len(%v)", []any{ind, len(sf.lstVal)})
 	return sf.lstVal[ind]
 }
 

+ 13 - 15
v4/lev1/mock_env/mock_env.go

@@ -30,8 +30,7 @@ func MakeEnv() *MockEnv {
 	sf.setPath()
 	sf.readEnv()
 	sf.parseEnv()
-	err := sf.SetAll()
-	helpers.Hassert(err == nil, "MakeEnv(): SetAll, err=\n\t%v", []any{err})
+	sf.SetAll()
 	return sf
 }
 
@@ -53,9 +52,9 @@ func (sf *MockEnv) parseEnv() {
 // Парсит строку окружения.
 func (sf *MockEnv) parseEnvStr(pair defs.ITxtFix) {
 	lstPair := strings.Split(pair.String(), "=")
-	helpers.Hassert(len(lstPair) >= 2, "MockEnv.parseEnvStr(): pair(%v) not have =", []any{pair})
+	helpers.If(len(lstPair) < 2).Hassert("MockEnv.parseEnvStr(): pair(%v) not have =", []any{pair})
 	key := lstPair[0]
-	helpers.Hassert(key != "", "MockEnv.parseEnvStr(): in pair(%v) key is empty", []any{pair})
+	helpers.If(key == "").Hassert("MockEnv.parseEnvStr(): in pair(%v) key is empty", []any{pair})
 	lstVal := lstPair[1:]
 
 	val := ""
@@ -64,21 +63,21 @@ func (sf *MockEnv) parseEnvStr(pair defs.ITxtFix) {
 	}
 	val = strings.TrimSuffix(val, "=")
 
-	helpers.Hassert(val != "", "MockEnv.parseEnvStr(): in pair(%v) val is empty", []any{pair})
+	helpers.If(val == "").Hassert("MockEnv.parseEnvStr(): in pair(%v) val is empty", []any{pair})
 	sf.dictEnv[defs.ATxt(key)] = defs.TxtFix(val)
 }
 
 // Читает файл переменных окружения.
 func (sf *MockEnv) readEnv() {
 	binEnv, err := os.ReadFile(sf.fileName.String())
-	helpers.Hassert(err == nil, "MockEnv.readEnv(): in read %v, err=\n\t%v", []any{sf.fileName, err})
+	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))
 }
 
 // Устанавливает текущий путь относительно проекта в dev.
 func (sf *MockEnv) setPath() {
 	dir, err := os.Getwd()
-	helpers.Hassert(err == nil, "MockEnv.setPath(): in get PWD, err=\n\t%v", []any{err})
+	helpers.If(err != nil).Hassert("MockEnv.setPath(): in get PWD, err=\n\t%v", []any{err})
 	lstDir := strings.Split(dir, "/")
 	var pwd strings.Builder
 	fileName := ""
@@ -92,12 +91,12 @@ func (sf *MockEnv) setPath() {
 			break
 		}
 	}
-	helpers.Hassert(isFind, "MockEnv.setPath(): not find file .env", []any{})
+	helpers.If(!isFind).Hassert("MockEnv.setPath(): not find file .env", []any{})
 	sf.pwd = defs.TxtFix(pwd.String() + "/bin_dev")
 	err = os.MkdirAll(sf.pwd.String(), 0750)
-	helpers.Hassert(err == nil, "MockEnv.setPath(): in create PWD, err=\n\t%v", []any{err})
+	helpers.If(err != nil).Hassert("MockEnv.setPath(): in create PWD, err=\n\t%v", []any{err})
 	err = os.Chdir(sf.pwd.String())
-	helpers.Hassert(err == nil, "MockEnv.setPath(): in set cwd(%v), err=\n\t%v", []any{sf.pwd, err})
+	helpers.If(err != nil).Hassert("MockEnv.setPath(): in set cwd(%v), err=\n\t%v", []any{sf.pwd, err})
 	sf.fileName = defs.TxtFix(fileName)
 }
 
@@ -107,14 +106,13 @@ func (sf *MockEnv) Pwd() defs.ITxtFix {
 }
 
 // SetAll -- поднимает все переменные окружения.
-func (sf *MockEnv) SetAll() error {
+func (sf *MockEnv) SetAll() {
 	sf.ResetAll()
 	for key, val := range sf.dictEnv {
 		sf.Reset(defs.TxtFix("key"))
 		err := os.Setenv(string(key), val.String())
-		helpers.Hassert(err == nil, "MockEnv.SetAll(): in set env %v on key %v, err=\n\t%v", []any{key, val, err})
+		helpers.If(err != nil).Hassert("MockEnv.SetAll(): in set env %v on key %v, err=\n\t%v", []any{key, val, err})
 	}
-	return nil
 }
 
 // ResetAll -- сбрасывает все переменные окружения.
@@ -126,7 +124,7 @@ func (sf *MockEnv) ResetAll() {
 
 // Reset -- сбрасывает конкретный ключ.
 func (sf *MockEnv) Reset(key defs.ITxtFix) {
-	helpers.Hassert(key.Get() != "", "MockEnv.Reset(): key is empty", []any{})
+	helpers.If(key.Get() == "").Hassert("MockEnv.Reset(): key is empty", []any{})
 	err := os.Unsetenv(key.String())
-	helpers.Hassert(err == nil, "MockEnv.Reset(): in reset env %v, err=\n\t%v", []any{key, err})
+	helpers.If(err != nil).Hassert("MockEnv.Reset(): in reset env %v, err=\n\t%v", []any{key, err})
 }

+ 8 - 8
v4/lev2/kchan/kchan.go

@@ -7,12 +7,13 @@ import (
 	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/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
 var (
-	hassert = mL0.Hassert
+	If = helpers.If
 )
 
 // KChanParam -- параметры умного канала.
@@ -25,14 +26,13 @@ type KChanParam[T any] struct {
 	Ctx_     comp_spec.ILocalCtx // Локальный контекст для контроля создателя
 }
 
-var msg1 = defs.TxtFix("KChanParam[T]: ctx==nil")
+var msg1 = defs.ATxt("KChanParam[T]: ctx==nil")
 
 // SelfCheck -- проверка корректности правильности параметров умного канала.
 func (sf *KChanParam[T]) SelfCheck() {
-	hassert(sf.Limit_ > 0,
-		defs.TxtFix("KChanParam[T].SelfCheck(): limit=%v, канал должен иметь положительный лимит",
-			sf.Limit_))
-	hassert(sf.Ctx_ != nil, msg1)
+	If(sf.Limit_ <= 0).Hassert("KChanParam[T].SelfCheck(): limit=%v, канал должен иметь положительный лимит",
+		sf.Limit_)
+	If(sf.Ctx_ == nil).Hassert(msg1)
 }
 
 // KChan -- умный потокобезопасный канал
@@ -53,11 +53,11 @@ type KChan[T any] struct {
 	lstMsg   []T
 }
 
-var msg2 = defs.TxtFix("NewKChan: param==nil")
+var msg2 = defs.ATxt("NewKChan: param==nil")
 
 // NewKChan -- создаёт новый безопасный умный канал.
 func NewKChan[T any](param *KChanParam[T]) core_spec.IChan[T] {
-	hassert(param != nil, msg2)
+	If(param == nil).Hassert(msg2)
 	param.SelfCheck()
 	sf := &KChan[T]{
 		KChanParam: param,

+ 1 - 0
v4/lev2/kern_ent/kern_ent.go

@@ -0,0 +1 @@
+package kern_ent

+ 0 - 0
v4/lev0/defs/stream_name/README.md → v4/lev2/kern_ent/stream_name/README.md


+ 1 - 1
v4/lev0/defs/stream_name/stream_name.go → v4/lev2/kern_ent/stream_name/stream_name.go

@@ -12,7 +12,7 @@ type AStreamName struct {
 
 // NewAStreamName -- создать новое имя потока.
 func NewAStreamName(val defs.ITxtFix) *AStreamName {
-	helpers.If(val.Get() != "").Hassert("NewAStreamName(): val is empty")
+	helpers.If(val.Get() == "").Hassert("NewAStreamName(): val is empty")
 	sf := &AStreamName{
 		ITxtFix: val,
 	}

+ 4 - 4
v4/lev2/kernel_keeper/kernel_keeper.go

@@ -9,11 +9,11 @@ import (
 	"syscall"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
 	"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/lev1/safe_bool"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
@@ -41,9 +41,9 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(),
 		kernKeep.log.Debug(defs.TxtFix("GetKernelKeeper()"))
 		return kernKeep
 	}
-	helpers.Hassert(ctx != nil, "NewKernelCtx(): ctx==nil", []any{})
-	helpers.Hassert(wg != nil, "NewKernelCtx(): IKernelWg==nil", []any{})
-	helpers.Hassert(fnCancel != nil, "NewKernelCtx(): fnCancel==nil", []any{})
+	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{})
 
 	paramLogBuf := &mL1.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),

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

@@ -35,7 +35,7 @@ type kModule struct {
 
 // NewKernelModule -- возвращает новый модуль на основе ядра.
 func NewKernelModule(name module_name.IModuleNameFix) mod_spec.IKernelModule {
-	helpers.Hassert(name != nil, "NewKernelModule(): name==nil", []any{})
+	helpers.If(name == nil).Hassert("NewKernelModule(): name==nil", []any{})
 	kCtx := kctx.GetKernelCtx()
 	sf := &kModule{
 		kCtx:      kCtx,
@@ -67,7 +67,7 @@ func (sf *kModule) Ctx() comp_spec.ILocalCtx {
 
 // Run -- запускает модуль в работу.
 func (sf *kModule) Run() {
-	helpers.Hassert(false, "kModule.Run(): module='%v', parent not realized this method", []any{sf.name})
+	helpers.If(true).Hassert("kModule.Run(): module='%v', parent not realized this method", []any{sf.name})
 }
 
 // Name -- возвращает уникальное имя модуля.
@@ -77,7 +77,7 @@ func (sf *kModule) Name() module_name.IModuleNameFix {
 
 // IsWork -- возвращает признак состояния работы.
 func (sf *kModule) IsWork() core_spec.EBool {
-	helpers.Hassert(false, "kModule.IsWork(): module='%v', parent not realized this method", []any{sf.name})
+	helpers.If(true).Hassert("kModule.IsWork(): module='%v', parent not realized this method", []any{sf.name})
 	return ebool.NewEBool(false)
 }
 

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

@@ -31,7 +31,7 @@ type ModStat struct {
 
 // NewModStat -- возвращает новую статистику модуля.
 func NewModStat(name module_name.IModuleNameFix) *ModStat {
-	mKh.Hassert(name != nil, "NewModuleStat(): name==nil")
+	mKh.If(name == nil).Hassert("NewModuleStat(): name==nil")
 	sf := &ModStat{
 		statSec:    mod_stat_sec.NewModStatSec(),
 		statMin:    mod_stat_day.NewModStatDay(),

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

@@ -44,7 +44,7 @@ func GetMonolit(name mod_ent.AModuleName) *kMonolit {
 	if mon != nil {
 		return mon
 	}
-	mKh.Hassert(name != "", "NewMonolit(): name is empty")
+	mKh.If(name == "").Hassert("NewMonolit(): name is empty")
 	kCtx := kctx.GetKernelCtx()
 	opt := kCtx.Get(txtIsLocal)
 	opt.Hassert("GetMonolit(): in get from kernCtx isLocal -- not found")
@@ -87,9 +87,9 @@ func (sf *kMonolit) Name() mod_ent.AModuleName {
 func (sf *kMonolit) Add(module mod_spec.IKernelModule) {
 	sf.kCtx.RLock()
 	defer sf.kCtx.RUnlock()
-	mKh.Hassert(module != nil, "kMonolit.Add(): module==nil", []any{})
+	mKh.If(module == nil).Hassert("kMonolit.Add(): module==nil", []any{})
 	_, isOk := sf.dict[module.Name().Get()]
-	mKh.Hassert(!defs.Bool(isOk), "kMonolit.Add(): module(%v) already exists", []any{module.Name()})
+	mKh.If(defs.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()))
 	if sf.isWork.Get() {

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

@@ -18,13 +18,13 @@ 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/defs/stream_name"
 	"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/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
@@ -50,8 +50,7 @@ var embedDirStatic embed.FS
 var (
 	kernServHttp *kServHttp
 	block        sync.Mutex
-	assert       = helpers.Assert
-	hassert      = helpers.Hassert
+	If           = helpers.If
 )
 
 func getParams() (defs.ITxtFix, comp_spec.ILogBuf, kspec.IKernelCtx) {
@@ -62,7 +61,7 @@ func getParams() (defs.ITxtFix, comp_spec.ILogBuf, kspec.IKernelCtx) {
 	log := mL1.NewLogBuf(param)
 	log.Debug(defs.TxtFix("GetKernelServHttp(): first run"))
 	strLocalUrl := os.Getenv("LOCAL_HTTP_URL")
-	hassert(strLocalUrl != "", "getParams(): env LOCAL_HTTP_URL not set")
+	If(strLocalUrl == "").Hassert("getParams(): env LOCAL_HTTP_URL not set")
 	kCtx := kctx.GetKernelCtx()
 	return defs.TxtFix(strLocalUrl), log, kCtx
 }
@@ -201,7 +200,7 @@ func (sf *kServHttp) close() {
 	sf.isWork.Reset()
 	sf.isEnd.Set()
 	err := sf.fiberApp.Server().Shutdown()
-	assert(err == nil, "kServHttp.close(): in close server, err=\n\t%v", err)
+	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"))
 }

+ 1 - 1
v4/lev2/kspec/ikernel_wg.go

@@ -3,8 +3,8 @@ 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/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 )
 
 // IKernelWg -- интерфейс к именованному ожидателю потоков.

+ 5 - 5
v4/lev2/kwg/kwg.go

@@ -10,13 +10,13 @@ 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/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	mKh "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/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
@@ -42,7 +42,7 @@ func GetKernelWg(ctx context.Context) kspec.IKernelWg {
 		kernWg.log.Debug(defs.TxtFix("GetKernelWg()"))
 		return kernWg
 	}
-	mKh.Hassert(ctx != nil, "GetKernelWg(): ctx==nil")
+	mKh.If(ctx == nil).Hassert("GetKernelWg(): ctx==nil")
 	paramLogBuf := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
 		Prefix_: defs.TxtFix("kernelWg"),
@@ -115,10 +115,10 @@ func (sf *kernelWg) Add(name *stream_name.AStreamName) {
 	defer sf.Unlock()
 	msg := defs.TxtFix("Add(): stream('%v') done", name)
 	sf.log.Debug(msg)
-	mKh.Hassert(sf.isWork.Get(), "Add(): stream=%v, work end", []any{name})
-	mKh.Hassert(name.Get() != "", "Add(): name stream is empty")
+	mKh.If(!sf.isWork.Get()).Hassert("Add(): stream=%v, work end", []any{name})
+	mKh.If(name.Get() == "").Hassert("Add(): name stream is empty")
 	_, isOk := sf.dictStream[name]
-	mKh.Hassert(!defs.Bool(isOk), "Add(): stream '%v' already exists", name)
+	mKh.If(defs.Bool(isOk)).Hassert("Add(): stream '%v' already exists", name)
 	sf.dictStream[name] = true
 }
 

+ 1 - 1
v4/lev2/kwg/kwg_test.go

@@ -6,7 +6,7 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 

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

@@ -18,7 +18,7 @@ type LogTopic struct {
 
 // NewLogTopic -- возвращает новый элемент лога.
 func NewLogTopic(topic topic.ITopicFix, client bus_spec.IBusClient) mL0.IResult[*LogTopic] {
-	helpers.Hassert(topic != nil, "NewLogTopic(): topic==nil", []any{})
+	helpers.If(topic == nil).Hassert("NewLogTopic(): topic==nil", []any{})
 	if client == nil {
 		err := defs.Err("NewLogTopic(): IBusClient==nil")
 		return mL0.NewErr[*LogTopic](err)

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

@@ -11,7 +11,6 @@ import (
 	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/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
@@ -19,6 +18,7 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
@@ -177,14 +177,14 @@ func (sf *kStoreKv) open() {
 	defer sf.Unlock()
 	sf.log.Debug(defs.TxtFix("open()"))
 	strPath := os.Getenv("LOCAL_STORE_PATH")
-	mKh.Hassert(strPath != "", "open(): env LOCAL_STORE_PATH not set")
+	mKh.If(strPath == "").Hassert("open(): env LOCAL_STORE_PATH not set")
 	pwd, err := os.Getwd()
-	mKh.Hassert(err == nil, "open(): in get PWD, err=\n\t%v", err)
+	mKh.If(err != nil).Hassert("open(): in get PWD, err=\n\t%v", err)
 	sf.storePath = defs.TxtFix(pwd + strPath + "/db_local")
 	err = os.MkdirAll(sf.storePath.String(), 0750)
-	mKh.Hassert(err == nil, "open(): in make dir %v, err=\n\t%v", sf.storePath, err)
+	mKh.If(err != nil).Hassert("open(): in make dir %v, err=\n\t%v", sf.storePath, err)
 	sf.db, err = badger.Open(badger.DefaultOptions(sf.storePath.String()))
-	mKh.Hassert(err == nil, "open(): in open DB %v, err=\n\t%v", sf.storePath, err)
+	mKh.If(err != nil).Hassert("open(): in open DB %v, err=\n\t%v", sf.storePath, err)
 	sf.wg.Add(storeStreamName)
 	sf.isWork.Set()
 	go sf.close()
@@ -236,7 +236,7 @@ func (sf *kStoreKv) close() {
 	<-chWait
 	sf.isWork.Reset()
 	err := sf.db.Close()
-	mKh.Assert(err == nil, "kStoreKv.close(): in close DB, err=\n\t%v", err)
+	mKh.If(err != nil).Assert("kStoreKv.close(): in close DB, err=\n\t%v", err)
 	sf.wg.Done(storeStreamName)
 	sf.log.Debug(defs.TxtFix("close(): done"))
 }

+ 1 - 1
v4/lev2/lsi/kstore_kv/kstore_kv_test.go

@@ -7,9 +7,9 @@ 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/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"

+ 3 - 3
v4/lev2/lsi/kstore_kv_std/kv_bucket_base/kv_bucket_base.go

@@ -35,9 +35,9 @@ type KvBucketBase struct {
 
 // NewKvBucketBase -- создание нового базового бакета хранилища KV.
 func NewKvBucketBase(name defs.ITxtFix, level, number defs.Int) *KvBucketBase {
-	helpers.Hassert(name.Get() != "", "NewKvBucketBase: name is empty", []any{})
-	helpers.Hassert(level >= 0, "NewKvBucketBase: level is negative", []any{})
-	helpers.Hassert(number >= 0, "NewKvBucketBase: number is negative", []any{})
+	helpers.If(name.Get() == "").Hassert("NewKvBucketBase: name is empty", []any{})
+	helpers.If(level < 0).Hassert("NewKvBucketBase: level is negative", []any{})
+	helpers.If(number < 0).Hassert("NewKvBucketBase: number is negative", []any{})
 	sf := &KvBucketBase{
 		Name_:      name,
 		Level_:     level,

+ 1 - 1
v4/lev2/lsi/store_ent/rec_key/store_key.go

@@ -26,7 +26,7 @@ type RecKey struct {
 
 // NewRecKey -- создать новый ключ хранилища.
 func NewRecKey(val ARecKey) *RecKey {
-	helpers.Hassert(val != "", "NewRecKey(): val is empty")
+	helpers.If(val == "").Hassert("NewRecKey(): val is empty")
 	return &RecKey{
 		val: val,
 	}

+ 3 - 3
v4/lev2/lsi/store_ent/rec_kv/rec_kv.go

@@ -9,7 +9,7 @@ import (
 )
 
 var (
-	hassert = helpers.Hassert
+	If = helpers.If
 )
 
 // IRecKvFix -- интерфейс записи KV-хранилища.
@@ -31,8 +31,8 @@ type RecKv struct {
 
 // NewRecKv -- создает новую запись.
 func NewRecKv(key rec_key.IRecKeyFix, val rec_val.IRecValFix) *RecKv {
-	hassert(key != nil, "NewRecKv(): key==nil")
-	hassert(val != nil, "NewRecKv(): val==nil")
+	If(key == nil).Hassert("NewRecKv(): key==nil")
+	If(val == nil).Hassert("NewRecKv(): val==nil")
 	meta := rec_meta.NewRecMeta(key)
 	sf := &RecKv{
 		key:  key,

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

@@ -10,7 +10,7 @@ import (
 )
 
 var (
-	hassert = helpers.Hassert
+	If = helpers.If
 )
 
 // IRecMeta -- интерфейс мета-информации записи KV-хранилища.
@@ -45,7 +45,7 @@ type RecMeta struct {
 
 // NewRecMeta -- создание новой мета-информации записи KV-хранилища.
 func NewRecMeta(key rec_key.IRecKeyFix) *RecMeta {
-	hassert(key != nil, "NewRecMeta: key==nil")
+	If(key == nil).Hassert("NewRecMeta: key==nil")
 	sf := &RecMeta{
 		Key_:       key.Get(),
 		Vers_:      1,

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

@@ -12,7 +12,7 @@ type IRecValFix interface {
 }
 
 var (
-	hassert = helpers.Hassert
+	If = helpers.If
 )
 
 // RecVal -- запись KV-хранилища.
@@ -26,7 +26,7 @@ type RecVal struct {
 
 // NewRecVal -- создание нового значения KV-хранилища.
 func NewRecVal(val []byte) *RecVal {
-	hassert(val != nil, "NewRecVal: key is empty")
+	If(val == nil).Hassert("NewRecVal: key is empty")
 	sf := &RecVal{
 		Val_: val,
 	}

+ 1 - 1
v4/lev2/lti/bus_ent/handler_name/handler_name.go

@@ -26,7 +26,7 @@ type HandlerName struct {
 
 // NewHandlerName -- создать новое имя функции обработчика.
 func NewHandlerName(val AHandlerName) *HandlerName {
-	helpers.Assert(val != "", "NewAHandlerName: val is empty")
+	helpers.If(val == "").Assert("NewAHandlerName: val is empty")
 	sf := &HandlerName{
 		val: defs.TxtFix(val),
 	}

+ 2 - 2
v4/lev2/lti/bus_ent/topic/topic.go

@@ -29,7 +29,7 @@ type Topic struct {
 
 // NewTopic -- создает новый топик.
 func NewTopic(val ATopic) *Topic {
-	helpers.Hassert(val != "", "NewTopic(): val is empty")
+	helpers.If(val == "").Hassert("NewTopic(): val is empty")
 	sf := &Topic{
 		val: val,
 	}
@@ -49,6 +49,6 @@ func (sf *Topic) Get() ATopic {
 
 // Set -- установить строковое представление топика.
 func (sf *Topic) Set(val ATopic) {
-	helpers.Hassert(val != "", "Topic.Set(): val is empty")
+	helpers.If(val == "").Hassert("Topic.Set(): val is empty")
 	sf.val = val
 }

+ 2 - 2
v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve.go

@@ -24,8 +24,8 @@ type MockHandlerServe struct {
 
 // NewMockHandlerServe -- возвращает новый обработчик подписки.
 func NewMockHandlerServe(topic bus_ent.ITopicFix, name bus_ent.AHandlerName) *MockHandlerServe {
-	mKh.Hassert(topic.String() != "", "NewMockHandlerServe(): topic is empty")
-	mKh.Hassert(name != "", "NewMockHandlerServe(): name is empty")
+	mKh.If(topic.Get() == "").Hassert("NewMockHandlerServe(): topic is empty")
+	mKh.If(name == "").Hassert("NewMockHandlerServe(): name is empty")
 	sf := &MockHandlerServe{
 		Topic_: topic,
 		Name_:  bus_ent.NewHandlerNameFix(name),

+ 3 - 3
v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http.go

@@ -25,8 +25,8 @@ type MockHandSubHttp struct {
 
 // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP.
 func NewMockHandSubHttp(topic bus_ent.ITopicFix, webHook defs.ITxtFix) bus_spec.IBusHandlerSubscribe {
-	mKh.Hassert(topic != nil, "NewHandlerHttpSub(): topic is empty")
-	mKh.Hassert(webHook.Get() != "", "NewHandlerHttpSub(): webHook is empty")
+	mKh.If(topic == nil).Hassert("NewHandlerHttpSub(): topic is empty")
+	mKh.If(webHook.Get() == "").Hassert("NewHandlerHttpSub(): webHook is empty")
 	sf := &MockHandSubHttp{
 		Topic_: topic,
 		Name_: bus_ent.IHandlerNameFix(
@@ -47,7 +47,7 @@ func (sf *MockHandSubHttp) Topic() bus_ent.ITopicFix {
 func (sf *MockHandSubHttp) SetName(name bus_ent.IHandlerNameFix) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
-	mKh.Hassert(name != nil, "HandlerHttpSub.SetName(): name is empty")
+	mKh.If(name == nil).Hassert("HandlerHttpSub.SetName(): name==nil")
 	sf.Name_ = name
 }
 

+ 2 - 2
v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub.go

@@ -21,8 +21,8 @@ type MockHandlerSub struct {
 
 // NewMockHandlerSub -- возвращает новый обработчик подписки.
 func NewMockHandlerSub(topic bus_ent.ITopicFix, localHook defs.ITxtFix) *MockHandlerSub {
-	mKh.Hassert(topic != nil, "NewMockHandlerSub(): topic is nil")
-	mKh.Hassert(localHook != nil, "NewMockHandlerSub(): name is empty")
+	mKh.If(topic == nil).Hassert("NewMockHandlerSub(): topic is nil")
+	mKh.If(localHook == nil).Hassert("NewMockHandlerSub(): name is empty")
 	handlerName := bus_ent.NewHandlerNameFix(bus_ent.AHandlerName(localHook.String() + "_" + rand.Text()))
 	sf := &MockHandlerSub{
 		Topic_: topic,

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

@@ -16,8 +16,8 @@ type PublishReq struct {
 
 // SelfCheck -- проверяет правильность своих полей.
 func (sf *PublishReq) SelfCheck() {
-	mKh.Hassert(sf.Topic_ != "", "PublishReq.SelfCheck(): topic is empty")
-	mKh.Hassert(sf.Uuid_ != nil, "PublishReq.SelfCheck(): uuid is empty")
+	mKh.If(sf.Topic_ == "").Hassert("PublishReq.SelfCheck(): topic is empty")
+	mKh.If(sf.Uuid_ == nil).Hassert("PublishReq.SelfCheck(): uuid is empty")
 }
 
 // PublishResp -- ответ на запрос публикации.
@@ -28,5 +28,5 @@ type PublishResp struct {
 
 // SelfCheck -- проверяет правильность своих полей.
 func (sf *PublishResp) SelfCheck() {
-	mKh.Hassert(sf.Status_ != nil, "PublishResp.SelfCheck(): status is empty")
+	mKh.If(sf.Status_ == nil).Hassert("PublishResp.SelfCheck(): status is empty")
 }

+ 3 - 3
v4/lev2/lti/dot/msg_serve/msg_serve.go

@@ -16,8 +16,8 @@ type ServeReq struct {
 
 // SelfCheck -- проверяет структуру на правильность полей.
 func (sf *ServeReq) SelfCheck() {
-	mKh.Hassert(sf.Topic_ != "", "ServeReq.SelfCheck(): topic is empty")
-	mKh.Hassert(sf.Uuid_.Get() != "", "ServeReq.SelfCheck(): uuid is empty")
+	mKh.If(sf.Topic_ == "").Hassert("ServeReq.SelfCheck(): topic is empty")
+	mKh.If(sf.Uuid_.Get() == "").Hassert("ServeReq.SelfCheck(): uuid is empty")
 }
 
 // ServeResp -- ответ на входящий запрос.
@@ -29,5 +29,5 @@ type ServeResp struct {
 
 // SelfCheck -- проверяет правильность своих полей.
 func (sf *ServeResp) SelfCheck() {
-	mKh.Hassert(sf.Status_.Get() != "", "ServeResp.SelfCheck(): status is empty")
+	mKh.If(sf.Status_.Get() == "").Hassert("ServeResp.SelfCheck(): status is empty")
 }

+ 5 - 5
v4/lev2/lti/dot/msg_sub/msg_sub.go

@@ -16,9 +16,9 @@ type SubscribeReq struct {
 
 // SelfCheck -- проверяет поля на правильность.
 func (sf *SubscribeReq) SelfCheck() {
-	mKh.Hassert(sf.Topic_ != "", "SubscribeReq.SelfCheck(): topic is empty")
-	mKh.Hassert(sf.Uuid_ != nil, "SubscribeReq.SelfCheck(): uuid is empty")
-	mKh.Hassert(sf.WebHook_ != nil, "SubscribeReq.SelfCheck(): WebHook_ is empty")
+	mKh.If(sf.Topic_ == "").Hassert("SubscribeReq.SelfCheck(): topic is empty")
+	mKh.If(sf.Uuid_ == nil).Hassert("SubscribeReq.SelfCheck(): uuid is empty")
+	mKh.If(sf.WebHook_ == nil).Hassert("SubscribeReq.SelfCheck(): WebHook_ is empty")
 }
 
 // SubscribeResp -- ответ на запрос подписки.
@@ -30,6 +30,6 @@ type SubscribeResp struct {
 
 // SelfCheck -- проверяет правильность своих полей.
 func (sf *SubscribeResp) SelfCheck() {
-	mKh.Hassert(sf.Status_.Get() != "", "SubscribeResp.SelfCheck(): status is empty")
-	mKh.Hassert(sf.Name_ != "", "SubscribeResp.SelfCheck(): name is empty")
+	mKh.If(sf.Status_.Get() == "").Hassert("SubscribeResp.SelfCheck(): status is empty")
+	mKh.If(sf.Name_ == "").Hassert("SubscribeResp.SelfCheck(): name is empty")
 }

+ 3 - 3
v4/lev2/lti/dot/msg_unsub/msg_unsub.go

@@ -15,8 +15,8 @@ type UnsubReq struct {
 
 // SelfCheck -- проверка запроса на правильность полей.
 func (sf *UnsubReq) SelfCheck() {
-	mKh.Hassert(sf.HandlerName_ != "", "UnsubReq.SelfCheck(): name is empty")
-	mKh.Hassert(sf.Uuid_.Get() != "", "UnsubReq.SelfCheck(): uuid is empty")
+	mKh.If(sf.HandlerName_ == "").Hassert("UnsubReq.SelfCheck(): name is empty")
+	mKh.If(sf.Uuid_.Get() == "").Hassert("UnsubReq.SelfCheck(): uuid is empty")
 }
 
 // UnsubResp -- ответ на запрос отписки.
@@ -27,5 +27,5 @@ type UnsubResp struct {
 
 // SelfCheck -- проверяет правильность своих полей.
 func (sf *UnsubResp) SelfCheck() {
-	mKh.Hassert(sf.Status_.Get() != "", "UnsubResp.SelfCheck(): status is empty")
+	mKh.If(sf.Status_.Get() == "").Hassert("UnsubResp.SelfCheck(): status is empty")
 }

+ 1 - 1
v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go

@@ -46,7 +46,7 @@ func (sf *dictSubHook) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 func (sf *dictSubHook) Subscribe(handler bus_spec.IBusHandlerSubscribe) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
-	helpers.Hassert(handler != nil, "dictSubHook.Subscribe(): handler==nil", []any{})
+	helpers.If(handler == nil).Hassert("dictSubHook.Subscribe(): handler==nil", []any{})
 	handlerName := handler.Name()
 	sf.dict[handlerName.Get()] = struct{}{}
 	sf.kCtx.Set(handlerName.Txt(), handler, "subscribe handler")

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

@@ -52,7 +52,7 @@ func (sf *dictTopicSub) Read(topic bus_ent.ITopicFix, binMsg []byte) {
 func (sf *dictTopicSub) Subscribe(handler bus_spec.IBusHandlerSubscribe) {
 	sf.Lock()
 	defer sf.Unlock()
-	helpers.Hassert(handler != nil, "dictTopicSub.Subscribe(): handler==nil", []any{})
+	helpers.If(handler == nil).Hassert("dictTopicSub.Subscribe(): handler==nil", []any{})
 	topic := handler.Topic()
 	dictSubHook := sf.dictTopicHook[topic.Get()]
 	if dictSubHook == nil {
@@ -66,7 +66,7 @@ func (sf *dictTopicSub) Subscribe(handler bus_spec.IBusHandlerSubscribe) {
 func (sf *dictTopicSub) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	sf.Lock()
 	defer sf.Unlock()
-	helpers.Hassert(handler != nil, "dictTopicSub.Unsubscribe(): handler==nil", []any{})
+	helpers.If(handler == nil).Hassert("dictTopicSub.Unsubscribe(): handler==nil", []any{})
 	topic := handler.Topic()
 	dictSubHook := sf.dictTopicHook[topic.Get()]
 	if dictSubHook == nil {

+ 2 - 2
v4/lev2/lti/kbus_base/kbus_base.go

@@ -8,12 +8,12 @@ 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/defs/def_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
 	"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"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
@@ -91,7 +91,7 @@ func (sf *KBusBase) Subscribe(handler bus_spec.IBusHandlerSubscribe) def_spec.IR
 	msg := defs.TxtFix("KBusBase.Subscribe(): handler='%v'",
 		handler.Name())
 	sf.log.Debug(msg)
-	helpers.Hassert(!sf.IsWork_.Get(), "KBusBase.Subscribe():  handler='%v', bus already closed", []any{handler.Name()})
+	helpers.If(!sf.IsWork_.Get()).Hassert("KBusBase.Subscribe():  handler='%v', bus already closed", []any{handler.Name()})
 	sf.dictSub.Subscribe(handler)
 	return mL0.NewOk(ebool.NewEBool(true))
 }

+ 22 - 11
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go

@@ -45,7 +45,7 @@ func NewClientBusHttp(urlRemote defs.ITxtFix) bus_spec.IBusClient {
 	}
 	log := mL1.NewLogBuf(param)
 	log.Debug(defs.TxtFix("NewClientBusHttp()"))
-	helpers.Hassert(urlRemote != nil, "NewClientBusHttp(): urlRemote is empty", []any{})
+	helpers.If(urlRemote == nil).Hassert("NewClientBusHttp(): urlRemote is empty", []any{})
 	kCtx := kctx.GetKernelCtx()
 	resLocal := safe_string.NewSafeStringGetenv(
 		defs.TxtFix("LOCAL_HTTP_URL"))
@@ -66,7 +66,7 @@ func NewClientBusHttp(urlRemote defs.ITxtFix) bus_spec.IBusClient {
 // Unsubscribe -- отписывается от топика в дистанционной шине.
 func (sf *ClientBusHttp) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	_uuid, err := uuid.NewV6()
-	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.Unsubscribe(): in generate UUID v6, err=\n\t%v", err)
+	helpers.If(err != nil).Hassert("ClientBusHttp.Unsubscribe(): in generate UUID v6, err=\n\t%v", err)
 
 	req := &dot.UnsubReq{
 		HandlerName_: handler.Name().Get(),
@@ -74,12 +74,13 @@ func (sf *ClientBusHttp) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	}
 	req.SelfCheck()
 	binReq, err := json.MarshalIndent(req, "", "  ")
-	mL1.FnHassert(helpers.Hassert)(err == nil,
-		"ClientBusHttp.Unsubscribe(): in marshal to JSON unsubscribe request, err=\n\t%v", err)
+	helpers.If(err != nil).Hassert("ClientBusHttp.Unsubscribe(): in marshal to JSON unsubscribe request, err=\n\t%v",
+		err)
 	reader := strings.NewReader(string(binReq))
 
 	hReq, err := http.NewRequest(http.MethodPost, sf.urlRemote.String()+"/bus/unsub", reader)
-	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.Unsubscribe(): in new request, err=\n\t%v", err)
+	helpers.If(err != nil).
+		Hassert("ClientBusHttp.Unsubscribe(): in new request, err=\n\t%v", err)
 
 	resBody := sf.makePost(hReq)
 	if resBody.IsErr() {
@@ -105,7 +106,9 @@ func (sf *ClientBusHttp) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 // Subscribe -- подписывается на топик в дистанционной шине.
 func (sf *ClientBusHttp) Subscribe(handler bus_spec.IBusHandlerSubscribe) def_spec.IResult[mKs.EBool] {
 	_uuid, err := uuid.NewV6()
-	helpers.Hassert(err == nil, "ClientBusHttp.Subscribe(): in generate UUID v6, err=\n\t%v", []any{err})
+	helpers.If(err != nil).
+		Hassert("ClientBusHttp.Subscribe(): in generate UUID v6, err=\n\t%v",
+			[]any{err})
 	req := &dot.SubscribeReq{
 		Topic_:   handler.Topic().Get(),
 		Uuid_:    defs.TxtFix(_uuid.String()),
@@ -116,7 +119,9 @@ func (sf *ClientBusHttp) Subscribe(handler bus_spec.IBusHandlerSubscribe) def_sp
 	body := strings.NewReader(string(binReq))
 	endPoint := defs.TxtFix("%v%v", sf.urlLocal.String()+"/bus/sub")
 	hReq, err := http.NewRequest(http.MethodPost, endPoint.String(), body)
-	helpers.Hassert(err != nil, "ClientBusHttp.Subscribe(): in new request, err=\n\t%v", []any{})
+	helpers.If(err != nil).
+		Hassert("ClientBusHttp.Subscribe(): in new request, err=\n\t%v",
+			[]any{})
 
 	resBody := sf.makePost(hReq)
 	if resBody.IsErr() {
@@ -144,7 +149,9 @@ func (sf *ClientBusHttp) Subscribe(handler bus_spec.IBusHandlerSubscribe) def_sp
 // SendRequest -- отправляет в дистанционную шину запрос.
 func (sf *ClientBusHttp) SendRequest(topic bus_ent.ITopicFix, binReq []byte) mL0.IResult[[]byte] {
 	_uuid, err := uuid.NewV6()
-	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.SendRequest(): in generate UUID v6, err=\n\t%v", err)
+	helpers.If(err != nil).
+		Hassert("ClientBusHttp.SendRequest(): in generate UUID v6, err=\n\t%v",
+			err)
 	req := &dot.ServeReq{
 		Topic_:  topic.Get(),
 		Uuid_:   defs.TxtFix(_uuid.String()),
@@ -155,7 +162,9 @@ func (sf *ClientBusHttp) SendRequest(topic bus_ent.ITopicFix, binReq []byte) mL0
 	body := strings.NewReader(string(_binReq))
 	endPont := defs.TxtFix("%v%v", sf.urlRemote.String(), "/bus/request")
 	hReq, err := http.NewRequest(http.MethodPost, endPont.String(), body)
-	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.SendRequest(): in new request, err=\n\t%v")
+	helpers.If(err != nil).
+		Hassert("ClientBusHttp.SendRequest(): in new request, err=\n\t%v",
+			err)
 
 	resBody := sf.makePost(hReq)
 	if resBody.IsErr() {
@@ -196,7 +205,9 @@ func (sf *ClientBusHttp) RegisterServe(handler bus_spec.IBusHandlerServe) mL0.IR
 // Publish -- публикует сообщение в дистанционной шину.
 func (sf *ClientBusHttp) Publish(topic bus_ent.ITopicFix, binMsg []byte) mL0.IResult[mKs.EBool] {
 	_uuid, err := uuid.NewV6()
-	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.Publish(): in generate UUID v6, err=\n\t%v", err)
+	helpers.If(err != nil).
+		Hassert("ClientBusHttp.Publish(): in generate UUID v6, err=\n\t%v",
+			err)
 	req := &dot.PublishReq{
 		Topic_:  topic.Get(),
 		Uuid_:   defs.TxtFix(_uuid.String()),
@@ -207,7 +218,7 @@ func (sf *ClientBusHttp) Publish(topic bus_ent.ITopicFix, binMsg []byte) mL0.IRe
 	body := strings.NewReader(string(binReq))
 	endPoint := defs.TxtFix("%v%v", sf.urlRemote.Get(), "/bus/pub")
 	hReq, err := http.NewRequest(http.MethodPost, endPoint.String(), body)
-	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.Publish(): in new request, err=\n\t%v")
+	helpers.If(err != nil).Hassert("ClientBusHttp.Publish(): in new request, err=\n\t%v")
 
 	resBody := sf.makePost(hReq)
 	if resBody.IsErr() {

+ 1 - 1
v4/lev2/wui/hx_url_patch/hx_url_patch.go

@@ -17,7 +17,7 @@ type HxUrlPatch struct {
 
 // NewHxUrlPatch -- возвращает новый путь запроса.
 func NewHxUrlPatch(patch defs.ITxtFix) *HxUrlPatch {
-	mKh.Hassert(patch.Get() != "", "NewHxUrlPatch(): patch isempty")
+	mKh.If(patch.Get() == "").Hassert("NewHxUrlPatch(): patch isempty")
 	sf := &HxUrlPatch{
 		val: patch,
 	}

+ 1 - 1
v4/lev2/wui/hx_vals/hx_vals.go

@@ -65,6 +65,6 @@ func (sf *HxVals) Get(key defs.ATxt) any {
 func (sf *HxVals) Set(key defs.ATxt, val any) {
 	sf.Lock()
 	defer sf.Unlock()
-	mKh.Hassert(key != "", "HxVals.Set(): key is empty")
+	mKh.If(key == "").Hassert("HxVals.Set(): key is empty")
 	sf.dict[key] = val
 }

+ 1 - 1
v4/lev2/wui/wui_button/wui_button.go

@@ -27,7 +27,7 @@ type FnBtnBack func(map[defs.ATxt]defs.ATxt) mL0.IResult[defs.ITxtFix]
 
 // NewWuiButton -- возвращает новую WUI-кнопку.
 func NewWuiButton(text defs.ITxtFix, fnBack FnBtnBack) *WuiButton {
-	helpers.Hassert(fnBack != nil, "NewWuiButton(): text=%q, fnBack==nil", []any{text})
+	helpers.If(fnBack == nil).Hassert("NewWuiButton(): text=%q, fnBack==nil", []any{text})
 	sf := &WuiButton{
 		IWuiWidget: wui_widget.NewWuiWidget(),
 		text:       wui_text.NewWuiText(text),

+ 1 - 1
v4/lev3/mod_ent/module_name/module_name.go

@@ -24,7 +24,7 @@ type ModuleName struct {
 
 // NewModuleName -- создать новое имя модуля.
 func NewModuleName(val AModuleName) *ModuleName {
-	helpers.Hassert(val != "", "NewAModuleName(): val is empty")
+	helpers.If(val == "").Hassert("NewAModuleName(): val is empty")
 	sf := &ModuleName{
 		name: defs.TxtFix(val),
 	}

+ 7 - 7
v4/lev3/mod_serv_http/mod_serv_http_test.go

@@ -6,7 +6,7 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"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"
@@ -32,13 +32,13 @@ func TestModServHttp(t *testing.T) {
 		ctx: kctx.GetKernelCtx(),
 	}
 	err := os.Unsetenv("LOCAL_STORE_PATH")
-	Hassert(err == nil, "err=%v", err)
+	helpers.If(err != nil).Hassert("err=%v", err)
 	err = os.Setenv("LOCAL_STORE_PATH", pathStore)
-	Hassert(err == nil, "err=%v", err)
+	helpers.If(err != nil).Hassert("err=%v", err)
 	err = os.Unsetenv("LOCAL_HTTP_URL")
-	Hassert(err == nil, "err=%v", err)
+	helpers.If(err != nil).Hassert("err=%v", err)
 	err = os.Setenv("LOCAL_HTTP_URL", baseUrl)
-	Hassert(err == nil, "err=%v", err)
+	helpers.If(err != nil).Hassert("err=%v", err)
 	fnClear := func() {
 		pwd := sf.me.Pwd().String() + pathStore
 		_ = os.RemoveAll(pwd)
@@ -71,9 +71,9 @@ func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
 	_ = mock_env.MakeEnv()
 	err := os.Unsetenv("LOCAL_HTTP_URL")
-	Hassert(err == nil, "newGood1(): err=%v", err)
+	helpers.If(err != nil).Hassert("newGood1(): err=%v", err)
 	err = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18301/")
-	Hassert(err == nil, "newGood1(): err=%v", err)
+	helpers.If(err != nil).Hassert("newGood1(): err=%v", err)
 	sf.mod = GetModuleServHttp()
 	_ = GetModuleServHttp()
 	if sf.mod == nil {

+ 4 - 2
v4/lev3/mod_wui/mod_wui.go

@@ -12,7 +12,7 @@ import (
 
 	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/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
@@ -115,7 +115,9 @@ func (sf *ModuleWui) wuiClick(resp http.ResponseWriter, req *http.Request) {
 	}
 
 	err := req.ParseForm()
-	mKh.Hassert(err == nil, "ModuleWui.wuiClick(): in parse form, err=\n\t%v", err)
+	helpers.If(err != nil).
+		Hassert("ModuleWui.wuiClick(): in parse form, err=\n\t%v",
+			err)
 	// Получаем все form-значения
 	// values := req.ParseForm()
 	for key, lstVal := range req.Form {