// package kern -- библиотека гибкого универсального облегчённого ядра для любого микросервиса. package kern import ( "context" "time" "gitp78su.ipnodns.ru/svi/kern/v4/lev0" "gitp78su.ipnodns.ru/svi/kern/v4/lev1" "gitp78su.ipnodns.ru/svi/kern/v4/lev2" "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" "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent" "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" ) // KernCtx — контекст ядра. type KernCtx = lev2.KernCtx // GetKernelCtx -- возвращает контекст ядра. func GetKernelCtx() *KernCtx { ctx := lev2.GetKernCtx() 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 } // Bool -- внутренее представление логического значения. type Bool = lev0.Bool // MSafeBool -- потокобезопасный булевый признак. type MSafeBool = lev0.MSafeBool // NewSafeBool -- возвращает новый потокобезопасный булевый признак. func MutSafeBool(val Bool) *MSafeBool { sf := lev0.MutSafeBool(val) return sf } // GetKernelBusLocal -- возвращает локальную шину данных. func GetKernelBusLocal() bus_spec.IKernelBus { kCtx := lev2.GetKernCtx() 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) } // AModuleName -- уникальное имя модуля. type AModuleName = mod_ent.AModuleName // GetMonolitLocal -- возвращает монолит с локальной шиной. func GetMonolitLocal(name AModuleName) mod_spec.IKernelMonolit { kCtx := lev2.GetKernCtx() 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 AModuleName) mod_spec.IKernelMonolit { kCtx := lev2.GetKernCtx() _ = 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 } type LModuleName = lev3.LModuleName // NewKernelModule -- возвращает новый модуль на ядре. func NewKernelModule(name *LModuleName) mod_spec.IKernelModule { resMod := kmodule.NewKernelModule(name) return resMod } // NewClientBusLocal -- возвращает клиент для работы с локальной шиной. // func NewClientBusLocal() bus_spec.IBusClient { lClient := client_bus_local.NewClientBusLocal() return lClient } type LTxt = lev0.LTxt // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP. func NewClientBusHttp(url *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 } // LogBuf -- буферизованный лог. type LogBuf = lev1.LogBuf // LogBufParam -- параметры для создания нового буферизованного лога. type LogBufParam = lev1.LogBufParam // NewLogBuf -- возвращает новый буферизованный лог. func NewLogBuf(param *LogBufParam) *LogBuf { log := lev1.NewLogBuf(param) return log } // MSafeBoolReact -- потокобезопасный булевый признак с реакцией на своё изменение. type MSafeBoolReact = lev0.MSafeBoolReact // MutSafeBoolReact -- возвращает новую потокобезопасную реактивную булеву переменную. func MutSafeBoolReact() *MSafeBoolReact { val := lev0.MutSafeBoolReact() return val } // Num -- внутренне представление числа. type Num = lev0.Num // MSafeNum -- потокобезопасное число. type MSafeNum = lev0.MSafeNum // MutSafeNum -- возвращает новую потокобезопасную целочисленную переменную. func MutSafeNum(val Num) *MSafeNum { val_ := lev0.MutSafeNum(val) return val_ } // LNum -- внутреннее неизменяемое число. type LNum = lev0.LNum // LetNum -- возвращает новую целочисленную переменную. func LetNum(val lev0.Num) *LNum { val_ := lev0.LetNum(val) return val_ } // LocalCtx -- локальный контекст. type LocalCtx = lev1.LocalCtx // NewLocalCtx -- возвращает новый локальный контекст. func NewLocalCtx(ctx context.Context) *LocalCtx { lCtx := lev1.NewLocalCtx(ctx) return lCtx } // TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt). type TxtConstraint = lev0.TxtConstraint // MSafeTxt -- потокобезопасный внутренний текст. type MSafeTxt = lev0.MSafeTxt // MutSafeTxt -- возвращает новую потокобезопасный текст. func MutSafeTxt[T TxtConstraint](txt T, arg ...any) *MSafeTxt { str := lev0.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]() }