Versions in this module Expand all Collapse all v0 v0.2.0 Jun 24, 2026 v0.1.1 Jun 17, 2026 v0.1.0 May 27, 2026 Changes in this version + const AppTest + const ClaimCallerName + const DebugLevel + const ErrCodeAdapterConfigInvalid + const ErrCodeCfgMerge + const ErrCodeCfgRead + const ErrCodeCfgUnmarshal + const ErrCodeConfigNotLoaded + const ErrCodeCryptoDecrypt + const ErrCodeCryptoEncrypt + const ErrCodeJsonDecode + const ErrCodeJsonEncode + const ErrCodeJwtMalformed + const ErrCodeJwtParse + const ErrCodeJwtTokenGen + const ErrCodeJwtWrongSigningMethod + const ErrCodeNoPathSpecified + const ErrCodeNotSupportedTz + const ErrCodePanic + const ErrCodeSplitLengthExceeded + const ErrCodeSysUtilsRetryFnEmpty + const ErrCodeSysUtilsRetryMaxAttempts + const ErrCodeValidatorNotEmpty + const ErrCodeWatchdogWorkerStuck + const ErrTypeBusiness + const ErrTypePanic + const ErrTypeSystem + const ErrorLevel + const FatalLevel + const FormatterJson + const FormatterText + const InfoLevel + const PanicLevel + const TraceLevel + const TzM1 + const TzM10 + const TzM11 + const TzM2 + const TzM3 + const TzM4 + const TzM5 + const TzM6 + const TzM7 + const TzM8 + const TzM9 + const TzP1 + const TzP10 + const TzP11 + const TzP12 + const TzP13 + const TzP2 + const TzP3 + const TzP4 + const TzP5 + const TzP6 + const TzP6p5 + const TzP7 + const TzP8 + const TzP9 + const TzUTC + const WarnLevel + var ErrAdapterConfigInvalid = func(ctx context.Context) error + var ErrCfgMerge = func(cause error, path string) error + var ErrCfgRead = func(cause error, path string) error + var ErrCfgUnmarshal = func(cause error) error + var ErrConfigNotLoaded = func() error + var ErrCryptoDecrypt = func(ctx context.Context, cause error) error + var ErrCryptoEncrypt = func(ctx context.Context, cause error) error + var ErrJsonDecode = func(cause error) error + var ErrJsonEncode = func(cause error) error + var ErrJwtMalformed = func() error + var ErrJwtParse = func(cause error) error + var ErrJwtTokenGen = func(ctx context.Context, cause error) error + var ErrJwtWrongSigningMethod = func(ctx context.Context) error + var ErrNoPathSpecified = func() error + var ErrNotSupportedTz = func(err error, tz string) error + var ErrPanic = func(ctx context.Context, cause interface{}) error + var ErrSplitLengthExceeded = func() error + var ErrSysUtilsRetryFnEmpty = func(ctx context.Context) error + var ErrSysUtilsRetryMaxAttempts = func(ctx context.Context) error + var ErrValidatorNotEmpty = func(ctx context.Context, method, attr string) error + var ErrWatchdogWorkerStuck = func(workerName string) error + var LanguageISO639_1 = map[string]struct + func Await(fn func() (bool, error), tick, timeout time.Duration) chan error + func BoolPtr(b bool) *bool + func BytesToMapInterfaces(bytes []byte) map[string]interface + func ContainsIntersection(slice1, slice2 []string) bool + func ContextToGrpcMD(ctx context.Context) (metadata.MD, bool) + func ConvertFromAny[T any](data any) (*T, error) + func ConvertFromMap[T any](data map[string]interface{}) (*T, error) + func ConvertMapValues[T any](m map[string]interface{}, converter func(value any) T) map[string]T + func ConvertSlice[TSrc any, TRes any](src []*TSrc, converter func(*TSrc) *TRes) []*TRes + func ConvertToMap(data any) (map[string]interface{}, error) + func Copy(ctx context.Context) context.Context + func Date(date time.Time) time.Time + func DecryptString(ctx context.Context, key, val string) (string, error) + func Diff(a, b time.Time) (year, month, day, hour, min, sec int) + func Digits(s string) bool + func EncryptString(ctx context.Context, key, val string) (string, error) + func Equal(m1, m2 any) bool + func ExtractUrlExtension(s string) (string, error) + func Filter[TItem any](slice []TItem, filterFn func(TItem) bool) []TItem + func First[TItem any](slice []*TItem, selectFn func(*TItem) bool) *TItem + func Float32Ptr(i float32) *float32 + func Float64Ptr(i float64) *float64 + func ForAll[TItem any](slice []TItem, fn func(TItem)) []TItem + func FromGrpcMD(ctx context.Context, md metadata.MD) context.Context + func FromMap(ctx context.Context, mp map[string]interface{}) (context.Context, error) + func FromSet[TKey comparable](m map[TKey]struct{}) []TKey + func GenJwtToken(ctx context.Context, rq *JwtRequest) (string, error) + func GenerateInternalAccessToken(ctx context.Context, secret []byte, ttl int, callerName string) (string, error) + func GenerateTimeSeries(from, to time.Time, period time.Duration) []time.Time + func GetDefault[T any]() T + func GetTzLocation(tz string) *time.Location + func GroupBy[TItem any, TKey comparable](slice []TItem, keyFn func(TItem) TKey) map[TKey][]TItem + func HashObj(obj any) uint64 + func Int32ToIntPtr(i *int32) *int + func Int64ToIntPtr(i *int64) *int + func IntPtr(i int) *int + func IntToInt32Ptr(i *int) *int32 + func IntToInt64Ptr(i *int) *int64 + func IsAppErrCode(e error, code string) bool + func IsCoordinateValid(c string) bool + func IsEmailValid(email string) bool + func IsEmpty(object interface{}) bool + func IsIpV4Valid(ip string) bool + func IsIpV6Valid(ip string) bool + func IsPhoneValid(phone string) bool + func IsPhoneWithCountryCodeValid(code, phone string) bool + func IsRussianPhoneValid(phone string) bool + func IsTelegramChannelValid(channel string) bool + func IsTelegramUsernameValid(username string) bool + func IsTimeZoneIANA(tz string) bool + func IsUrlValid(url string) bool + func IsValidISO639_1(lang string) bool + func JsonDecodePlainSlice[T any](payload []byte) ([]T, error) + func JsonDecodeSlice[T any](payload []byte) ([]*T, error) + func JsonDecode[T any](payload []byte) (*T, error) + func JsonEncode(v any) ([]byte, error) + func LeftExclusive[T comparable](left, right []T) []T + func MapInterfacesToBytes(m map[string]interface{}) []byte + func MapKeys[TKey comparable, TItem any](m map[TKey]TItem) []TKey + func MapToLowerCamelKeys(m map[string]interface{}) map[string]interface + func MapValues[TKey comparable, TItem any](m map[TKey]TItem) []TItem + func Map[TItem any, TRes any](slice []TItem, mapFn func(TItem) TRes) []TRes + func MapsEqual(m1, m2 map[string]interface{}) bool + func MaxTime(times ...time.Time) *time.Time + func Millis(t time.Time) int64 + func MillisFromTime(t time.Time) int64 + func MinTime(times ...time.Time) *time.Time + func ModifiedNillable[T any](modified bool, cur *T, update *Nillable[T]) (*T, bool) + func ModifiedPlainNillable[T PlainType](modified bool, cur T, update *T) (T, bool) + func ModifiedPlain[T PlainType](modified bool, cur T, update T) (T, bool) + func ModifiedSliceNillable[T constraints.Ordered](modified bool, cur []T, update []T) ([]T, bool) + func ModifiedSliceStructured[T comparable](modified bool, sort func([]T), cur []T, update []T) ([]T, bool) + func Modified[T comparable](modified bool, cur T, update T) (T, bool) + func NanoId() string + func NewAppError(code string, format string, args ...interface{}) error + func NewId() string + func NewRandString() string + func Nil() string + func NilOrInMap[T comparable](value *T, m map[T]struct{}) bool + func Now() time.Time + func NowDate() time.Time + func NowMillis() int64 + func NowNanos() int64 + func NowPtr() *time.Time + func NullToString(s *string) string + func NumCode(size int) string + func Overlapped(startA, endA, startB, endB time.Time) bool + func PaginateSlice[T any](items []T, paging PagingRequest) []T + func ParseDateAny(s string) *time.Time + func ParseFloat32(s string) *float32 + func ParseFloat64(s string) *float64 + func ParseInternalAccessToken(ctx context.Context, secret []byte, token string) (string, error) + func Reduce[TItem any, TRes any, TKey comparable](slice []TItem, grpFn func(TItem) TKey, accFn func(TItem, TRes) TRes) map[TKey]TRes + func RemoveNonAlfaDigital(str string) string + func Retry[TIn, TOut any](ctx context.Context, fn func(ctx context.Context, in TIn) (TOut, error), ...) (TOut, error) + func Round100(value float64) float64 + func Round10000(value float64) float64 + func SliceToMap[TItem any, TKey comparable](slice []TItem, grpFn func(TItem) TKey) map[TKey]TItem + func SplitArrByItemLen[T ~string](data []T, max int) ([][]T, error) + func SplitArr[T any](data []T, size int) [][]T + func StrToInt64(s string) (int64, error) + func StringPtr(s string) *string + func StringToNull(s string) *string + func StringsToInterfaces(sl []string) []interface + func TimeFromMillis(millis int64) time.Time + func TimePtr(t time.Time) *time.Time + func ToSet[TItem any, TKey comparable](slice []TItem, keyFn func(TItem) TKey) map[TKey]struct + func ToSlicePtr[T any](src []T) []*T + func ToStringDate(date *time.Time) string + func ToTz(t time.Time, tz string) (time.Time, error) + func TzValid(tz string) bool + func UInt32Ptr(i uint32) *uint32 + func UInt64ToInt32Ptr(i *uint64) *int32 + func UUID(size int) string + func ValidateUUIDs(uuids ...string) error + func VerifyJwtToken(ctx context.Context, token string, secret []byte) (*jwt.Token, jwt.MapClaims, error) + type Adapter interface + Close func(ctx context.Context) error + Init func(ctx context.Context, cfg *T) error + type AdapterListener interface + ListenAsync func(ctx context.Context) error + type AppErrBuilder interface + Business func() AppErrBuilder + C func(ctx context.Context) AppErrBuilder + Err func() error + F func(fields KV) AppErrBuilder + GrpcSt func(status uint32) AppErrBuilder + HttpSt func(status uint32) AppErrBuilder + Panic func() AppErrBuilder + System func() AppErrBuilder + Type func(t string) AppErrBuilder + Wrap func(cause error) AppErrBuilder + func NewAppErrBuilder(code string, format string, args ...interface{}) AppErrBuilder + type AppError struct + func IsAppErr(e error) (*AppError, bool) + func (e *AppError) Cause() error + func (e *AppError) Code() string + func (e *AppError) Error() string + func (e *AppError) Fields() KV + func (e *AppError) GrpcStatus() *uint32 + func (e *AppError) HttpStatus() *uint32 + func (e *AppError) Message() string + func (e *AppError) Type() string + func (e *AppError) WithStack() string + func (e *AppError) WithStackErr() error + type CLogger interface + C func(ctx context.Context) CLogger + Clone func() CLogger + Cmp func(c string) CLogger + Dbg func(args ...interface{}) CLogger + DbgF func(format string, args ...interface{}) CLogger + E func(err error) CLogger + Err func(args ...interface{}) CLogger + ErrF func(format string, args ...interface{}) CLogger + F func(fields KV) CLogger + Fatal func(args ...interface{}) CLogger + FatalF func(format string, args ...interface{}) CLogger + Inf func(args ...interface{}) CLogger + InfF func(format string, args ...interface{}) CLogger + Mth func(m string) CLogger + Node func(n string) CLogger + Pr func(m string) CLogger + Printf func(string, ...interface{}) + PrintfErr func(f string, args ...interface{}) + Srv func(s string) CLogger + St func() CLogger + Trc func(args ...interface{}) CLogger + TrcF func(format string, args ...interface{}) CLogger + TrcObj func(format string, args ...interface{}) CLogger + Warn func(args ...interface{}) CLogger + WarnF func(format string, args ...interface{}) CLogger + Write func(p []byte) (n int, err error) + func L(logger *Logger) CLogger + type CLoggerFunc func() CLogger + type Check = healthcheck.Check + type ConfigLoader struct + func NewConfigLoader[T any]() *ConfigLoader[T] + func (c *ConfigLoader[T]) Load() (*T, error) + func (c *ConfigLoader[T]) WithEnv(env string) *ConfigLoader[T] + func (c *ConfigLoader[T]) WithPath(path string) *ConfigLoader[T] + func (c *ConfigLoader[T]) WithPrefix(prefix string) *ConfigLoader[T] + type DayOfWeek string + const Friday + const Monday + const Saturday + const Sunday + const Thursday + const Tuesday + const Wednesday + func (d *DayOfWeek) IsValid(s string) bool + type DaysOfWeek map[DayOfWeek]struct + func (d DaysOfWeek) IsValid() bool + type Error struct + Code string + Details map[string]interface{} + GrpcStatus *uint32 + HttpStatus *uint32 + Message string + Stack string + Type string + func ToError(err error) *Error + func ToErrorFromString(e *string) (*Error, error) + func ToErrorFromStringEmptyIfInvalid(e *string) *Error + func (e *Error) ToError() error + type ErrorHook interface + Error func(err error) + type Flags struct + func NewFlags[T TFlags](flags ...T) Flags[T] + func (f *Flags[T]) UnmarshalJSON(data []byte) error + func (f Flags[T]) HasAll(flags ...T) bool + func (f Flags[T]) HasAny(flags ...T) bool + func (f Flags[T]) MarshalJSON() ([]byte, error) + func (f Flags[T]) Ptr() *Flags[T] + func (f Flags[T]) Set(flags ...T) Flags[T] + func (f Flags[T]) String() string + func (f Flags[T]) Toggle(flags ...T) Flags[T] + func (f Flags[T]) Uint() T + func (f Flags[T]) Unset(flags ...T) Flags[T] + type Healthcheck struct + func NewHealthCheck(cfg *HealthcheckConfig) *Healthcheck + func (h *Healthcheck) AddLivenessCheck(name string, check Check) + func (h *Healthcheck) AddReadinessCheck(name string, check Check) + func (h *Healthcheck) Start() + func (h *Healthcheck) Stop() + type HealthcheckConfig struct + Port string + type HourMinTime struct + func (t *HourMinTime) MarshalJSON() ([]byte, error) + func (t *HourMinTime) UnmarshalJSON(b []byte) error + func (t HourMinTime) Before(other HourMinTime) bool + func (t HourMinTime) FromTime(tm time.Time) HourMinTime + func (t HourMinTime) Hour() int + func (t HourMinTime) Minute() int + func (t HourMinTime) MustParse(s string) HourMinTime + func (t HourMinTime) Parse(s string) (HourMinTime, error) + func (t HourMinTime) String() string + func (t HourMinTime) Unix() int64 + type JwtRequest struct + Claims map[string]any + ExpireAt time.Time + Secret []byte + UserId string + type KV map[string]interface + type LogConfig struct + Context bool + Format string + Level string + Service bool + type Logger struct + Cfg *LogConfig + func InitLogger(cfg *LogConfig) *Logger + func (l *Logger) Init(cfg *LogConfig) + func (l *Logger) SetErrorHook(h ErrorHook) + func (l *Logger) SetLevel(level string) + type Nillable struct + V *T + func NewNillable[T any](v *T) *Nillable[T] + type PageReader interface + GetPage func(ctx context.Context, rq TRq) chan PagingResponseG[TItem] + func NewPageReader[TItem any, TRq any](fn func(context.Context, PagingRequestG[TRq]) (PagingResponseG[TItem], error), ...) PageReader[TItem, TRq] + type PagingRequest struct + Index int + Size int + SortBy []*SortRequest + type PagingRequestG struct + Request T + type PagingResponse struct + Limit int + Total int + type PagingResponseG struct + Items []*T + type PlainType interface + type RequestContext struct + App string + ClIp string + Kv KV + Lang language.Tag + Rid string + Roles []string + Sid string + Uid string + Un string + func MustRequest(context context.Context) (*RequestContext, error) + func NewRequestCtx() *RequestContext + func Request(context context.Context) (*RequestContext, bool) + func (r *RequestContext) EN() *RequestContext + func (r *RequestContext) Empty() *RequestContext + func (r *RequestContext) GetApp() string + func (r *RequestContext) GetClientIp() string + func (r *RequestContext) GetKv() KV + func (r *RequestContext) GetLang() language.Tag + func (r *RequestContext) GetRequestId() string + func (r *RequestContext) GetRoles() []string + func (r *RequestContext) GetSessionId() string + func (r *RequestContext) GetUserId() string + func (r *RequestContext) GetUsername() string + func (r *RequestContext) TestApp() *RequestContext + func (r *RequestContext) ToContext(parent context.Context) context.Context + func (r *RequestContext) ToMap() map[string]interface{} + func (r *RequestContext) WithApp(app string) *RequestContext + func (r *RequestContext) WithClientIp(ip string) *RequestContext + func (r *RequestContext) WithKv(key string, val interface{}) *RequestContext + func (r *RequestContext) WithLang(lang language.Tag) *RequestContext + func (r *RequestContext) WithNewRequestId() *RequestContext + func (r *RequestContext) WithRequestId(requestId string) *RequestContext + func (r *RequestContext) WithRoles(roles ...string) *RequestContext + func (r *RequestContext) WithSessionId(sessionId string) *RequestContext + func (r *RequestContext) WithUser(userId, username string) *RequestContext + type RetryCfg struct + MaxAttempts int + NextAttemptFn func(curAttemptTime time.Time, curAttempt int) time.Time + type SafeMap struct + func NewSafeMap[TK comparable, TV any]() *SafeMap[TK, TV] + func (m *SafeMap[TK, TV]) Delete(key TK) + func (m *SafeMap[TK, TV]) Get(key TK) TV + func (m *SafeMap[TK, TV]) Map() map[TK]TV + func (m *SafeMap[TK, TV]) Set(key TK, val TV) + func (m *SafeMap[TK, TV]) TryGet(key TK) (TV, bool) + type Searchable interface + Search func(ctx context.Context, rq PagingRequestG[Rq]) (PagingResponseG[TItem], error) + type SortRequest struct + Desc bool + Field string + NullsLast bool + type String string + func (s String) RemoveNewlines() String + func (s String) TrimCodeEnd() String + func (s String) TrimCodeStart(code string) String + type Strings []string + func (s Strings) Contains(str string) bool + func (s Strings) Distinct() Strings + func (s Strings) Equal(r Strings) bool + func (s Strings) Intersect(r Strings) Strings + func (s Strings) Subtract(r Strings) Strings + func (s Strings) ToMap() map[string]struct{} + func (s Strings) ToSliceAny() []any + type Suite struct + Ctx context.Context + func (s *Suite) AfterTest(suiteName, testName string) + func (s *Suite) AssertAppErr(err error, code string) + func (s *Suite) AssertCalled(mock *mock.Mock, methodName string, arguments ...interface{}) + func (s *Suite) AssertNotCalled(mock *mock.Mock, methodName string, arguments ...interface{}) + func (s *Suite) AssertNumberOfCalls(mock *mock.Mock, methodName string, expectedCalls int) + func (s *Suite) BeforeTest(suiteName, testName string) + func (s *Suite) Condition(comp assert.Comparison, msgAndArgs ...interface{}) + func (s *Suite) Contains(el, contains interface{}, msgAndArgs ...interface{}) + func (s *Suite) DefaultLogger() + func (s *Suite) DirExists(dir string, msgAndArgs ...interface{}) + func (s *Suite) ElementsMatch(listA, listB interface{}, msgAndArgs ...interface{}) + func (s *Suite) Empty(object interface{}, msgAndArgs ...interface{}) + func (s *Suite) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) + func (s *Suite) EqualError(theError error, errString string, msgAndArgs ...interface{}) + func (s *Suite) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) + func (s *Suite) Error(err error, msgAndArgs ...interface{}) + func (s *Suite) ErrorAs(err, target error, msgAndArgs ...interface{}) + func (s *Suite) ErrorIs(err, target error, msgAndArgs ...interface{}) + func (s *Suite) Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, ...) + func (s *Suite) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) + func (s *Suite) False(value bool, msgAndArgs ...interface{}) + func (s *Suite) Fatal(msgAndArgs ...interface{}) + func (s *Suite) FileExists(path string, msgAndArgs ...interface{}) + func (s *Suite) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) + func (s *Suite) InDelta(expected, actual interface{}, delta float64, msgAndArgs ...interface{}) + func (s *Suite) InDeltaMapValues(expected, actual interface{}, delta float64, msgAndArgs ...interface{}) + func (s *Suite) InDeltaSlice(expected, actual interface{}, delta float64, msgAndArgs ...interface{}) + func (s *Suite) InEpsilon(expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) + func (s *Suite) InEpsilonSlice(expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) + func (s *Suite) Init(logger CLoggerFunc) + func (s *Suite) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) + func (s *Suite) JSONEq(expected string, actual string, msgAndArgs ...interface{}) + func (s *Suite) L() CLogger + func (s *Suite) Len(object interface{}, length int, msgAndArgs ...interface{}) + func (s *Suite) Never(condition func() bool, waitFor time.Duration, tick time.Duration, ...) + func (s *Suite) Nil(object interface{}, msgAndArgs ...interface{}) + func (s *Suite) NoDirExists(dir string, msgAndArgs ...interface{}) + func (s *Suite) NoError(err error, msgAndArgs ...interface{}) + func (s *Suite) NoFileExists(path string, msgAndArgs ...interface{}) + func (s *Suite) NotContains(el, contains interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotEmpty(object interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotErrorIs(err, target error, msgAndArgs ...interface{}) + func (s *Suite) NotNil(object interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotPanics(f assert.PanicTestFunc, msgAndArgs ...interface{}) + func (s *Suite) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotSame(expected, actual interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotSubset(list, subset interface{}, msgAndArgs ...interface{}) + func (s *Suite) NotZero(v interface{}, msgAndArgs ...interface{}) + func (s *Suite) Panics(f assert.PanicTestFunc, msgAndArgs ...interface{}) + func (s *Suite) PanicsWithError(errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) + func (s *Suite) PanicsWithValue(expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) + func (s *Suite) RandPhone() string + func (s *Suite) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) + func (s *Suite) Same(expected, actual interface{}, msgAndArgs ...interface{}) + func (s *Suite) Subset(list, subset interface{}, msgAndArgs ...interface{}) + func (s *Suite) True(value bool, msgAndArgs ...interface{}) + func (s *Suite) WithinDuration(expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) + func (s *Suite) YAMLEq(expected string, actual string, msgAndArgs ...interface{}) + func (s *Suite) Zero(v interface{}, msgAndArgs ...interface{}) + type TFlags interface + type TimePeriod struct + From *time.Time + To *time.Time + func (t TimePeriod) Valid() bool + type TimeRange [2]HourMinTime + func (t *TimeRange) EndTime() string + func (t *TimeRange) StartTime() string + func (t TimeRange) MustParse(from, to string) TimeRange + func (t TimeRange) Parse(from, to string) (*TimeRange, error) + func (t TimeRange) ParseOrEmpty(from, to string) *TimeRange + func (t TimeRange) Valid() bool + func (t TimeRange) ValidRange() bool + func (t TimeRange) Within(tm HourMinTime) bool + func (t TimeRange) WithinExcl(tm HourMinTime) bool + type Validator struct + func NewValidator(ctx context.Context) *Validator + func (v *Validator) E() error + func (v *Validator) Mth(m string) *Validator + func (v *Validator) NotEmptyString(attr string, val string) *Validator + type WaitGroup struct + func NewWG() *WaitGroup + func (w *WaitGroup) Add(delta int) + func (w *WaitGroup) Done() + func (w *WaitGroup) Wait(to time.Duration) bool + type Watchdog struct + func NewWatchdog(timeout time.Duration) *Watchdog + func (w *Watchdog) Check() error + func (w *Watchdog) Disable() + func (w *Watchdog) Enable() + func (w *Watchdog) Ping(name string) + func (w *Watchdog) Register(name string) + func (w *Watchdog) Unregister(name string) + func (w *Watchdog) Workers() map[string]time.Time