Kaynağa Gözat

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

SVI 4 ay önce
ebeveyn
işleme
03e1309b33

+ 4 - 4
v4/Taskfile.yml

@@ -18,7 +18,7 @@ tasks:
     cmds:
       - clear
       - go fmt ./...
-      - semgrep scan --config .semgrep.yml
+      # - semgrep scan --config .semgrep.yml
       - go build -race -o ./bin_dev/demo ./cmd/demo/main.go
   mod:
     desc: "Обновление зависимостей"
@@ -46,14 +46,14 @@ tasks:
       # - go install github.com/MakeNowJust/enumcase/cmd/enumcase@latest
       # - enumcase ./...
       # - go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
-      - go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2
+      # - go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2
       - golangci-lint run ./...
       # - go install github.com/fzipp/gocyclo/cmd/gocyclo@latest
       # - gocyclo -over 11 .
       # - go install github.com/securego/gosec/cmd/gosec@latest
       # - gosec ./...
-      - pipx install semgrep
-      - semgrep scan --config .semgrep.yml
+      # - pipx install semgrep
+      # - semgrep scan --config .semgrep.yml
   fmt:
     desc: "Форматирование кода"
     cmds:

+ 1 - 0
v4/docs/index.md

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

+ 5 - 17
v4/kern.go

@@ -258,22 +258,10 @@ func NewNone[T any]() mL0.IOption[T] {
 	return mL0.NewNone[T]()
 }
 
-// FnHassert -- проверяет с жёстким падением условие.
-type FnHassert = mL1.FnHassert
+// FnIf -- проверяет с жёстким падением условие.
+type FnIf = helpers.FnIf
 
-// Hassert -- возвращает ссылку на функцию Hassert.
-//
-
-func Hassert() FnHassert {
-	return mL1.FnHassert(helpers.Hassert)
-}
-
-// FnAssert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
-type FnAssert = mL1.FnAssert
-
-// Assert -- возвращает ссылку на функцию Hassert.
-//
-
-func Assert() FnAssert {
-	return mL1.FnAssert(helpers.Assert)
+// If -- возвращает ссылку на функцию If (Hasssert/Assert).
+func If() FnIf {
+	return helpers.If
 }

+ 4 - 9
v4/kern_test.go

@@ -7,7 +7,7 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	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"
@@ -78,14 +78,9 @@ func (sf *tester) new3() {
 		sf.t.Fatalf("new(): ISafeStr==nil")
 	}
 
-	fnHassert := mL1.FnHassert(helpers.Hassert)
-	if fnHassert == nil {
-		sf.t.Fatalf("new(): Hassert==nil")
-	}
-
-	fnAssert := mL1.FnAssert(helpers.Assert)
-	if fnAssert == nil {
-		sf.t.Fatalf("new(): Assert==nil")
+	fnIf := mL0.FnIf(helpers.If)
+	if fnIf == nil {
+		sf.t.Fatalf("new(): If==nil")
 	}
 }
 

+ 1 - 1
v4/lev0/defs/def_err/def_err.go

@@ -14,7 +14,7 @@ type KErr struct {
 
 // Err -- создать новую обёрнутую ошибку.
 func Err(msg def_spec.ATxt, arg ...any) *KErr {
-	helpers.Hassert(msg == "", "Err(): msg is empty")
+	helpers.If(msg == "").Hassert("Err(): msg is empty")
 	_msg := def_spec.Sprintf(msg, arg...)
 	sf := &KErr{
 		ITxtFix: def_txt.Txt(_msg),

+ 1 - 1
v4/lev0/defs/stream_name/stream_name.go

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

+ 3 - 3
v4/lev0/etypes/ebool/ebool.go

@@ -52,17 +52,17 @@ func (sf *EBool) IsMut() defs.Bool {
 }
 
 var (
-	hassert = helpers.Hassert
+	If = helpers.If
 )
 
 // Set -- устанавливает новое значение.
 func (sf *EBool) Set() {
-	hassert(sf.isMut, "EBool.Set(): not mutable")
+	If(sf.isMut).Hassert("EBool.Set(): not mutable")
 	sf.val = true
 }
 
 // Reset -- сбрасывает новое значение.
 func (sf *EBool) Reset() {
-	hassert(sf.isMut, "EBool.Reset(): not mutable")
+	If(sf.isMut).Hassert("EBool.Reset(): not mutable")
 	sf.val = false
 }

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

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

+ 56 - 15
v4/lev0/helpers/helpers.go

@@ -20,11 +20,46 @@ var (
 // FnAssert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
 //
 //	(isCond bool, msgFormat defs.Str, args ...any)
-type FnAssert func(isCond bool, msgFormat def_spec.ATxt, args ...any)
+// type FnAssert func(isCond bool, msgFormat def_spec.ATxt, args ...any)
 
 // Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
-func Assert(isCond bool, msgFormat def_spec.ATxt, args ...any) {
-	if isCond {
+// func Assert(isCond bool, msgFormat def_spec.ATxt, args ...any) {
+// 	if isCond {
+// 		return
+// 	}
+// 	msg := def_spec.Sprintf("SOFT ASSERT "+msgFormat+"\n", args...)
+// 	if IsStageLocal {
+// 		panic(msg)
+// 	}
+// 	log.Print(msg)
+// }
+
+// IAssertAction -- действие, которое будет выполнено при проверке.
+type IAssertAction interface {
+	// Assert -- жёсткое падение кроме прода
+	Assert(msgFormat def_spec.ATxt, args ...any)
+	// Hassert -- нжёсткое падение даже на проде
+	Hassert(msgFormat def_spec.ATxt, args ...any)
+}
+
+type IfAction func(msgFormat def_spec.ATxt, args ...any)
+
+type AssertAction struct {
+	isCond def_spec.Bool
+}
+
+// Hassert -- проверка на правильность утверждения с безусловным падением в панику даже на проде (hard assert).
+func (sf *AssertAction) Hassert(msgFormat def_spec.ATxt, args ...any) {
+	if sf.isCond {
+		return
+	}
+	msg := def_spec.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
+	panic(msg)
+}
+
+// Assert -- проверка на правильность утверждения с падением в панику кроме прода (soft assert).
+func (sf *AssertAction) Assert(msgFormat def_spec.ATxt, args ...any) {
+	if sf.isCond {
 		return
 	}
 	msg := def_spec.Sprintf("SOFT ASSERT "+msgFormat+"\n", args...)
@@ -34,31 +69,37 @@ func Assert(isCond bool, msgFormat def_spec.ATxt, args ...any) {
 	log.Print(msg)
 }
 
+type FnIf func(isCond def_spec.Bool)IAssertAction
+
+// If -- условие для проверки.
+func If(isCond def_spec.Bool) IAssertAction {
+	sf := &AssertAction{
+		isCond: isCond,
+	}
+	return sf
+}
+
 // FnHassert -- проверяет с жёстким падением условие.
 //
 //	(isCond bool, msgFormat defs.Str, args ...any)
-type FnHassert func(isCond def_spec.Bool, msgFormat def_spec.ATxt, args ...any)
+// type FnHassert func(isCond def_spec.Bool, msgFormat def_spec.ATxt, args ...any)
 
 // Hassert -- проверка на правильность утверждения с безусловным падением в панику (hard assert).
-func Hassert(isCond def_spec.Bool, msgFormat def_spec.ATxt, args ...any) {
-	if isCond {
-		return
-	}
-	msg := def_spec.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
-	panic(msg)
-}
+// func Hassert(isCond def_spec.Bool, msgFormat def_spec.ATxt, args ...any) {
+// 	if isCond {
+// 		return
+// 	}
+// 	msg := def_spec.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
+// 	panic(msg)
+// }
 
 // TimeNow -- возвращает локальное Unix сейчас-время (мсек, не зависит от положения).
-//
-
 func TimeNow() int64 {
 	timeNow := time.Now().Local().UnixMilli()
 	return timeNow
 }
 
 // SleepMs -- спит миллисекунду (иногда бывает полезно).
-//
-
 func SleepMs() {
 	time.Sleep(time.Millisecond * 1)
 }

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

@@ -90,7 +90,7 @@ func (sf *tester) hassert() {
 // Мягкая ТВЁРДАЯ проверка на ок.
 func (sf *tester) hassertProdGood1() {
 	sf.t.Log("hassertProdGood1")
-	Hassert(true, "tra-la-la")
+	If(true).Hassert("tra-la-la")
 }
 
 // Твёрдая проверка.
@@ -106,7 +106,7 @@ func (sf *tester) hassertProd() {
 			sf.t.Fatalf("assertLocal(): panic==nil")
 		}
 	}()
-	Hassert(false, "tra-la-la")
+	If(false).Hassert("tra-la-la")
 }
 
 // ТВЁРДАЯ проверка.
@@ -117,7 +117,7 @@ func (sf *tester) hassertLocal() {
 			sf.t.Fatalf("assertLocal(): panic==nil")
 		}
 	}()
-	Hassert(false, "tra-la-la")
+	If(false).Hassert("tra-la-la")
 }
 
 // ========================================================================
@@ -133,7 +133,7 @@ func (sf *tester) assert() {
 // Мягкая ТВЁРДАЯ проверка на ок.
 func (sf *tester) assertProdGood1() {
 	sf.t.Log("assertProdGood1")
-	Assert(true, "tra-la-la")
+	If(true).Assert("tra-la-la")
 }
 
 // Мягкая проверка (на проде).
@@ -144,7 +144,7 @@ func (sf *tester) assertProd() {
 		sf.t.Fatalf("assertProd(): err=%v", err)
 	}
 	init_()
-	Assert(false, "tra-la-la")
+	If(false).Assert("tra-la-la")
 }
 
 // Мягкая ТВЁРДАЯ локальная проверка (локально).
@@ -155,5 +155,5 @@ func (sf *tester) assertLocal() {
 			sf.t.Fatalf("assertLocal(): panic==nil")
 		}
 	}()
-	Assert(false, "tra-la-la")
+	If(false).Assert("tra-la-la")
 }

+ 2 - 15
v4/lev0/lev0.go

@@ -49,23 +49,10 @@ func NewNone[T any]() IOption[T] {
 	return option.NewNone[T]()
 }
 
-// Hassert -- проверка на правильность утверждения с безусловным падением в панику (hard assert).
-//
-
-func Hassert(isCond defs.Bool, msgFormat defs.ITxtFix, args ...any) {
-	helpers.Hassert(isCond, msgFormat.Get(), args)
-}
-
-// Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
-//
-
-func Assert(isCond bool, msgFormat defs.ITxtFix, args ...any) {
-	helpers.Assert(isCond, msgFormat.Get(), args)
-}
+// FnIf -- проверяет с жёстким падением условие.
+type FnIf = helpers.FnIf
 
 // SleepMs -- задержка в миллисекундах.
-//
-
 func SleepMs() {
 	time.Sleep(time.Millisecond * 1)
 }

+ 0 - 26
v4/lev1/lev1.go

@@ -74,44 +74,18 @@ func NewSafeBool(val defs.Bool) mKs.ISafeBool {
 	return sb
 }
 
-// FnHassert -- проверяет с жёстким падением условие.
-type FnHassert = helpers.FnHassert
-
-// Hassert -- возвращает ссылку на функцию Hassert.
-//
-
-func Hassert() FnHassert {
-	return helpers.Hassert
-}
-
-// FnAssert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
-type FnAssert = helpers.FnAssert
-
-// Assert -- возвращает ссылку на функцию Assert.
-//
-
-func Assert() FnAssert {
-	return helpers.Assert
-}
-
 // SleepMs -- спит миллисекунду.
-//
-
 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)
 	return lCtx