Files
atomctl/pkg/ast/provider/provider.go.tpl
2025-01-09 11:05:03 +08:00

53 lines
1.2 KiB
Smarty

package {{.PkgName}}
import (
{{- range $pkg, $alias := .Imports }}
{{- if eq $alias "" }}
"{{$pkg}}"
{{- else }}
{{$alias}} "{{$pkg}}"
{{- end }}
{{- end }}
)
func Provide(opts ...opt.Option) error {
{{- range .Providers }}
if err := container.Container.Provide(func(
{{- range $key, $param := .InjectParams }}
{{$key}} {{$param.Star}}{{if eq $param.Package ""}}{{$param.Type}}{{else}}{{$param.PackageAlias}}.{{$param.Type}}{{end}},
{{- end }}
) ({{.ReturnType}}, error) {
obj := &{{.StructName}}{
{{- range $key, $param := .InjectParams }}
{{- if and (ne $key "__job") (ne $key "__event") (ne $key "__grpc")}}
{{$key}}: {{$key}},
{{- end}}
{{- end }}
}
{{- if .NeedPrepareFunc }}
if err := obj.Prepare(); err != nil {
return nil, err
}
{{- end }}
{{- if eq .Mode "grpc"}}
{{ .GrpcRegisterFunc }}(__grpc.Server, obj)
{{- end }}
{{- if eq .Mode "event"}}
__event.Handle("handler:{{.StructName}}", obj.Topic(), obj.PublishToTopic(), obj.Handler)
{{- end }}
{{- if eq .Mode "job"}}
if err := river.AddWorkerSafely(__job.Workers, obj); err != nil {
return nil, err
}
{{- end }}
return obj, nil
}{{if .ProviderGroup}}, {{.ProviderGroup}}{{end}}); err != nil {
return err
}
{{- end }}
return nil
}