Bläddra i källkod

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

SVI 4 månader sedan
förälder
incheckning
09d6a2618d

+ 2 - 2
v4/kern.go

@@ -154,8 +154,8 @@ func NewClientBusLocal() bus_spec.IBusClient {
 // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP.
 //
 //go:fix inline
-func NewClientBusHttp(url string) bus_spec.IBusClient {
-	client := client_bus_http.NewClientBusHttp(url)
+func NewClientBusHttp(url defs.Str) bus_spec.IBusClient {
+	client := client_bus_http.NewClientBusHttp(url.String())
 	return client
 }
 

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

@@ -15,9 +15,9 @@ type Int interface {
 	// Dec -- уменьшает число на 1
 	Dec()
 	// FromStr -- устанавливает значение из строки
-	FromStr(string) IResult[defs.Int]
+	FromStr(defs.Str) IResult[defs.Int]
 	// ToStr -- возвращает как строку
-	ToStr() string
+	ToStr() defs.Str
 	// FromByte -- устанавливает значение из байтов
 	FromByte([]byte) IResult[defs.Int]
 	// ToByte -- возвращает как срез байт
@@ -27,5 +27,5 @@ type Int interface {
 	// ToBool -- возвращает как булево значение
 	ToBool() bool
 	// Getenv -- устанавливает значение из окружения
-	Getenv(string) IResult[defs.Int]
+	Getenv(defs.Str) IResult[defs.Int]
 }

+ 4 - 2
v4/lev0/core_spec/ioption.go

@@ -1,5 +1,7 @@
 package core_spec
 
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+
 // IOption -- интерфейс опции.
 type IOption[T any] interface {
 	// IsSome - проверяет, есть ли значение.
@@ -13,7 +15,7 @@ type IOption[T any] interface {
 	// SomeOrFn -- возвращает значение, если оно есть, или результат выполнения функции.
 	SomeOrFn(fn func() T) T
 	// Hassert -- проверяет, что не пустое значение (с паникой).
-	Hassert(msgFormat string, args ...any) T
+	Hassert(msgFormat defs.Str, args ...any) T
 	// Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-	Assert(msgFormat string, args ...any) T
+	Assert(msgFormat defs.Str, args ...any) T
 }

+ 4 - 2
v4/lev0/core_spec/iresult.go

@@ -1,5 +1,7 @@
 package core_spec
 
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+
 // IResult -- возвращаемый результат.
 type IResult[T any] interface {
 	// IsOk -- возвращает true, если Result содержит значение.
@@ -17,7 +19,7 @@ type IResult[T any] interface {
 	// Error -- возвращает строковое представление ошибки, если она есть.
 	Error() string
 	// Hassert -- проверяет, что нет ошибки (с паникой).
-	Hassert(msgFormat string, args ...any) T
+	Hassert(msgFormat defs.Str, args ...any) T
 	// Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-	Assert(msgFormat string, args ...any) T
+	Assert(msgFormat defs.Str, args ...any) T
 }

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

@@ -1,5 +1,7 @@
 package core_spec
 
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+
 // ISafeBool -- интерфейс к потокобезопасной переменной.
 type ISafeBool interface {
 	// Get -- возвращает хранимое значение потокобезопасной переменной
@@ -9,7 +11,7 @@ type ISafeBool interface {
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// FromStr -- устанавливает значение из строки
-	FromStr(string) IResult[EBool]
+	FromStr(defs.Str) IResult[EBool]
 	// Getenv -- получает значение из окружения
-	Getenv(string) IResult[EBool]
+	Getenv(defs.Str) IResult[EBool]
 }

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

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

+ 7 - 7
v4/lev0/defs/defs.go

@@ -2,7 +2,7 @@
 package defs
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
+	// "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
 )
 
 // Int -- алиас для int.
@@ -16,8 +16,8 @@ func (i Int) Int() int {
 // Str -- алиас для string.
 type Str string
 
-// Str -- возвращает строку по требованию.
-func (s Str) Str() string {
+// String -- возвращает строку по требованию.
+func (s Str) String() string {
 	return string(s)
 }
 
@@ -31,11 +31,11 @@ type BucketName Str
 // StreamName -- имя потока для ожидания.
 //
 //go:fix inline
-type StreamName = stream_name.AStreamName
+// type StreamName = stream_name.AStreamName
 
 // NewStreamName -- создать новое имя потока.
 //
 //go:fix inline
-func NewStreamName(val Str) *stream_name.AStreamName {
-	return stream_name.NewAStreamName(string(val))
-}
+// func NewStreamName(val Str) *stream_name.AStreamName {
+// 	return stream_name.NewAStreamName(string(val))
+// }

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

@@ -8,6 +8,8 @@ import (
 	"log"
 	"os"
 	"time"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 var (
@@ -18,14 +20,14 @@ var (
 // FnAssert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
 //
 //	(isCond bool, msgFormat string, args ...any)
-type FnAssert func(isCond bool, msgFormat string, args ...any)
+type FnAssert func(isCond bool, msgFormat defs.Str, args ...any)
 
 // Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
-func Assert(isCond bool, msgFormat string, args ...any) {
+func Assert(isCond bool, msgFormat defs.Str, args ...any) {
 	if isCond {
 		return
 	}
-	msg := fmt.Sprintf("SOFT ASSERT "+msgFormat+"\n", args...)
+	msg := fmt.Sprintf("SOFT ASSERT "+msgFormat.String()+"\n", args...)
 	if IsStageLocal {
 		panic(msg)
 	}
@@ -34,15 +36,15 @@ func Assert(isCond bool, msgFormat string, args ...any) {
 
 // FnHassert -- проверяет с жёстким падением условие.
 //
-//	(isCond bool, msgFormat string, args ...any)
-type FnHassert func(isCond bool, msgFormat string, args ...any)
+//	(isCond bool, msgFormat defs.Str, args ...any)
+type FnHassert func(isCond bool, msgFormat defs.Str, args ...any)
 
 // Hassert -- проверка на правильность утверждения с безусловным падением в панику (hard assert).
-func Hassert(isCond bool, msgFormat string, args ...any) {
+func Hassert(isCond bool, msgFormat defs.Str, args ...any) {
 	if isCond {
 		return
 	}
-	msg := fmt.Sprintf("HARD ASSERT "+msgFormat+"\n", args...)
+	msg := fmt.Sprintf("HARD ASSERT "+msgFormat.String()+"\n", args...)
 	panic(msg)
 }
 

+ 3 - 2
v4/lev0/lev0.go

@@ -5,6 +5,7 @@ import (
 	"time"
 
 	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/option"
 	mRes "gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
@@ -50,14 +51,14 @@ func NewNone[T any]() IOption[T] {
 // Hassert -- проверка на правильность утверждения с безусловным падением в панику (hard assert).
 //
 //go:fix inline
-func Hassert(isCond bool, msgFormat string, args ...any) {
+func Hassert(isCond bool, msgFormat defs.Str, args ...any) {
 	helpers.Hassert(isCond, msgFormat, args)
 }
 
 // Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
 //
 //go:fix inline
-func Assert(isCond bool, msgFormat string, args ...any) {
+func Assert(isCond bool, msgFormat defs.Str, args ...any) {
 	helpers.Assert(isCond, msgFormat, args)
 }
 

+ 3 - 2
v4/lev0/option/option.go

@@ -4,6 +4,7 @@ import (
 	"reflect"
 
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mH "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
@@ -65,13 +66,13 @@ func (sf *Option[T]) SomeOrFn(fn func() T) T {
 }
 
 // Hassert -- проверяет, что не пустое значение (с паникой).
-func (sf *Option[T]) Hassert(msgFormat string, args ...any) T {
+func (sf *Option[T]) Hassert(msgFormat defs.Str, args ...any) T {
 	mH.Hassert(sf.some != nil, msgFormat, args...)
 	return *sf.some
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-func (sf *Option[T]) Assert(msgFormat string, args ...any) T {
+func (sf *Option[T]) Assert(msgFormat defs.Str, args ...any) T {
 	mH.Assert(sf.some != nil, msgFormat, args...)
 	return *sf.some
 }

+ 11 - 9
v4/lev0/option/option_test.go

@@ -2,6 +2,8 @@ package option
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type testerOption struct {
@@ -31,7 +33,7 @@ func (sf *testerOption) createNoneGood1() {
 			sf.t.Fatalf("createNoneGood1(): panic=%v", _panic)
 		}
 	}()
-	opt := NewNone[string]()
+	opt := NewNone[defs.Str]()
 	if opt.IsSome() {
 		sf.t.Fatalf("createNoneGood1(): is ok")
 	}
@@ -47,13 +49,13 @@ func (sf *testerOption) createNoneGood1() {
 	if val := opt.SomeOrFn(sf.fnWrap2); val != "test5" {
 		sf.t.Fatalf("createNoneGood1(): val bad")
 	}
-	_opt := opt.(*Option[string])
+	_opt := opt.(*Option[defs.Str])
 	sf.unwrapErr(_opt)
 	sf.hassert(_opt)
 	sf.assert(_opt)
 }
 
-func (sf *testerOption) assert(res *Option[string]) {
+func (sf *testerOption) assert(res *Option[defs.Str]) {
 	sf.t.Log("assert")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -63,7 +65,7 @@ func (sf *testerOption) assert(res *Option[string]) {
 	res.Hassert("test assert")
 }
 
-func (sf *testerOption) hassert(res *Option[string]) {
+func (sf *testerOption) hassert(res *Option[defs.Str]) {
 	sf.t.Log("hassert")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -73,7 +75,7 @@ func (sf *testerOption) hassert(res *Option[string]) {
 	res.Hassert("test hassert")
 }
 
-func (sf *testerOption) unwrapErr(res *Option[string]) {
+func (sf *testerOption) unwrapErr(res *Option[defs.Str]) {
 	sf.t.Log("unwrapErr")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -84,7 +86,7 @@ func (sf *testerOption) unwrapErr(res *Option[string]) {
 }
 
 const (
-	str = "test val"
+	str = defs.Str("test val")
 )
 
 func (sf *testerOption) createSomeGood2() {
@@ -118,12 +120,12 @@ func (sf *testerOption) createSomeGood2() {
 }
 
 // Функция высшего порядка для замещения ошибки.
-func (sf *testerOption) fnWrap2() string {
+func (sf *testerOption) fnWrap2() defs.Str {
 	return "test5"
 }
 
 // Функция высшего порядка для замещения ошибки.
-func (sf *testerOption) fnWrap() string {
+func (sf *testerOption) fnWrap() defs.Str {
 	return "test1"
 }
 
@@ -146,6 +148,6 @@ func (sf *testerOption) createSomeBad1() {
 			sf.t.Fatalf("createSomeBad1(): panic==nil")
 		}
 	}()
-	var str *string
+	var str *defs.Str
 	_ = NewSome(str)
 }

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

@@ -6,6 +6,7 @@ import (
 	"runtime"
 
 	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"
 )
 
@@ -114,25 +115,25 @@ func (sf *Result[T]) Error() string {
 }
 
 // Hassert -- проверяет, что нет ошибки (с паникой).
-func (sf *Result[T]) Hassert(msgFormat string, args ...any) T {
+func (sf *Result[T]) Hassert(msgFormat defs.Str, args ...any) T {
 	strErr := ""
 	if !sf.isCheck {
 		strErr = fmt.Sprintf(", err=\n\t%v", sf.err)
 	}
-	msg := fmt.Sprintf(msgFormat+strErr, args...)
-	mKh.Hassert(sf.err == nil, msg)
+	msg := fmt.Sprintf(msgFormat.String()+strErr, args...)
+	mKh.Hassert(sf.err == nil, defs.Str(msg))
 	sf.isCheck = true
 	return sf.val
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-func (sf *Result[T]) Assert(msgFormat string, args ...any) T {
+func (sf *Result[T]) Assert(msgFormat defs.Str, args ...any) T {
 	strErr := ""
 	if !sf.isCheck {
 		strErr = fmt.Sprintf(", err=\n\t%v", sf.err)
 	}
-	msg := fmt.Sprintf(msgFormat+strErr, args...)
-	mKh.Assert(sf.err == nil, msg)
+	msg := fmt.Sprintf(msgFormat.String()+strErr, args...)
+	mKh.Assert(sf.err == nil, defs.Str(msg))
 	sf.isCheck = true
 	return sf.val
 }

+ 3 - 2
v4/lev0/result/result_test.go

@@ -6,6 +6,7 @@ import (
 	"testing"
 
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -29,7 +30,7 @@ func (sf *tester) notCheck() {
 			sf.t.Fatalf("notCheck(): panic==nil")
 		}
 	}()
-	res := NewOk("test")
+	res := NewOk(defs.Str("test"))
 	{
 		val := res.Ok()
 		if val != "test" {
@@ -38,7 +39,7 @@ func (sf *tester) notCheck() {
 	}
 	runtime.Gosched()
 	runtime.GC()
-	_res := res.(*Result[string])
+	_res := res.(*Result[defs.Str])
 	_res.destroy(_res)
 }
 

+ 7 - 7
v4/lev1/kint/kint.go

@@ -52,8 +52,8 @@ func (sf *KernInt) Reset() {
 }
 
 // FromStr -- устанавливает значение из строки.
-func (sf *KernInt) FromStr(strVal string) mL0.IResult[defs.Int] {
-	iVal, err := strconv.Atoi(strVal)
+func (sf *KernInt) FromStr(strVal defs.Str) mL0.IResult[defs.Int] {
+	iVal, err := strconv.Atoi(strVal.String())
 	if err != nil {
 		err := fmt.Errorf("KInt.FromStr(): vak(%v) bad, err=\n\t%w", strVal, err)
 		return mL0.NewErr[defs.Int](err)
@@ -63,8 +63,8 @@ func (sf *KernInt) FromStr(strVal string) mL0.IResult[defs.Int] {
 }
 
 // ToStr -- возвращает как строку.
-func (sf *KernInt) ToStr() string {
-	return fmt.Sprint(sf.val)
+func (sf *KernInt) ToStr() defs.Str {
+	return defs.Str(fmt.Sprint(sf.val))
 }
 
 // FromByte -- устанавливает значение из байтов (BigEndian, net order).
@@ -108,9 +108,9 @@ func (sf *KernInt) ToBool() bool {
 }
 
 // Getenv -- устанавливает значение из окружения.
-func (sf *KernInt) Getenv(env string) mL0.IResult[defs.Int] {
-	strVal := os.Getenv(env)
-	res := sf.FromStr(strVal)
+func (sf *KernInt) Getenv(env defs.Str) mL0.IResult[defs.Int] {
+	strVal := os.Getenv(env.String())
+	res := sf.FromStr(defs.Str(strVal))
 	if res.IsErr() {
 		err := fmt.Errorf("safeInt.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[defs.Int](err)

+ 2 - 2
v4/lev1/lev1.go

@@ -45,12 +45,12 @@ func NewSafeString() mKs.ISafeString {
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(strVal string) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntFromStr(strVal defs.Str) mL0.IResult[mKs.ISafeInt] {
 	return safe_int.NewSafeIntFromStr(strVal)
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeIntGetenv(env string) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntGetenv(env defs.Str) mL0.IResult[mKs.ISafeInt] {
 	return safe_int.NewSafeIntGetenv(env)
 }
 

+ 9 - 8
v4/lev1/safe_bool/safe_bool.go

@@ -9,6 +9,7 @@ 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/etypes/ebool"
 )
 
@@ -27,7 +28,7 @@ func NewSafeBool(val bool) core_spec.ISafeBool {
 }
 
 // NewSafeBoolFromStr -- возвращает новое потокобезопасное булево из строки.
-func NewSafeBoolFromStr(strVal string) mL0.IResult[core_spec.ISafeBool] {
+func NewSafeBoolFromStr(strVal defs.Str) mL0.IResult[core_spec.ISafeBool] {
 	sf := NewSafeBool(false)
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
@@ -38,7 +39,7 @@ func NewSafeBoolFromStr(strVal string) mL0.IResult[core_spec.ISafeBool] {
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeBoolGetenv(env string) mL0.IResult[core_spec.ISafeBool] {
+func NewSafeBoolGetenv(env defs.Str) mL0.IResult[core_spec.ISafeBool] {
 	sf := NewSafeBool(false)
 	res := sf.Getenv(env)
 	if res.IsErr() {
@@ -70,11 +71,11 @@ func (sf *safeBool) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBool) FromStr(strVal string) mL0.IResult[core_spec.EBool] {
-	strVal = strings.ToLower(strVal)
+func (sf *safeBool) FromStr(strVal defs.Str) mL0.IResult[core_spec.EBool] {
+	_strVal := strings.ToLower(strVal.String())
 	sf.Lock()
 	defer sf.Unlock()
-	switch strVal {
+	switch _strVal {
 	case "true":
 		sf.val = true
 	case "false":
@@ -86,9 +87,9 @@ func (sf *safeBool) FromStr(strVal string) mL0.IResult[core_spec.EBool] {
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBool) Getenv(env string) mL0.IResult[core_spec.EBool] {
-	strVal := os.Getenv(env)
-	res := sf.FromStr(strVal)
+func (sf *safeBool) Getenv(env defs.Str) mL0.IResult[core_spec.EBool] {
+	strVal := os.Getenv(env.String())
+	res := sf.FromStr(defs.Str(strVal))
 	if res.IsErr() {
 		err := fmt.Errorf("safeBool.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[core_spec.EBool](err)

+ 13 - 12
v4/lev1/safe_bool_react/safe_bool_react.go

@@ -9,26 +9,27 @@ 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/etypes/ebool"
 )
 
 // safeBoolReact -- потокобезопасный булевый признак с реакцией на своё изменение.
 type safeBoolReact struct {
 	sync.RWMutex
-	dict map[string]func(core_spec.EBoolMut) // Словарь обратных вызовов
+	dict map[defs.Str]func(core_spec.EBoolMut) // Словарь обратных вызовов
 	val  bool
 }
 
 // NewSafeBoolReact -- возвращает новый потокобезопасный булевый признак с реакцией на своё изменение.
 func NewSafeBoolReact() core_spec.ISafeBoolReact {
 	sf := &safeBoolReact{
-		dict: map[string]func(core_spec.EBoolMut){},
+		dict: map[defs.Str]func(core_spec.EBoolMut){},
 	}
 	return sf
 }
 
 // NewSafeBoolReactFromStr -- возвращает новое потокобезопасное булево с реакцией из строки.
-func NewSafeBoolReactFromStr(strVal string) mL0.IResult[core_spec.ISafeBoolReact] {
+func NewSafeBoolReactFromStr(strVal defs.Str) mL0.IResult[core_spec.ISafeBoolReact] {
 	sf := NewSafeBoolReact()
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
@@ -39,7 +40,7 @@ func NewSafeBoolReactFromStr(strVal string) mL0.IResult[core_spec.ISafeBoolReact
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое с реакцией из окружения.
-func NewSafeBoolGetenv(env string) mL0.IResult[core_spec.ISafeBoolReact] {
+func NewSafeBoolGetenv(env defs.Str) mL0.IResult[core_spec.ISafeBoolReact] {
 	sf := NewSafeBoolReact()
 	res := sf.Getenv(env)
 	if res.IsErr() {
@@ -50,14 +51,14 @@ func NewSafeBoolGetenv(env string) mL0.IResult[core_spec.ISafeBoolReact] {
 }
 
 // Delete -- удаляет функцию обратного вызова из наблюдения.
-func (sf *safeBoolReact) Delete(key string) {
+func (sf *safeBoolReact) Delete(key defs.Str) {
 	sf.Lock()
 	defer sf.Unlock()
 	delete(sf.dict, key)
 }
 
 // Add -- добавляет функцию обратного вызова.
-func (sf *safeBoolReact) Add(key string, fn func(core_spec.EBoolMut)) mL0.IResult[core_spec.EBool] {
+func (sf *safeBoolReact) Add(key defs.Str, fn func(core_spec.EBoolMut)) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	if key == "" {
@@ -99,11 +100,11 @@ func (sf *safeBoolReact) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[core_spec.EBool] {
-	strVal = strings.ToLower(strVal)
+func (sf *safeBoolReact) FromStr(strVal defs.Str) mL0.IResult[core_spec.EBool] {
+	_strVal := strings.ToLower(strVal.String())
 	sf.Lock()
 	defer sf.Unlock()
-	switch strVal {
+	switch _strVal {
 	case "true":
 		sf.val = true
 	case "false":
@@ -115,9 +116,9 @@ func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[core_spec.EBool] {
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBoolReact) Getenv(env string) mL0.IResult[core_spec.EBool] {
-	strVal := os.Getenv(env)
-	res := sf.FromStr(strVal)
+func (sf *safeBoolReact) Getenv(env defs.Str) mL0.IResult[core_spec.EBool] {
+	strVal := os.Getenv(env.String())
+	res := sf.FromStr(defs.Str(strVal))
 	if res.IsErr() {
 		err := fmt.Errorf("safeBoolReact.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[core_spec.EBool](err)

+ 5 - 5
v4/lev1/safe_int/safe_int.go

@@ -26,7 +26,7 @@ func NewSafeInt(val defs.Int) mKs.ISafeInt {
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(strVal string) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntFromStr(strVal defs.Str) mL0.IResult[mKs.ISafeInt] {
 	sf := NewSafeInt(0)
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
@@ -37,7 +37,7 @@ func NewSafeIntFromStr(strVal string) mL0.IResult[mKs.ISafeInt] {
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeIntGetenv(env string) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntGetenv(env defs.Str) mL0.IResult[mKs.ISafeInt] {
 	sf := NewSafeInt(0)
 	res := sf.Getenv(env)
 	if res.IsErr() {
@@ -94,7 +94,7 @@ func (sf *safeInt) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeInt) FromStr(strVal string) mL0.IResult[defs.Int] {
+func (sf *safeInt) FromStr(strVal defs.Str) mL0.IResult[defs.Int] {
 	sf.Lock()
 	defer sf.Unlock()
 	return sf.val.FromStr(strVal)
@@ -122,14 +122,14 @@ func (sf *safeInt) ToBool() bool {
 }
 
 // ToStr -- конвертирует число в строку.
-func (sf *safeInt) ToStr() string {
+func (sf *safeInt) ToStr() defs.Str {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val.ToStr()
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeInt) Getenv(env string) mL0.IResult[defs.Int] {
+func (sf *safeInt) Getenv(env defs.Str) mL0.IResult[defs.Int] {
 	sf.Lock()
 	defer sf.Unlock()
 	return sf.val.Getenv(env)