blob: 205bf669516ba51bac28ad9394e0df7508d5a0e9 [file] [log] [blame]
{{/*
// Copyright 2021 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 "Protocol:Caller:WireMessagingHeader" }}
{{- EnsureNamespace "" }}
// Methods to make a sync FIDL call directly on an unowned handle or a
// const reference to a |{{ .Transport.Namespace }}::ClientEnd<{{ .WireType }}>|,
// avoiding setting up a client.
template<>
class {{ .WireSyncClientImpl }} final :
public ::fidl::internal::SyncEndpointManagedVeneer<{{ .WireSyncClientImpl }}> {
public:
{{/* Client-calling functions do not apply to events. */}}
{{ range .ClientMethods }}
{{ .Docs }}
//{{ template "Method:ClientAllocationComment:Helper" . }}
{{ .WireResult }} {{ .Name }}({{- RenderParams .RequestArgs }}) {
{{ .WireTransactionalRequest }} _request{ {{ RenderForwardParams .RequestArgs }} };
return {{ .WireResult }}(_client_end(), &_request);
}
{{ "" }}
{{- end }}
private:
::{{ .Transport.Namespace }}::UnownedClientEnd<{{ . }}> _client_end() const {
return ::{{ .Transport.Namespace }}::UnownedClientEnd<{{ . }}>(
_transport().get<{{ .Transport.Type }}>());
}
};
template <>
class {{ .WireSyncBufferClientImpl }} final :
public ::fidl::internal::SyncEndpointBufferVeneer<{{ .WireSyncBufferClientImpl }}> {
public:
{{/* Client-calling functions do not apply to events. */}}
{{ range .ClientMethods }}
{{- .Docs }}
// Caller provides the backing storage for FIDL message via an argument to `.buffer()`.
{{ .WireUnownedResult }} {{ .Name }}({{ RenderParams .RequestArgs }}) {
{{ .WireTransactionalRequest }} _request{ {{ RenderForwardParams .RequestArgs }} };
return {{ .WireUnownedResult }}(_client_end(), _allocator(), &_request);
}
{{ "" }}
{{- end }}
private:
::{{ .Transport.Namespace }}::UnownedClientEnd<{{ . }}> _client_end() const {
return ::{{ .Transport.Namespace }}::UnownedClientEnd<{{ . }}>(
_transport().get<{{ .Transport.Type }}>());
}
};
{{- end }}
{{- define "Protocol:Caller:NaturalMessagingHeader" }}
{{- EnsureNamespace "" }}
{{- IfdefFuchsia }}
template <>
class {{ .NaturalSyncClientImpl }} final
: public ::fidl::internal::SyncEndpointManagedVeneer<{{ .NaturalSyncClientImpl }}> {
public:
{{ range .TwoWayMethods }}
{{ .Docs }}
{{ .NaturalResult }} {{ .Name }}({{ .NaturalRequestArg "request" }});
{{ end }}
{{ range .OneWayMethods }}
{{ .Docs }}
::fitx::result<::fidl::Error> {{ .Name }}({{ .NaturalRequestArg "request" }});
{{ end }}
private:
::{{ .Transport.Namespace }}::UnownedClientEnd<{{ . }}> _client_end() const {
return ::{{ .Transport.Namespace }}::UnownedClientEnd<{{ . }}>(
_transport().get<{{ .Transport.Type }}>());
}
};
{{- EndifFuchsia }}
{{- end }}
{{- define "Protocol:Caller:NaturalMessagingSource" }}
{{- EnsureNamespace "" }}
{{- IfdefFuchsia }}
{{ range .TwoWayMethods }}
{{ .NaturalResult }}
{{ $.NaturalSyncClientImpl.NoLeading }}::{{ .Name }}({{ .NaturalRequestArg "request" }}) {
::fidl::internal::NaturalMessageEncoder encoder{
&::fidl::internal::ChannelTransport::VTable, {{ .OrdinalName }}, {{ .DynamicFlagsName }} };
{{- if .HasRequestPayload }}
encoder.EncodeBody(
{{ .NaturalRequestConverter }}::IntoDomainObject(std::move(request)));
{{- end }}
::fidl::OutgoingMessage msg = encoder.GetMessage();
{{ .IncomingMessageStorageForResponse }} response_storage;
return ::fidl::internal::DecodeResponseAndFoldError<{{ .Marker }}>(
msg.Call(_client_end().handle(), response_storage.view()), nullptr);
}
{{ end }}
{{ range .OneWayMethods }}
::fitx::result<::fidl::Error>
{{ $.NaturalSyncClientImpl.NoLeading }}::{{ .Name }}({{ .NaturalRequestArg "request" }}) {
::fidl::internal::NaturalMessageEncoder encoder{
&::fidl::internal::ChannelTransport::VTable, {{ .OrdinalName }}, {{ .DynamicFlagsName }} };
{{- if .HasRequestPayload }}
encoder.EncodeBody(
{{ .NaturalRequestConverter }}::IntoDomainObject(std::move(request)));
{{- end }}
::fidl::OutgoingMessage msg = encoder.GetMessage();
msg.Write(_client_end().handle());
return ::fidl::internal::ToFitxResult(::fidl::Status{msg});
}
{{ end }}
{{- EndifFuchsia }}
{{- end }}