|
|
@@ -13,13 +13,13 @@ import (
|
|
|
//
|
|
|
// Может быть либо только полезное значение, либо только ошибка.
|
|
|
type Result[T any] struct {
|
|
|
- val T // Полезное значение
|
|
|
- isCheck bool // Если проверено
|
|
|
+ val T // Полезное значение
|
|
|
+ isCheck bool // Если проверено
|
|
|
err defs.IErr // Ошибка
|
|
|
}
|
|
|
|
|
|
var (
|
|
|
- str5 = defs.Str("NewOk(): result==nil")
|
|
|
+ str5 = defs.AStr("NewOk(): result==nil")
|
|
|
)
|
|
|
|
|
|
// NewOk -- возвращает успешный Result с значением.
|
|
|
@@ -28,7 +28,7 @@ func NewOk[T any](result T) mKs.IResult[T] {
|
|
|
v := reflect.ValueOf(result)
|
|
|
switch v.Kind() {
|
|
|
case reflect.Pointer, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
|
|
|
- mKh.Hassert(!v.IsNil(), str5.Str())
|
|
|
+ mKh.Hassert(!v.IsNil(), str5)
|
|
|
}
|
|
|
sf := &Result[T]{
|
|
|
val: result,
|
|
|
@@ -37,13 +37,13 @@ func NewOk[T any](result T) mKs.IResult[T] {
|
|
|
return sf
|
|
|
}
|
|
|
|
|
|
-var(
|
|
|
- str6= defs.Str("NewErr(): err==nil")
|
|
|
+var (
|
|
|
+ str6 = defs.AStr("NewErr(): err==nil")
|
|
|
)
|
|
|
|
|
|
// NewErr -- возвращает Result с ошибкой.
|
|
|
func NewErr[T any](err defs.IErr) mKs.IResult[T] {
|
|
|
- mKh.Hassert(err != nil, str6.Str())
|
|
|
+ mKh.Hassert(err != nil, str6)
|
|
|
sf := &Result[T]{
|
|
|
err: err,
|
|
|
}
|
|
|
@@ -51,28 +51,28 @@ func NewErr[T any](err defs.IErr) mKs.IResult[T] {
|
|
|
return sf
|
|
|
}
|
|
|
|
|
|
-var(
|
|
|
- str7=defs.Str("WrapErr(): result not have error")
|
|
|
- str8=defs.Str("WrapErr(): err==nil")
|
|
|
+var (
|
|
|
+ str7 = defs.AStr("WrapErr(): result not have error")
|
|
|
+ str8 = defs.AStr("WrapErr(): err==nil")
|
|
|
)
|
|
|
|
|
|
// WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
|
|
|
func WrapErr[T any](res mKs.IResult[T], err defs.IErr) mKs.IResult[T] {
|
|
|
- mKh.Hassert(res.IsErr(), str7.Str())
|
|
|
- mKh.Hassert(err != nil, str8.Str())
|
|
|
+ mKh.Hassert(res.IsErr(), str7)
|
|
|
+ mKh.Hassert(err != nil, str8)
|
|
|
err0 := res.Err() // Чтобы не было паники при финализации и обернуть ошибку
|
|
|
err = defs.NewErr("%v, err=\n\t%w", err0, err)
|
|
|
sf := NewErr[T](err)
|
|
|
return sf
|
|
|
}
|
|
|
|
|
|
-var(
|
|
|
- str9=defs.Str("Result[T].destroy(): err not checked")
|
|
|
+var (
|
|
|
+ str9 = defs.AStr("Result[T].destroy(): err not checked")
|
|
|
)
|
|
|
|
|
|
func (sf *Result[T]) destroy(res *Result[T]) {
|
|
|
if !res.isCheck {
|
|
|
- mKh.Hassert(false, str9.Str())
|
|
|
+ mKh.Hassert(false, str9)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -90,7 +90,6 @@ func (sf *Result[T]) IsErr() bool {
|
|
|
|
|
|
// Ok -- возвращает значение, если оно есть, иначе паникует.
|
|
|
func (sf *Result[T]) Ok() T {
|
|
|
-
|
|
|
mKh.Hassert(sf.err == nil, "Result[T].Ok(): err!=nil, err=\n\t%v", sf.err)
|
|
|
sf.isCheck = true
|
|
|
return sf.val
|
|
|
@@ -106,13 +105,13 @@ func (sf *Result[T]) OkOr(defaultValue T) T {
|
|
|
return sf.Ok()
|
|
|
}
|
|
|
|
|
|
-var(
|
|
|
- str11=defs.Str("Result[T].OkOrFn(): fn==nil")
|
|
|
+var (
|
|
|
+ str11 = defs.AStr("Result[T].OkOrFn(): fn==nil")
|
|
|
)
|
|
|
|
|
|
// OkOrFn -- возвращает значение, если оно есть, или результат выполнения функции.
|
|
|
func (sf *Result[T]) OkOrFn(fn func() T) T {
|
|
|
- mKh.Hassert(fn != nil, str11.Str())
|
|
|
+ mKh.Hassert(fn != nil, str11)
|
|
|
sf.isCheck = true
|
|
|
if sf.err != nil {
|
|
|
sf.val = fn()
|
|
|
@@ -121,20 +120,24 @@ func (sf *Result[T]) OkOrFn(fn func() T) T {
|
|
|
return sf.Ok()
|
|
|
}
|
|
|
|
|
|
-var(
|
|
|
- str12=defs.Str("Result[T].Err(): err==nil")
|
|
|
+var (
|
|
|
+ str12 = defs.AStr("Result[T].Err(): err==nil")
|
|
|
)
|
|
|
|
|
|
// Err -- возвращает ошибку, если она есть.
|
|
|
func (sf *Result[T]) Err() error {
|
|
|
- mKh.Hassert(sf.err != nil, str12.Str())
|
|
|
+ mKh.Hassert(sf.err != nil, str12)
|
|
|
sf.isCheck = true
|
|
|
return sf.err
|
|
|
}
|
|
|
|
|
|
+var(
|
|
|
+ str13= defs.AStr("Result[T].Error(): err==nil")
|
|
|
+)
|
|
|
+
|
|
|
// Error -- возвращает строковое представление ошибки, если она есть.
|
|
|
func (sf *Result[T]) Error() string {
|
|
|
- mKh.Hassert(sf.err != nil, defs.Str("Result[T].Error(): err==nil"))
|
|
|
+ mKh.Hassert(sf.err != nil, str13)
|
|
|
sf.isCheck = true
|
|
|
return sf.err.Error()
|
|
|
}
|
|
|
@@ -143,19 +146,19 @@ func (sf *Result[T]) Error() string {
|
|
|
func (sf *Result[T]) Hassert(msgFormat defs.AStr, args ...any) T {
|
|
|
strErr := defs.AStr("")
|
|
|
if !sf.isCheck {
|
|
|
- strErr = defs.Str(", err=\n\t%v", sf.err).Str()
|
|
|
+ strErr = defs.Str("Result[T].Hassert(): not check error, err=\n\t%v", sf.err)
|
|
|
}
|
|
|
- msg := defs.Str(msgFormat+strErr, args...)
|
|
|
- mKh.Hassert(sf.err == nil, msg)
|
|
|
+ strErr = defs.Str(msgFormat+strErr, args...)
|
|
|
+ mKh.Hassert(sf.err == nil, strErr)
|
|
|
sf.isCheck = true
|
|
|
return sf.val
|
|
|
}
|
|
|
|
|
|
// Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
|
|
|
func (sf *Result[T]) Assert(msgFormat defs.AStr, args ...any) T {
|
|
|
- strErr := defs.Str("")
|
|
|
+ strErr := defs.AStr("")
|
|
|
if !sf.isCheck {
|
|
|
- strErr = defs.Str(", err=\n\t%v", sf.err).Str()
|
|
|
+ strErr = defs.Str("Result[T].Assert(): not check error, , err=\n\t%v", sf.err).Str()
|
|
|
}
|
|
|
mKh.Assert(sf.err == nil, msgFormat+strErr, args...)
|
|
|
sf.isCheck = true
|