// 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 }