{{/*
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
*/}}

{{- define "Method:WireWeakAsyncClientImpl:WireMessagingHeader" }}

  {{- .Docs }}
  {{- if .DocComments }}
    //
  {{- end }}
  {{- if .Request.ClientAllocationV2.IsStack }}
    // Allocates {{ .Request.ClientAllocationV2.Size }} bytes of request buffer on the stack. The callback is stored on the heap.
  {{- else }}
    // The request and callback are allocated on the heap.
  {{- end }}
  {{ .WireThenable }} {{ .Name }}({{ RenderParams .RequestArgs }});

{{- end }}



{{- define "Method:WireWeakAsyncClientImpl:WireMessagingSource" }}

  {{ .WireThenable }} {{ .Protocol.WireWeakAsyncClientImpl.NoLeading }}::{{ .Name }}(
        {{- RenderParams .RequestArgs }}) {
    {{ .WireTransactionalRequest }} _request{ {{ RenderForwardParams .RequestArgs }} };
    return {{ .WireThenable }}{
        _client_base(), ::fidl::WriteOptions{}, ::fidl::internal::AllowUnownedInputRef{}, &_request};
  }

{{- end }}
