61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
// Code generated by go-omni api. DO NOT EDIT.
|
|
package svc
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"git.yuntuo.hk/k2safe/go-omni/health"
|
|
"git.yuntuo.hk/k2safe/go-omni/lifecycle"
|
|
"git.yuntuo.hk/k2safe/go-omni/logx"
|
|
|
|
"example.com/managed/internal/config"
|
|
"example.com/managed/internal/middleware"
|
|
)
|
|
|
|
// New is generator-owned. Customize dependencies in ServiceContext.Init.
|
|
func New(ctx context.Context, logger *logx.Logger, configs ...config.Config) (result *ServiceContext, err error) {
|
|
if ctx == nil {
|
|
ctx = context.Background()
|
|
}
|
|
if err = ctx.Err(); err != nil {
|
|
return nil, errors.Join(err, lifecycle.Cause(ctx))
|
|
}
|
|
if logger == nil {
|
|
return nil, errors.New("service context requires a logger")
|
|
}
|
|
if len(configs) > 1 {
|
|
return nil, errors.New("expected at most one configuration")
|
|
}
|
|
cfg := config.Default()
|
|
if len(configs) == 1 {
|
|
cfg = configs[0]
|
|
}
|
|
if err = cfg.Validate(); err != nil {
|
|
return nil, err
|
|
}
|
|
checker, err := health.New()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
runtime, err := lifecycle.NewRuntimeWithConfig(logx.WithLogger(ctx, logger), cfg.Server.Lifecycle)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
c := &ServiceContext{Config: cfg, Logger: logger, Health: checker, Middlewares: middleware.Defaults(), Runtime: runtime}
|
|
ctx = logx.WithLogger(c.Context(), logger)
|
|
defer func() {
|
|
if p := recover(); p != nil {
|
|
_ = c.Close()
|
|
panic(p)
|
|
}
|
|
if err != nil {
|
|
err = c.Finish(err)
|
|
}
|
|
}()
|
|
|
|
if err = c.Init(ctx); err != nil {
|
|
return nil, err
|
|
}
|
|
return c, nil
|
|
}
|