// package kern -- библиотека гибкого универсального облегчённого ядра для любого микросервиса. package kern import ( "context" "time" "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/lev1" // "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1" "gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/kstore_kv" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_spec" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_http" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_http/client_bus_http" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local/client_bus_local" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent/module_name" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_kctx" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_keeper" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_wui" ) // GetKernelCtx -- возвращает контекст ядра. // func GetKernelCtx() kspec.IKernelCtx { ctx := kctx.GetKernelCtx() return ctx } // Result — обёртка вокруг результата с возможной ошибкой. type Result[T any] = lev0.Result[T] // NewErr -- возвращает Result с ошибкой. func NewErr[T any](err error) *Result[T] { return lev0.ResErr[T](err) } // NewOk -- возвращает успешный Result с значением. func NewOk[T any](res T) *Result[T] { return lev0.ResOk(res) } // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой. func WrapErr[T any](res *Result[T], err error) *Result[T] { return lev0.WrapErr(res, err) } // GetKernelStoreKv -- возвращает быстрое key-value хранилище ядра. // func GetKernelStoreKv() store_spec.IKernelStoreKv { store := kstore_kv.GetKernelStore() return store } // GetKernelServerHttp -- возвращает веб-сервер ядра. // func GetKernelServerHttp() kspec.IKernelServerHttp { kernServHttp := kserv_http.GetKernelServHttp() return kernServHttp } type ISafeBool = core_spec.ISafeBool // NewSafeBool -- возвращает новый потокобезопасный булевый признак. // func NewSafeBool(val defs.Bool) ISafeBool { sb := mL1.NewSafeBool(val) return sb } // GetKernelBusLocal -- возвращает локальную шину данных. func GetKernelBusLocal() bus_spec.IKernelBus { kCtx := kctx.GetKernelCtx() kCtx.Set(lev0.LetTxt("monolitName"), "unknown monolit", "GetKernelBusLocal()") lBus := kbus_local.GetKernelBusLocal() return lBus } // GetKernelBusHttp -- возвращает HTTP шину данных. // func GetKernelBusHttp() bus_spec.IKernelBus { bus := kbus_http.GetKernelBusHttp() return bus } // SleepMs -- спит миллисекунду. // func SleepMs() { time.Sleep(time.Millisecond * 1) } // GetMonolitLocal -- возвращает монолит с локальной шиной. func GetMonolitLocal(name mod_ent.AModuleName) mod_spec.IKernelMonolit { kCtx := kctx.GetKernelCtx() kCtx.Set(lev0.LetTxt("isLocal"), true, "bus type") for { time.Sleep(time.Millisecond * 1) optIsLocal := kCtx.Get(lev0.LetTxt("isLocal")) if optIsLocal.IsSome() { break } } kMonolit := kmonolit.LetModMonolit(name) _ = kbus_local.GetKernelBusLocal() return kMonolit } // GetMonolitHttp -- возвращает монолит с локальной шиной поверх HTTP. func GetMonolitHttp(name mod_ent.AModuleName) mod_spec.IKernelMonolit { kCtx := kctx.GetKernelCtx() _ = kbus_http.GetKernelBusHttp() kCtx.Set(lev0.LetTxt("isLocal"), false, "bus type") for { time.Sleep(time.Millisecond * 1) optIsLocal := kCtx.Get(lev0.LetTxt("isLocal")) if optIsLocal.IsSome() { break } } kMon := kmonolit.LetModMonolit(name) return kMon } // NewKernelModule -- возвращает новый модуль на ядре. // func NewKernelModule(name *module_name.LModuleName) mod_spec.IKernelModule { resMod := kmodule.NewKernelModule(name) return resMod } // NewClientBusLocal -- возвращает клиент для работы с локальной шиной. // func NewClientBusLocal() bus_spec.IBusClient { lClient := client_bus_local.NewClientBusLocal() return lClient } // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP. // func NewClientBusHttp(url *defs.LTxt) bus_spec.IBusClient { client := client_bus_http.NewClientBusHttp(url) return client } // GetModuleServHttp -- возвращает модуль для IKernelServHttp. // func GetModuleServHttp() mod_spec.IKernelModule { modServHttp := mod_serv_http.GetModuleServHttp() return modServHttp } // GetModuleKernelCtx -- возвращает модуль для IKernelCtx. // func GetModuleKernelCtx() mod_spec.IKernelModule { kModCtx := mod_kctx.GetModuleKernelCtx() return kModCtx } // GetModuleKernelKeeper -- возвращает модуль для IKernelKeeper. // func GetModuleKernelKeeper() mod_spec.IKernelModule { modKernelKeeper := mod_keeper.GetModuleKeeper() return modKernelKeeper } // GetModuleWui -- возвращает модуль для WUI. // func GetModuleWui() mod_spec.IKernelModule { modWui := mod_wui.GetModuleWui() return modWui } // ILogBuf -- буферизованный лог. type ILogBuf = comp_spec.ILogBuf // LogBufParam -- параметры для создания нового буферизованного лога. type LogBufParam = mL1.LogBufParam // NewLogBuf -- возвращает новый буферизованный лог. // func NewLogBuf(param *LogBufParam) ILogBuf { log := mL1.NewLogBuf(param) return log } // NewSafeBoolReact -- возвращает новую потокобезопасную реактивную булеву переменную. // func NewSafeBoolReact() core_spec.ISafeBoolReact { val := mL1.NewSafeBoolReact() return val } // NewSafeInt -- возвращает новую потокобезопасную целочисленную переменную. // func NewSafeInt(val defs.Int) *lev1.MSafeInt { val_ := mL1.MutSafeInt(val) return val_ } // NewInt -- возвращает новую целочисленную переменную. // func LetInt(val lev0.Int) *lev0.LInt { val_ := lev0.LetInt(val) return val_ } // NewLocalCtx -- возвращает новый локальный контекст. // func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx { lCtx := mL1.NewLocalCtx(ctx) return lCtx } // TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt). type TxtConstraint=lev0.TxtConstraint // MSafeTxt -- потокобезопасный внутренний текст. type MSafeTxt=lev1.MSafeTxt // MutSafeTxt -- возвращает новую потокобезопасный текст. func MutSafeTxt[T TxtConstraint](txt T, arg ...any) *MSafeTxt { str := mL1.MutSafeTxt(txt, arg...) return str } // Option — обёртка вокруг результата с возможной пустотой. type Option[T any] = lev0.Option[T] // NewSome -- возвращает новый не пустой результат операции. func NewSome[T any](some T) *Option[T] { return lev0.NewSome(some) } // NewNone -- возвращает новый пустой результат операции. func NewNone[T any]() *Option[T] { return lev0.NewNone[T]() }