Ver Fonte

SVI Упрощение дженериков под интерфейсы (меньше гемора)

SVI há 2 semanas atrás
pai
commit
d7fde4365a

+ 4 - 0
v4/lev0/ktypes/itime.go

@@ -11,6 +11,10 @@ type ITime interface {
 	Get() alias.ATime
 	// String -- получить строковое представление времени.
 	String() string
+	// MarshalJSON -- сериализация в JSON себя
+	MarshalJSON() ([]byte, error)
+	// UnmarshalJSON -- десериализация из JSON себя
+	UnmarshalJSON([]byte) error
 }
 
 // ITimeMut -- интерфейс времени с мутацией.

+ 8 - 5
v4/lev0/lev0.go

@@ -9,10 +9,8 @@ import (
 	mRes "gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
-// SleepMs -- задержка в миллисекундах.
-func SleepMs() {
-	helpers.SleepMs()
-}
+// ETime -- расширенное время
+type ETime = mKt.ITime
 
 // EStr -- расширенная строка.
 type EStr = mKt.EStr
@@ -76,7 +74,7 @@ type IOption[T any] = mKt.IOption[T]
 
 // NewOpt -- возвращает новый не пустой результат операции.
 func NewOpt[T any](some T) IOption[T] {
-	return IOption[T](option.NewSome(some))
+	return option.NewSome(some)
 }
 
 // NewNone -- возвращает новый пустой результат операции.
@@ -93,3 +91,8 @@ func Hassert(isCond bool, msgFormat string, args ...any) {
 func Assert(isCond bool, msgFormat string, args ...any) {
 	helpers.Assert(isCond, msgFormat, args)
 }
+
+// SleepMs -- задержка в миллисекундах.
+func SleepMs() {
+	helpers.SleepMs()
+}

+ 22 - 2
v4/lev0/voc/etime/etime.go

@@ -1,6 +1,8 @@
 package etime
 
 import (
+	"encoding/json"
+	"fmt"
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/alias"
@@ -53,15 +55,33 @@ func (sf *ETime) String() string {
 	return string(sf.val)
 }
 
-// Get -- возвращает строку.
+// Get -- возвращает типизированную строку.
 func (sf *ETime) Get() alias.ATime {
 	helpers.Hassert(sf.val != "", "ETime.Get(): значение не инициализировано")
 	return sf.val
 }
 
-// Set -- устанавливает значение.
+// Set -- устанавливает типизированное значение.
 func (sf *ETime) Set(val alias.ATime) {
 	helpers.Hassert(sf.isMut, "ETime.Set(): значение фиксировано")
 	helpers.Hassert(val != "", "ETime.Set(): val is empty")
 	sf.val = val
 }
+
+// MarshalJSON -- сериализует себя в строку.
+func (sf *ETime) MarshalJSON() ([]byte, error) {
+	binMsg, err := json.Marshal(sf)
+	if err != nil {
+		err = fmt.Errorf("ETime.MarshalJSON(): in self marshall, err=\n\t%w", err)
+		return nil, err
+	}
+	return binMsg, err
+}
+
+// UnmarshalJSON -- десериализует из строки.
+func (sf *ETime) UnmarshalJSON(binMsg []byte) error {
+	if err := json.Unmarshal(binMsg, sf); err != nil {
+		return fmt.Errorf("ETime.UnmarshalJSON(): in self unmarshall, err=\n\t%w", err)
+	}
+	return nil
+}

+ 1 - 1
v4/lev1/local_ctx/local_ctx.go

@@ -96,7 +96,7 @@ func (sf *LocalCtx) Set(key string, val any, comment string) {
 	if isOk {
 		val0 := _val.(*ctx_value.CtxValue)
 		val0.Lock()
-		val0.UpdateAt_ = voc.NewETime(voc.VTimeOptVal(""), voc.VTimeOptMut())
+		val0.UpdateAt_ = voc.NewETimeAutoMut()
 		val0.Val_ = val
 		val0.Unlock()
 		return

+ 4 - 5
v4/lev1/log_msg/log_msg.go

@@ -4,9 +4,8 @@ package log_msg
 import (
 	"fmt"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	mH "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc"
@@ -27,9 +26,9 @@ type logMsg struct {
 }
 
 // NewLogMsg -- возвращает новое сообщение логгера.
-func NewLogMsg(level int, msg string) ILogMsg {
+func NewLogMsg(level int, msg string) ktypes.ILogMsg {
 	sf := &logMsg{
-		createdAt: voc.NewETime(voc.VTimeOptDefault()),
+		createdAt: voc.NewETimeAuto(),
 		msg:       quark.NewQStr(msg),
 	}
 	sf.check(level)
@@ -69,6 +68,6 @@ func (sf *logMsg) check(level int) {
 	case ERROR:
 		quark_val.Set(sf.level.QBase.Val(), "ERRO")
 	default:
-		Hassert(false, "logMsg.check(): unknown level(%v)", level)
+		mH.Hassert(false, "logMsg.check(): unknown level(%v)", level)
 	}
 }

+ 2 - 2
v4/lev2/kstore_kv_std/kv_bucket_base/kv_bucket_base.go

@@ -45,8 +45,8 @@ func NewKvBucketBase(name string, level int, number int) *KvBucketBase {
 		Level_:     level,
 		Number_:    number,
 		dictRec:    map[alias.AStoreKey]ktypes.IRecKv{},
-		CreatedAt_: voc.NewETime(voc.VTimeOptDefault()),
-		UpdatedAt_: voc.NewETime(voc.VTimeOptDefault(), voc.VTimeOptMut()),
+		CreatedAt_: voc.NewETimeAuto(),
+		UpdatedAt_: voc.NewETimeAutoMut(),
 	}
 	return sf
 }

+ 12 - 2
v4/lev2/kstore_kv_std/rec_meta/rec_meta.go

@@ -37,34 +37,44 @@ func NewRecMeta(key *alias.AStoreKey) *RecMeta {
 		Key_:       key,
 		Vers_:      1,
 		Operation_: "create",
-		createdAt_: voc.NewETime(voc.VTimeOptDefault()),
-		updateAt_:  voc.NewETime(voc.VTimeOptDefault(), voc.VTimeOptMut()),
+		createdAt_: voc.NewETimeAuto(),
+		updateAt_:  voc.NewETimeAutoMut(),
 	}
 	_ = ktypes.IRecMeta(sf)
 	return sf
 }
 
 // Key -- ключ записи.
+//
+//go:fix inline
 func (sf *RecMeta) Key() *alias.AStoreKey {
 	return sf.Key_
 }
 
 // Vers -- версия записи.
+//
+//go:fix inline
 func (sf *RecMeta) Vers() int64 {
 	return sf.Vers_
 }
 
 // Operation -- тип операции над записью.
+//
+//go:fix inline
 func (sf *RecMeta) Operation() string {
 	return sf.Operation_
 }
 
 // CreatedAt -- дата создания записи.
+//
+//go:fix inline
 func (sf *RecMeta) CreatedAt() ktypes.ITime {
 	return sf.createdAt_
 }
 
 // UpdateAt -- дата последнего обновления.
+//
+//go:fix inline
 func (sf *RecMeta) UpdateAt() ktypes.ITimeMut {
 	return sf.updateAt_
 }

+ 1 - 1
v4/lev3/mod_serv_http/http_api/http_api.go

@@ -30,6 +30,6 @@ func NewHttpApi() mL0.IResult[*HttpApi] {
 
 // Возвращает текущее время сервера.
 func (sf *HttpApi) postTime(ctx fiber.Ctx) error {
-	aTime := voc.NewETime(voc.VTimeOptDefault())
+	aTime := voc.NewETimeAuto()
 	return ctx.SendString(aTime.String())
 }