// package kern -- библиотека гибкого универсального облегчённого ядра для любого микросервиса. package kern import ( "context" "time" "gitp78su.ipnodns.ru/svi/kern/v4/d0" "gitp78su.ipnodns.ru/svi/kern/v4/d1" "gitp78su.ipnodns.ru/svi/kern/v4/d2" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kmodule" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kmonolit" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kserv_http" "gitp78su.ipnodns.ru/svi/kern/v4/d2/kspec" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lsi/kstore_kv" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lsi/store_spec" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/bus_spec" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/kbus_http" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/kbus_http/client_bus_http" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/kbus_local" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/kbus_local/client_bus_local" "gitp78su.ipnodns.ru/svi/kern/v4/d3" "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_ent" "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_kctx" "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_keeper" "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_serv_http" "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_spec" "gitp78su.ipnodns.ru/svi/kern/v4/d3/mod_wui" ) // KernCtx — контекст ядра. type KernCtx = d2.KernCtx // GetKernelCtx -- возвращает контекст ядра. func GetKernelCtx() *KernCtx { ctx := d2.GetKernCtx() return ctx } // Result — обёртка вокруг результата с возможной ошибкой. type Result[T any] = d0.Result[T] // NewErr -- возвращает Result с ошибкой. func NewErr[T any](err error) *Result[T] { return d0.ResErr[T](err) } // NewOk -- возвращает успешный Result с значением. func NewOk[T any](res T) *Result[T] { return d0.ResOk(res) } // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой. func WrapErr[T any](res *Result[T], err error) *Result[T] { return d0.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 = d0.Bool // MSafeBool -- потокобезопасный булевый признак. type MSafeBool = d0.MSafeBool // NewSafeBool -- возвращает новый потокобезопасный булевый признак. func MutSafeBool[T BoolConstraint](owner *LOwner, val T) *MSafeBool { sf := d0.MutSafeBool(owner, val) return sf } // GetKernelBusLocal -- возвращает локальную шину данных. func GetKernelBusLocal() bus_spec.IKernelBus { kCtx := d2.GetKernCtx() kCtx.Set(d0.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 := d2.GetKernCtx() kCtx.Set(d0.LetTxt("isLocal"), true, "bus type") for { time.Sleep(time.Millisecond * 1) optIsLocal := kCtx.Get(d0.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 := d2.GetKernCtx() _ = kbus_http.GetKernelBusHttp() kCtx.Set(d0.LetTxt("isLocal"), false, "bus type") for { time.Sleep(time.Millisecond * 1) optIsLocal := kCtx.Get(d0.LetTxt("isLocal")) if optIsLocal.IsSome() { break } } kMon := kmonolit.LetModMonolit(name) return kMon } // LOwner -- неизменяемый владелец. type LOwner = d0.LOwner // LModuleName -- неизменяемое имя модуля. type LModuleName = d3.LModuleName // NewKernelModule -- возвращает новый модуль на ядре. func NewKernelModule(owner *LOwner, name *LModuleName) mod_spec.IKernelModule { resMod := kmodule.NewKernelModule(owner, name) return resMod } // NewClientBusLocal -- возвращает клиент для работы с локальной шиной. func NewClientBusLocal() bus_spec.IBusClient { lClient := client_bus_local.NewClientBusLocal() return lClient } type LTxt = d0.LTxt // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP. func NewClientBusHttp(owner *LOwner, url *LTxt) bus_spec.IBusClient { sf := client_bus_http.NewClientBusHttp(owner, url) return sf } // GetModuleServHttp -- возвращает модуль для IKernelServHttp. func GetModuleServHttp() mod_spec.IKernelModule { sf := mod_serv_http.GetModuleServHttp() return sf } // 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 = d1.LogBuf // LogBufParam -- параметры для создания нового буферизованного лога. type LogBufParam = d1.LogBufParam // NewLogBuf -- возвращает новый буферизованный лог. func NewLogBuf(param *LogBufParam) *LogBuf { log := d1.NewLogBuf(param) return log } // MSafeBoolReact -- потокобезопасный булевый признак с реакцией на своё изменение. type MSafeBoolReact = d0.MSafeBoolReact // BoolConstraint -- ограничение внутреннего логического значения. type BoolConstraint = d0.BoolConstraint // MutSafeBoolReact -- возвращает новую потокобезопасную реактивную булеву переменную. func MutSafeBoolReact[T BoolConstraint](owner *LOwner, val T) *MSafeBoolReact { sf := d0.MutSafeBoolReact(owner, val) return sf } // Num -- внутренне представление числа. type Num = d0.Num // MSafeNum -- потокобезопасное число. type MSafeNum = d0.MSafeNum type NumConstraint = d0.NumConstraint // MutSafeNum -- возвращает новую потокобезопасную целочисленную переменную. func MutSafeNum[T NumConstraint](owner *LOwner, val T) *MSafeNum { val_ := d0.MutSafeNum(owner, val) return val_ } // LNum -- внутреннее неизменяемое число. type LNum = d0.LNum // OwnerPass -- паспорт владельца объекта. type OwnerPass = d0.OwnerPass // LetNum -- возвращает новое число. func LetNum[T NumConstraint](owner *LOwner, val T) *LNum { val_ := d0.LetNum(owner, val) return val_ } // LocalCtx -- локальный контекст. type LocalCtx = d1.LocalCtx // NewLocalCtx -- возвращает новый локальный контекст. func NewLocalCtx(owner *LOwner, ctx context.Context) *LocalCtx { lCtx := d1.NewLocalCtx(owner, ctx) return lCtx } // TxtConstraint -- разрешает строки и любые типы на его основе (например, ATxt). type TxtConstraint = d0.TxtConstraint // MSafeTxt -- потокобезопасный внутренний текст. type MSafeTxt = d0.MSafeTxt // MutSafeTxt -- возвращает новую потокобезопасный текст. func MutSafeTxt[T TxtConstraint](txt T, arg ...any) *MSafeTxt { str := d0.MutSafeTxt(txt, arg...) return str } // Option — обёртка вокруг результата с возможной пустотой. type Option[T any] = d0.Option[T] // NewSome -- возвращает новый не пустой результат операции. func NewSome[T any](some T) *Option[T] { return d0.NewSome(some) } // NewNone -- возвращает новый пустой результат операции. func NewNone[T any]() *Option[T] { return d0.NewNone[T]() }