瀏覽代碼

SVI Изменение интерфейсов; 100.0%

SVI 9 月之前
父節點
當前提交
9ad0964603

+ 1 - 1
kc/log_buf/log_bus/log_topic/log_topic.go

@@ -30,7 +30,7 @@ func NewLogTopic(topic ATopic, client IBusClient) *LogTopic {
 func (sf *LogTopic) Pub(binMsg []byte) Result[bool] {
 	res := sf.client.Publish(sf.topic, binMsg)
 	if res.IsErr() {
-		err := fmt.Errorf("LogTopic.Pub(): in pub with client, err=\n\t%v", res.Error())
+		err := fmt.Errorf("LogTopic.Pub(): in pub with client, err=\n\t%v", res.Err())
 		return NewErr[bool](err)
 	}
 	return res

+ 1 - 1
kc/log_buf/log_bus/log_topic/log_topic_test.go

@@ -32,7 +32,7 @@ func (sf *tester) newGood1() {
 	client := NewLogTopic("test_topic", busClient)
 	res := client.Pub([]byte("test_msg"))
 	if res.IsErr() {
-		sf.t.Fatalf("newGood1(): err=%v", res.Error())
+		sf.t.Fatalf("newGood1(): err=%v", res.Err())
 	}
 	ctx := kctx.GetKernelCtx()
 	ctx.Cancel()

+ 1 - 1
kern_test.go

@@ -52,7 +52,7 @@ func (sf *tester) new() {
 	store := GetKernelStoreKv()
 	res := store.Delete("test_builders")
 	if res.IsErr() {
-		sf.t.Fatalf("new(): get empty key, store, err=%v", res.Error())
+		sf.t.Fatalf("new(): get empty key, store, err=%v", res.Err())
 	}
 
 	safeBool := NewSafeBool()

+ 2 - 2
krn/kbus/dict_topic_serve/dict_topic_serve_test.go

@@ -70,9 +70,9 @@ func (sf *tester) sendGood1() {
 	TimeoutDefault = 5000
 	res := sf.dict.SendRequest(sf.hand.Topic(), []byte("test_good"))
 	if res.IsErr() {
-		sf.t.Fatalf("sendGood1(): err=%v", res.Error())
+		sf.t.Fatalf("sendGood1(): err=%v", res.Err())
 	}
-	if res.Unwrap() == nil {
+	if res.Val() == nil {
 		sf.t.Fatalf("sendGood1(): binMsg==nil")
 	}
 }

+ 2 - 2
krn/kbus/kbus_base/kbus_base.go

@@ -54,7 +54,7 @@ func GetKernelBusBase() *KBusBase {
 	go Bus_.run()
 	Bus_.IsWork_.Set()
 	res := Bus_.Ctx_.Wg().Add(strBusBaseStream)
-	Hassert(res.IsOk(), "GetKernelBusBase(): in add name stream(%v), err=\n\t%v", strBusBaseStream, res.Error())
+	res.Hassert("GetKernelBusBase(): in add name stream(%v)", strBusBaseStream)
 	ctx.Set("kernBusBase", Bus_, "base of data bus")
 	_ = IKernelBus(Bus_)
 	return Bus_
@@ -100,7 +100,7 @@ func (sf *KBusBase) SendRequest(topic ATopic, binReq []byte) Result[[]byte] {
 	}
 	res := sf.dictServe.SendRequest(topic, binReq)
 	if res.IsErr() {
-		err := fmt.Errorf("KBusBase.SendRequest(): topic='%v', err=\n\t%w", topic, res.Error())
+		err := fmt.Errorf("KBusBase.SendRequest(): topic='%v', err=\n\t%w", topic, res.Err())
 		sf.log.Err(err.Error())
 		return NewErr[[]byte](err)
 	}

+ 4 - 4
krn/kbus/kbus_base/kbus_base_test.go

@@ -61,9 +61,9 @@ func (sf *tester) reqGood1() {
 	sf.t.Log("reqGood1")
 	res := sf.bus.SendRequest(sf.handServ.Topic_, []byte("test_msg"))
 	if res.IsErr() {
-		sf.t.Fatalf("reqGood1(): err=%v", res.Error())
+		sf.t.Fatalf("reqGood1(): err=%v", res.Err())
 	}
-	if res.Unwrap() == nil {
+	if res.Val() == nil {
 		sf.t.Fatalf("reqGood1(): binMsg==nil")
 	}
 }
@@ -108,7 +108,7 @@ func (sf *tester) pubGood10() {
 	}()
 	res := sf.bus.Publish("test_topic1", []byte("test_msg"))
 	if res.IsErr() {
-		sf.t.Fatalf("pubGood10(): err=%v", res.Error())
+		sf.t.Fatalf("pubGood10(): err=%v", res.Err())
 	}
 }
 
@@ -121,7 +121,7 @@ func (sf *tester) subGood1() {
 	}()
 	res := sf.bus.Subscribe(sf.handSub)
 	if res.IsErr() {
-		sf.t.Fatalf("subGood1(): err=%v", res.Error())
+		sf.t.Fatalf("subGood1(): err=%v", res.Err())
 	}
 }
 

+ 11 - 11
krn/kbus/kbus_http/client_bus_http/client_bus_http_test.go

@@ -55,12 +55,12 @@ func (sf *tester) sendGood1() {
 	sf.t.Log("sendGood1")
 	res := sf.cl.SendRequest("test_topic_serv", []byte("test msg 456"))
 	if res.IsErr() {
-		sf.t.Fatalf("sendGood1(): err=%v", res.Error())
+		sf.t.Fatalf("sendGood1(): err=%v", res.Err())
 	}
-	if res.Unwrap() == nil {
+	if res.Val() == nil {
 		sf.t.Fatalf("sendGood1(): binResp==nil")
 	}
-	strResp := string(res.Unwrap())
+	strResp := string(res.Val())
 	if strResp != "test msg 456" {
 		sf.t.Fatalf("sendGood1(): strResp(%v)!='test msg 456'", strResp)
 	}
@@ -144,10 +144,10 @@ func (sf *tester) pubBad2() {
 	sf.handSub.BinMsg_ = []byte{}
 	res := sf.cl.Publish("test_topic_sub", []byte("test_msg_456"))
 	if res.IsOk() {
-		if strings.Contains(res.Error().Error(), "topic='test_topic_sub',bus already closed") {
+		if strings.Contains(res.Err().Error(), "topic='test_topic_sub',bus already closed") {
 			return
 		}
-		sf.t.Fatalf("pubBad2(): err=%v", res.Error())
+		sf.t.Fatalf("pubBad2(): err=%v", res.Err())
 	}
 }
 
@@ -161,10 +161,10 @@ func (sf *tester) pubGood1() {
 	sf.handSub.BinMsg_ = []byte{}
 	res := sf.cl.Publish("test_topic_sub", []byte("test_msg_456"))
 	if res.IsErr() {
-		if strings.Contains(res.Error().Error(), "topic='test_topic_sub',bus already closed") {
+		if strings.Contains(res.Err().Error(), "topic='test_topic_sub',bus already closed") {
 			return
 		}
-		sf.t.Fatalf("pubGood1(): err=%v", res.Error())
+		sf.t.Fatalf("pubGood1(): err=%v", res.Err())
 	}
 	for {
 		SleepMs()
@@ -218,10 +218,10 @@ func (sf *tester) subBad3() {
 	}()
 	res := sf.cl.Subscribe(sf.handSub)
 	if res.IsErr() {
-		if strings.Contains(res.Error().Error(), "bus already closed") {
+		if strings.Contains(res.Err().Error(), "bus already closed") {
 			return
 		}
-		sf.t.Fatalf("subBad3(): err=%v", res.Error())
+		sf.t.Fatalf("subBad3(): err=%v", res.Err())
 	}
 }
 
@@ -234,10 +234,10 @@ func (sf *tester) subGood1() {
 	}()
 	res := sf.cl.Subscribe(sf.handSub)
 	if res.IsErr() {
-		if strings.Contains(res.Error().Error(), "bus already closed") {
+		if strings.Contains(res.Err().Error(), "bus already closed") {
 			return
 		}
-		sf.t.Fatalf("subGood1(): err=%v", res.Error())
+		sf.t.Fatalf("subGood1(): err=%v", res.Err())
 	}
 }
 

+ 4 - 4
krn/kbus/kbus_http/kbus_http.go

@@ -81,7 +81,7 @@ func (sf *kBusHttp) processSubscribe(req *msg_sub.SubscribeReq) *msg_sub.Subscri
 	}
 	res := sf.Subscribe(handler)
 	if res.IsErr() {
-		resp.Status_ = fmt.Sprintf("kernelBusHttp.processSubscribe(): err=\n\t%v", res.Error())
+		resp.Status_ = fmt.Sprintf("kernelBusHttp.processSubscribe(): err=\n\t%v", res.Err())
 		return resp
 	}
 	return resp
@@ -119,7 +119,7 @@ func (sf *kBusHttp) processPublish(req *msg_pub.PublishReq) *msg_pub.PublishResp
 		Uuid_:   req.Uuid_,
 	}
 	if res.IsErr() {
-		resp.Status_ = fmt.Sprintf("kernelBusHttp.processPublish(): err=\n\t%v", res.Error())
+		resp.Status_ = fmt.Sprintf("kernelBusHttp.processPublish(): err=\n\t%v", res.Err())
 		return resp
 	}
 	return resp
@@ -157,10 +157,10 @@ func (sf *kBusHttp) processSendRequest(req *msg_serve.ServeReq) *msg_serve.Serve
 		Uuid_:   req.Uuid_,
 	}
 	if res.IsErr() {
-		resp.Status_ = fmt.Sprintf("kernelBusHttp.processSendRequest(): err=\n\t%v", res.Error())
+		resp.Status_ = fmt.Sprintf("kernelBusHttp.processSendRequest(): err=\n\t%v", res.Err())
 		return resp
 	}
-	resp.BinResp_ = res.Unwrap()
+	resp.BinResp_ = res.Val()
 	return resp
 }
 

+ 3 - 3
krn/kbus/kbus_http/kbus_http_test.go

@@ -55,7 +55,7 @@ func (sf *tester) unsubGood2() {
 	sf.t.Log("unsubGood2")
 	res := bus.Subscribe(sf.handSub)
 	if res.IsErr() {
-		sf.t.Fatalf("unsubGood1(): err=%v", res.Error())
+		sf.t.Fatalf("unsubGood1(): err=%v", res.Err())
 	}
 	req := &msg_unsub.UnsubReq{
 		Name_: sf.handSub.Name_,
@@ -114,7 +114,7 @@ func (sf *tester) unsubGood1() {
 	sf.t.Log("unsubGood1")
 	res := bus.Subscribe(sf.handSub)
 	if res.IsErr() {
-		sf.t.Fatalf("unsubGood1(): err=%v", res.Error())
+		sf.t.Fatalf("unsubGood1(): err=%v", res.Err())
 	}
 	count := 0
 	for count < 100 {
@@ -249,7 +249,7 @@ func (sf *tester) pubGood1() {
 	sf.t.Log("pubGood1")
 	res := bus.Subscribe(sf.handSub)
 	if res.IsErr() {
-		sf.t.Fatalf("pubGood1(): err=%v", res.Error())
+		sf.t.Fatalf("pubGood1(): err=%v", res.Err())
 	}
 	req := &msg_pub.PublishReq{
 		Topic_:  "topic_sub",

+ 1 - 1
krn/kbus/kbus_local/client_bus_local/client_bus_local_test.go

@@ -27,6 +27,6 @@ func (sf *tester) new() {
 	}
 	res := sf.cl.Publish("local_topic", []byte("test_msg"))
 	if res.IsErr() {
-		sf.t.Fatalf("new(): err=%v", res.Error())
+		sf.t.Fatalf("new(): err=%v", res.Err())
 	}
 }

+ 1 - 1
krn/kctx/kernel_keeper/kernel_keeper.go

@@ -47,7 +47,7 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(), wg IKernelWg) *kernel
 	}
 	sf.log.Debug("GetKernelKeeper(): first run")
 	res := sf.wg.Add("kernel_keeper")
-	Hassert(res.IsOk(), "NewKernelCtx(): in add stream kernel keeper in IKernelWg, err=\n\t%v", res.Error())
+	res.Hassert("NewKernelCtx(): in add stream kernel keeper in IKernelWg")
 
 	go sf.run(sf.chSys_)
 	kernKeep = sf

+ 1 - 1
krn/kctx/kwg/kwg_test.go

@@ -94,7 +94,7 @@ func (sf *tester) addGood1() {
 	sf.t.Log("addGood1")
 	res := sf.wg.Add("test_stream")
 	if res.IsErr() {
-		sf.t.Fatalf("addGood1(): err=%v", res.Error())
+		sf.t.Fatalf("addGood1(): err=%v", res.Err())
 	}
 }
 

+ 1 - 8
krn/kmodule/kmodule.go

@@ -103,7 +103,7 @@ func (sf *kModule) sigLive() {
 			res = sf.bus.Publish(ATopic(topic), sf.strLive.Byte())
 			iPhase = -1
 		}
-		sf.recErr(res.Error())
+		res.Hassert("kModule.sigLive(): name=%v, in publish live", sf.Name())
 		iPhase++
 		sf.stat.Add(1)
 		time.Sleep(time.Millisecond * time.Duration(sf.timePhase.Get()))
@@ -117,10 +117,3 @@ func (sf *kModule) sigLive() {
 		}
 	}
 }
-
-// Регистрирует ошибку обработчика при публикации лайв сигнала, если была
-func (sf *kModule) recErr(err error) {
-	if err != nil {
-		sf.Log().Err("kModule.recErr(): name=%v, in publish live, err=\n\t%v", err)
-	}
-}

+ 4 - 18
krn/kmodule/kmodule_test.go

@@ -1,7 +1,6 @@
 package kmodule
 
 import (
-	"fmt"
 	"testing"
 	"time"
 
@@ -22,21 +21,6 @@ func TestKernelModule(t *testing.T) {
 	sf.run()
 	sf.isWork()
 	sf.done()
-	sf.recErr()
-}
-
-// Регистрация ошибки
-func (sf *tester) recErr() {
-	sf.t.Log("recErr")
-	mod := sf.mod.(*kModule)
-	err := fmt.Errorf("tra-la-la")
-	mod.recErr(err)
-	if live := sf.mod.Live(); live == "" {
-		sf.t.Fatalf("recErr(): live empty")
-	}
-	if stat := sf.mod.Stat(); stat == nil {
-		sf.t.Fatalf("recErr(): stat==nil")
-	}
 }
 
 // Работа после остановки локальной шины
@@ -46,8 +30,8 @@ func (sf *tester) done() {
 
 	time.Sleep(time.Millisecond * 250)
 	kCtx.Cancel()
-	kCtx.Done()
-	time.Sleep(time.Millisecond * 200)
+	kCtx.Wg().Wait()
+	time.Sleep(time.Millisecond * 250)
 }
 
 // Проверить признак работы
@@ -93,6 +77,8 @@ func (sf *tester) newGood1() {
 	if _log := sf.mod.Log(); _log == nil {
 		sf.t.Fatalf("newGood1(): log==nil")
 	}
+	_ = sf.mod.Stat()
+	_ = sf.mod.Live()
 }
 
 // Нет имени модуля

+ 1 - 1
krn/kserv_http/kserv_http.go

@@ -87,7 +87,7 @@ func GetKernelServHttp() IKernelServerHttp {
 	}))
 	sf.fiberApp.Get("/monitor", monitor.New(monitor.Config{Title: ctx.Get("monolitName").Val().(string)}))
 	res := sf.kCtx.Wg().Add(streamName)
-	Hassert(res.IsOk(), "NewKernelServHttp(): in add stream %v, err=\n\t%v", streamName, res.Error())
+	res.Hassert("NewKernelServHttp(): in add stream %v", streamName)
 	ctx.Set("fiberApp", sf.fiberApp, "kServHttp: internal fiber app")
 	kernServHttp = sf
 	ctx.Set("kServHttp", kernServHttp, "kServHttp")

+ 1 - 1
krn/kstore_kv/kstore_kv.go

@@ -139,7 +139,7 @@ func (sf *kStoreKv) open() {
 	sf.db, err = badger.Open(badger.DefaultOptions(sf.storePath))
 	Hassert(err == nil, "kStoreKv.open(): in open DB %v, err=\n\t%v", sf.storePath, err)
 	res := sf.wg.Add(storeStreamName)
-	Hassert(res.IsOk(), "kStoreKv.open(): in add name stream to IKernelWg, err=\n\t%v", res.Error())
+	res.Hassert("kStoreKv.open(): in add name stream to IKernelWg")
 	sf.isWork.Set()
 	go sf.close()
 	go sf.clean()

+ 5 - 5
krn/kstore_kv/kstore_kv_test.go

@@ -63,7 +63,7 @@ func (sf *tester) del() {
 	sf.t.Log("del")
 	res := kernStore.Delete("test_key")
 	if res.IsErr() {
-		sf.t.Fatalf("del(): err=%v", res.Error())
+		sf.t.Fatalf("del(): err=%v", res.Err())
 	}
 	res1 := kernStore.Get("test_key")
 	if res1.IsOk() {
@@ -76,9 +76,9 @@ func (sf *tester) get() {
 	sf.t.Log("get")
 	res := kernStore.Get("test_key")
 	if res.IsErr() {
-		sf.t.Fatalf("get(): err=%v", res.Error())
+		sf.t.Fatalf("get(): err=%v", res.Err())
 	}
-	strVal := string(res.Unwrap())
+	strVal := string(res.Val())
 	if strVal != "test_val" {
 		sf.t.Fatalf("get(): strVal(%v)!='test_val'", strVal)
 	}
@@ -89,7 +89,7 @@ func (sf *tester) set() {
 	sf.t.Log("set")
 	res := kernStore.Set("test_key", []byte("test_val"))
 	if res.IsErr() {
-		sf.t.Fatalf("set(): err=%v", res.Error())
+		sf.t.Fatalf("set(): err=%v", res.Err())
 	}
 }
 
@@ -98,7 +98,7 @@ func (sf *tester) close() {
 	sf.t.Log("close")
 	res := sf.wg.Add("123")
 	if res.IsErr() {
-		sf.t.Fatalf("close(): err=%v", res.Error())
+		sf.t.Fatalf("close(): err=%v", res.Err())
 	}
 	sf.ctx.Cancel()
 	time.Sleep(time.Millisecond * 20)

+ 38 - 19
krn/ktypes/kresult.go

@@ -11,8 +11,9 @@ import (
 //
 // Может быть либо только полезное значение, либо только ошибка
 type Result[T any] struct {
-	val T     // Полезное значение
-	err error // Ошибка
+	val   T // Полезное значение
+	isErr bool
+	err   error // Ошибка
 }
 
 // NewOk -- возвращает успешный Result с значением
@@ -33,56 +34,74 @@ func NewOk[T any](result T) Result[T] {
 func NewErr[T any](err error) Result[T] {
 	Hassert(err != nil, "NewError(): err==nil")
 	return Result[T]{
-		err: err,
+		err:   err,
+		isErr: true,
 	}
 }
 
+// WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой
+func WrapErr[T any](res Result[T], err error) Result[T] {
+	Hassert(res.IsErr(), "WrapErr(): result not have error")
+	Hassert(err != nil, "WrapErr(): err==nil")
+	err0 := res.Err()
+	err = fmt.Errorf("%v, err=\n\t%w", err0, err)
+	res0 := NewErr[T](err)
+	return res0
+}
+
 // IsOk -- возвращает true, если Result содержит значение
 func (sf *Result[T]) IsOk() bool {
-	return sf.err == nil
+	return !sf.isErr
 }
 
 // IsErr -- возвращает true, если Result содержит ошибку
 func (sf *Result[T]) IsErr() bool {
-	return sf.err != nil
+	return sf.isErr
 }
 
-// Unwrap -- возвращает значение, если оно есть, иначе паникует
-func (sf *Result[T]) Unwrap() T {
-	Hassert(sf.err == nil, "Result[T].Unwrap(): err(%v)!=nil", sf.err)
+// Val -- возвращает значение, если оно есть, иначе паникует
+func (sf *Result[T]) Val() T {
+	Hassert(!sf.isErr, "Result[T].Val(): err(%v)!=nil", sf.err)
 	return sf.val
 }
 
-// UnwrapOr -- возвращает значение, если оно есть, или значение по умолчанию
-func (sf *Result[T]) UnwrapOr(defaultValue T) T {
-	if sf.err != nil {
+// ValOr -- возвращает значение, если оно есть, или значение по умолчанию
+func (sf *Result[T]) ValOr(defaultValue T) T {
+	if sf.isErr {
 		return defaultValue
 	}
 	return sf.val
 }
 
-// UnwrapOrFn -- возвращает значение, если оно есть, или результат выполнения функции
-func (sf *Result[T]) UnwrapOrFn(fn func() T) T {
-	Hassert(fn != nil, "Result[T].UnwrapOrFn(): fn==nil")
-	if sf.err != nil {
+// ValOrFn -- возвращает значение, если оно есть, или результат выполнения функции
+func (sf *Result[T]) ValOrFn(fn func() T) T {
+	Hassert(fn != nil, "Result[T].ValOrFn(): fn==nil")
+	if sf.isErr {
 		return fn()
 	}
 	return sf.val
 }
 
-// Error -- возвращает ошибку, если она есть
-func (sf *Result[T]) Error() error {
+// Err -- возвращает ошибку, если она есть
+func (sf *Result[T]) Err() error {
+	Hassert(sf.isErr, "Result[T].Err(): err==nil")
 	return sf.err
 }
 
+// Error -- возвращает строковое представление ошибки, если она есть
+func (sf *Result[T]) Error() string {
+	Hassert(sf.isErr, "Result[T].Error(): err==nil")
+	return sf.err.Error()
+}
+
 // Hassert -- проверяет, что нет ошибки (с паникой)
 func (sf *Result[T]) Hassert(msgFormat string, args ...any) {
 	msg := fmt.Sprintf(msgFormat, args...)
-	Hassert(sf.err == nil, msg+", err=\n\t%v\n", sf.err)
+	Hassert(!sf.isErr, msg+", err=\n\t%v\n", sf.err)
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде)
 func (sf *Result[T]) Assert(msgFormat string, args ...any) {
 	msg := fmt.Sprintf(msgFormat, args...)
-	Assert(sf.err == nil, msg+", err=\n\t%v\n", sf.err)
+	Assert(!sf.isErr, msg+", err=\n\t%v\n", sf.err)
 }

+ 25 - 11
krn/ktypes/kresult_test.go

@@ -41,18 +41,31 @@ func (sf *testerResult) createErrGood1() {
 	if !res.IsErr() {
 		sf.t.Fatalf("createErrGood1(): not err")
 	}
-	if val := res.UnwrapOr("test2"); val != "test2" {
+	if val := res.ValOr("test2"); val != "test2" {
 		sf.t.Fatalf("createErrGood1(): val bad")
 	}
-	if val := res.UnwrapOr("test1"); val != "test1" {
+	if val := res.ValOr("test1"); val != "test1" {
 		sf.t.Fatalf("createErrGood1(): val bad")
 	}
-	if val := res.UnwrapOrFn(sf.fnWrap2); val != "test5" {
+	if val := res.ValOrFn(sf.fnWrap2); val != "test5" {
 		sf.t.Fatalf("createErrGood1(): val bad")
 	}
-	if err := res.Error(); err == nil {
+	if err := res.Err(); err == nil {
 		sf.t.Fatalf("createErrGood1(): err == nil")
 	}
+	{
+		res0 := WrapErr(res, err)
+		if res0.IsOk() {
+			sf.t.Fatalf("createErrGood1(): err == nil")
+		}
+		_ = res0.Error()
+	}
+	{
+		res := NewOk("test_ok")
+		if val := res.ValOr("test_ok1"); val != "test_ok" {
+			sf.t.Fatalf("createErrGood1(): val(%v) != 'test_ok'", val)
+		}
+	}
 	sf.unwrapErr(res)
 	sf.hassert(res)
 	sf.assert(res)
@@ -85,7 +98,7 @@ func (sf *testerResult) unwrapErr(res Result[string]) {
 			sf.t.Fatalf("unwrapErr(): panic==nil")
 		}
 	}()
-	_ = res.Unwrap()
+	_ = res.Val()
 }
 
 // Нет ошибки
@@ -115,20 +128,21 @@ func (sf *testerResult) createOkGood2() {
 	if res.IsErr() {
 		sf.t.Fatalf("createOkGood1(): is err")
 	}
-	if val := res.Unwrap(); val != "test val" {
+	if val := res.Val(); val != "test val" {
 		sf.t.Fatalf("createOkGood1(): val bad")
 	}
-	if val := res.UnwrapOr("test1"); val != "test val" {
+	if val := res.ValOr("test1"); val != "test val" {
 		sf.t.Fatalf("createOkGood1(): val bad")
 	}
-	if val := res.UnwrapOr("test1"); val != "test val" {
+	if val := res.ValOr("test1"); val != "test val" {
 		sf.t.Fatalf("createOkGood1(): val bad")
 	}
-	if val := res.UnwrapOrFn(sf.fnWrap); val != "test val" {
+	if val := res.ValOrFn(sf.fnWrap); val != "test val" {
 		sf.t.Fatalf("createOkGood1(): val bad")
 	}
-	if err := res.Error(); err != nil {
-		sf.t.Fatalf("createOkGood1(): err !=nil")
+	res0 := NewErr[any](fmt.Errorf("test_error"))
+	if err := res0.Err(); err == nil {
+		sf.t.Fatalf("createOkGood1(): err ==nil")
 	}
 	res.Hassert("test")
 	res.Assert("test")

+ 3 - 3
mock/mock_hand_serve/mock_hand_serve_test.go

@@ -28,10 +28,10 @@ func (sf *tester) backGood1() {
 	sf.t.Log("backGood1")
 	res := sf.hand.FnBack([]byte("test_msg"))
 	if res.IsErr() {
-		sf.t.Fatalf("backGood1(): err=%v", res.Error())
+		sf.t.Fatalf("backGood1(): err=%v", res.Err())
 	}
-	if string(res.Unwrap()) != "test_msg" {
-		sf.t.Fatalf("backGood1(): binMsg(%v)!='test_msg'", string(res.Unwrap()))
+	if string(res.Val()) != "test_msg" {
+		sf.t.Fatalf("backGood1(): binMsg(%v)!='test_msg'", string(res.Val()))
 	}
 }