Prechádzať zdrojové kódy

SVI Внедрение Result и Option; 100.0%

SVI 1 rok pred
rodič
commit
f429ab2ce4

+ 3 - 3
kern_test.go

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

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

@@ -53,8 +53,8 @@ func GetKernelBusBase() *KBusBase {
 	go Bus_.close()
 	go Bus_.run()
 	Bus_.IsWork_.Set()
-	err := Bus_.Ctx_.Wg().Add(strBusBaseStream)
-	Hassert(err == nil, "GetKernelBusBase(): in add name stream(%v), err=\n\t%v", strBusBaseStream, err)
+	res := Bus_.Ctx_.Wg().Add(strBusBaseStream)
+	Hassert(res.IsOk(), "GetKernelBusBase(): in add name stream(%v), err=\n\t%v", strBusBaseStream, res.Error())
 	ctx.Set("kernBusBase", Bus_, "base of data bus")
 	_ = IKernelBus(Bus_)
 	return Bus_

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

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

+ 4 - 3
krn/kctx/kwg/kwg.go

@@ -99,18 +99,19 @@ func (sf *kernelWg) Wait() {
 }
 
 // Add -- добавляет поток в ожидание
-func (sf *kernelWg) Add(name AStreamName) error {
+func (sf *kernelWg) Add(name AStreamName) Result[bool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("kernelWg.Add(): stream='%v'", name)
 	if !sf.isWork.Get() {
-		return fmt.Errorf("kernelWg.Add(): stream=%v, work end", name)
+		err := fmt.Errorf("kernelWg.Add(): stream=%v, work end", name)
+		return NewErr[bool](err)
 	}
 	Hassert(name != "", "kernelWg.Add(): name stream is empty")
 	_, isOk := sf.dictStream[name]
 	Hassert(!isOk, "kernelWg.Add(): stream '%v' already exists", name)
 	sf.dictStream[name] = true
-	return nil
+	return NewOk(true)
 }
 
 // Ожидает окончания работы ожидателя групп

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

@@ -34,8 +34,8 @@ func TestKernelWG(t *testing.T) {
 // Попытка добавления после закрытия ожидателя
 func (sf *tester) addBad3() {
 	sf.t.Log("addBad3")
-	err := sf.wg.Add("test_stream")
-	if err == nil {
+	res := sf.wg.Add("test_stream")
+	if res.IsOk() {
 		sf.t.Fatalf("addBad3(): err==nil")
 	}
 	_len := sf.wg.Len()
@@ -92,9 +92,9 @@ func (sf *tester) addBad1() {
 
 func (sf *tester) addGood1() {
 	sf.t.Log("addGood1")
-	err := sf.wg.Add("test_stream")
-	if err != nil {
-		sf.t.Fatalf("addGood1(): err=%v", err)
+	res := sf.wg.Add("test_stream")
+	if res.IsErr() {
+		sf.t.Fatalf("addGood1(): err=%v", res.Error())
 	}
 }
 

+ 2 - 2
krn/kserv_http/kserv_http.go

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

+ 17 - 17
krn/kstore_kv/kstore_kv.go

@@ -66,7 +66,7 @@ func (sf *kStoreKv) Log() ILogBuf {
 }
 
 // Set -- устанавливает значение по ключу
-func (sf *kStoreKv) Set(key string, val []byte) error {
+func (sf *kStoreKv) Set(key string, val []byte) Result[bool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("kStoreKv.Set(): key='%v'", key)
@@ -76,15 +76,15 @@ func (sf *kStoreKv) Set(key string, val []byte) error {
 	}
 	err := sf.db.Update(fnSet)
 	if err != nil {
-		strOut := fmt.Sprintf("kStoreKv.Set(): key=%v, err=\n\t%v", key, err)
-		sf.log.Err(strOut)
-		return fmt.Errorf(strOut, "")
+		err := fmt.Errorf("kStoreKv.Set(): key=%v, err=\n\t%w", key, err)
+		sf.log.Err(err.Error())
+		return NewErr[bool](err)
 	}
-	return nil
+	return NewOk(true)
 }
 
 // Get -- возвращает значение по ключу
-func (sf *kStoreKv) Get(key string) ([]byte, error) {
+func (sf *kStoreKv) Get(key string) Result[[]byte] {
 	sf.RLock()
 	defer sf.RUnlock()
 	sf.log.Debug("kStoreKv.Get(): key='%v'", key)
@@ -99,15 +99,15 @@ func (sf *kStoreKv) Get(key string) ([]byte, error) {
 	}
 	err := sf.db.View(fnGet)
 	if err != nil {
-		strOut := fmt.Sprintf("kStoreKv.Get(): key=%v, err=\n\t%v", key, err)
-		sf.log.Err(strOut)
-		return nil, fmt.Errorf(strOut, "")
+		err := fmt.Errorf("kStoreKv.Get(): key=%v, err=\n\t%v", key, err)
+		sf.log.Err(err.Error())
+		return NewErr[[]byte](err)
 	}
-	return binVal, nil
+	return NewOk(binVal)
 }
 
 // Delete -- удалить ключ из хранилища
-func (sf *kStoreKv) Delete(key string) error {
+func (sf *kStoreKv) Delete(key string) Result[bool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("kStoreKv.Delete(): key='%v'", key)
@@ -117,11 +117,11 @@ func (sf *kStoreKv) Delete(key string) error {
 	}
 	err := sf.db.Update(fnDelete)
 	if err != nil {
-		strOut := fmt.Sprintf("kStoreKv.Delete(): key=%v, err=\n\t%v", key, err)
-		sf.log.Err(strOut)
-		return fmt.Errorf(strOut, "")
+		err := fmt.Errorf("kStoreKv.Delete(): key=%v, err=\n\t%w", key, err)
+		sf.log.Err(err.Error())
+		return NewErr[bool](err)
 	}
-	return nil
+	return NewOk(true)
 }
 
 // Открывает базу при создании
@@ -138,8 +138,8 @@ func (sf *kStoreKv) open() {
 	Hassert(err == nil, "kStoreKv.open(): in make dir %v, err=\n\t%v", sf.storePath, err)
 	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)
-	err = sf.wg.Add(storeStreamName)
-	Hassert(err == nil, "kStoreKv.open(): in add name stream to IKernelWg, err=\n\t%v", err)
+	res := sf.wg.Add(storeStreamName)
+	Hassert(res.IsOk(), "kStoreKv.open(): in add name stream to IKernelWg, err=\n\t%v", res.Error())
 	sf.isWork.Set()
 	go sf.close()
 	go sf.clean()

+ 21 - 21
krn/kstore_kv/kstore_kv_test.go

@@ -44,16 +44,16 @@ func TestKernelStore(t *testing.T) {
 // Установка ключа после закрытия хранилища
 func (sf *tester) workBad1() {
 	sf.t.Log("workBad1")
-	err := kernStore.Set("test_key", []byte("test_val"))
-	if err == nil {
+	res := kernStore.Set("test_key", []byte("test_val"))
+	if res.IsOk() {
 		sf.t.Fatalf("workBad1(): set, err==nil")
 	}
-	_, err = kernStore.Get("test_key")
-	if err == nil {
+	res1 := kernStore.Get("test_key")
+	if res1.IsOk() {
 		sf.t.Fatalf("workBad1(): get, err==nil")
 	}
-	err = kernStore.Delete("test_key")
-	if err == nil {
+	res = kernStore.Delete("test_key")
+	if res.IsOk() {
 		sf.t.Fatalf("workBad1(): del, err==nil")
 	}
 }
@@ -61,12 +61,12 @@ func (sf *tester) workBad1() {
 // Удаляет значение
 func (sf *tester) del() {
 	sf.t.Log("del")
-	err := kernStore.Delete("test_key")
-	if err != nil {
-		sf.t.Fatalf("del(): err=%v", err)
+	res := kernStore.Delete("test_key")
+	if res.IsErr() {
+		sf.t.Fatalf("del(): err=%v", res.Error())
 	}
-	_, err = kernStore.Get("test_key")
-	if err == nil {
+	res1 := kernStore.Get("test_key")
+	if res1.IsOk() {
 		sf.t.Fatalf("del(): err==nil")
 	}
 }
@@ -74,11 +74,11 @@ func (sf *tester) del() {
 // Получение значения по ключу
 func (sf *tester) get() {
 	sf.t.Log("get")
-	binVal, err := kernStore.Get("test_key")
-	if err != nil {
-		sf.t.Fatalf("get(): err=%v", err)
+	res := kernStore.Get("test_key")
+	if res.IsErr() {
+		sf.t.Fatalf("get(): err=%v", res.Error())
 	}
-	strVal := string(binVal)
+	strVal := string(res.Unwrap())
 	if strVal != "test_val" {
 		sf.t.Fatalf("get(): strVal(%v)!='test_val'", strVal)
 	}
@@ -87,18 +87,18 @@ func (sf *tester) get() {
 // Добавление ключа в хранилище
 func (sf *tester) set() {
 	sf.t.Log("set")
-	err := kernStore.Set("test_key", []byte("test_val"))
-	if err != nil {
-		sf.t.Fatalf("set(): err=%v", err)
+	res := kernStore.Set("test_key", []byte("test_val"))
+	if res.IsErr() {
+		sf.t.Fatalf("set(): err=%v", res.Error())
 	}
 }
 
 // Закрытие хранилища
 func (sf *tester) close() {
 	sf.t.Log("close")
-	err := sf.wg.Add("123")
-	if err != nil {
-		sf.t.Fatalf("close(): err=%v", err)
+	res := sf.wg.Add("123")
+	if res.IsErr() {
+		sf.t.Fatalf("close(): err=%v", res.Error())
 	}
 	sf.ctx.Cancel()
 	time.Sleep(time.Millisecond * 20)

+ 3 - 3
krn/ktypes/ikernel_store.go

@@ -3,11 +3,11 @@ package ktypes
 // IKernelStoreKv -- интерфейс к локальному быстрому key-value хранилищу ядра
 type IKernelStoreKv interface {
 	// Get -- возвращает значение по ключу
-	Get(key string) ([]byte, error)
+	Get(key string) Result[[]byte]
 	// Set -- устанавливает значение по ключу
-	Set(key string, val []byte) error
+	Set(key string, val []byte) Result[bool]
 	// Delete -- удаляет значение по ключу
-	Delete(key string) error
+	Delete(key string) Result[bool]
 	// Log -- возвращает локальный лог
 	Log() ILogBuf
 }

+ 1 - 1
krn/ktypes/ikernel_wg.go

@@ -7,7 +7,7 @@ import (
 // IKernelWg -- интерфейс к именованному ожидателю потоков
 type IKernelWg interface {
 	// Add -- добавляет имя потока в ожидатель потоков
-	Add(AStreamName) error
+	Add(AStreamName) Result[bool]
 	// Done -- удаляет имя потока из ожидания
 	Done(AStreamName)
 	// Wait -- ожидает завершения работы всех потоков