func {{$exportName}}()

in codegen/template_bundle/template_files.go [1269:1330]


func {{$exportName}}(deps *module.Dependencies) Client {
	oc := deps.Default.GRPCClientDispatcher.MustOutboundConfig("{{$clientID}}")
	var routingKey string
	if deps.Default.Config.ContainsKey("clients.{{$clientID}}.routingKey") {
		routingKey = deps.Default.Config.MustGetString("clients.{{$clientID}}.routingKey")
	}
	var requestUUIDHeaderKey string
	if deps.Default.Config.ContainsKey("clients.{{$clientID}}.requestUUIDHeaderKey") {
		requestUUIDHeaderKey = deps.Default.Config.MustGetString("clients.{{$clientID}}.requestUUIDHeaderKey")
	}
	timeoutInMS := int(deps.Default.Config.MustGetInt("clients.{{$clientID}}.timeout"))
	methodNames := map[string]string{
		{{range $i, $svc := .ProtoServices -}}
			{{range $j, $method := $svc.RPC -}}
			{{$serviceMethod := printf "%s::%s" $svc.Name .Name -}}
			{{$methodName := (title (index $exposedMethods $serviceMethod)) -}}
			{{- if $methodName -}}
				"{{$serviceMethod}}": "{{$methodName}}",
			{{ end -}}
			{{- end -}}
		{{- end}}
	}

	qpsLevels := map[string]string{
			{{range $methodName, $qpsLevel := $QPSLevels -}}
			"{{$methodName}}": "{{$qpsLevel}}",
			{{end}}
	}

	// circuitBreakerDisabled sets whether circuit-breaker should be disabled
	circuitBreakerDisabled := false
	if deps.Default.Config.ContainsKey("clients.{{$clientID}}.circuitBreakerDisabled") {
		circuitBreakerDisabled = deps.Default.Config.MustGetBoolean("clients.{{$clientID}}.circuitBreakerDisabled")
	}
	if !circuitBreakerDisabled {
		for _, methodName := range methodNames {
			circuitBreakerName := "{{$clientID}}"  + "-" + methodName
			qpsLevel := "default"
			if level, ok := qpsLevels[circuitBreakerName]; ok {
				qpsLevel = level
			}
			configureCircuitBreaker(deps, timeoutInMS, circuitBreakerName, qpsLevel)
		}
	}

	return &{{$clientName}}{
		{{range $i, $s := $services -}}
		{{camel $s.Name}}Client: gen.New{{pascal $s.Name}}YARPCClient(oc),
		{{ end -}}
		opts: zanzibar.NewGRPCClientOpts(
		deps.Default.ContextLogger,
		deps.Default.ContextMetrics,
		deps.Default.ContextExtractor,
		methodNames,
		"{{$clientID}}",
		routingKey,
		requestUUIDHeaderKey,
		circuitBreakerDisabled,
		timeoutInMS,
		),
	}
}