blob: a6e068abb7b31f6215e5d6f8cdee656afcb229c1 [file] [log] [blame]
{{/*
// 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 "Protocol:ClientImpl:WireMessagingHeader" }}
{{- IfdefFuchsia -}}
{{- EnsureNamespace "" }}
template<>
class {{ .WireWeakOnewayClientImpl }} : public ::fidl::internal::ClientImplBase {
public:
using ClientImplBase::ClientImplBase;
{{- range .OneWayMethods }}
{{- template "Method:WireWeakOnewayClientImpl:WireMessagingHeader" . }}
{{- end }}
};
template<>
class {{ .WireWeakAsyncClientImpl }} final : public {{ .WireWeakOnewayClientImpl }} {
public:
using {{ .WireWeakOnewayClientImpl.Self }}::{{ .WireWeakOnewayClientImpl.Self }};
{{- range .TwoWayMethods }}
{{- template "Method:WireWeakAsyncClientImpl:WireMessagingHeader" . }}
{{- end }}
};
template<>
class {{ .WireWeakOnewayBufferClientImpl }} : public ::fidl::internal::BufferClientImplBase {
public:
using BufferClientImplBase::BufferClientImplBase;
{{- range .OneWayMethods }}
{{- template "Method:ClientImplOnewayBuffer:WireMessagingHeader" . }}
{{- end }}
};
template<>
class {{ .WireWeakAsyncBufferClientImpl }} final : public {{ .WireWeakOnewayBufferClientImpl }} {
public:
using {{ .WireWeakOnewayBufferClientImpl.Self }}::{{ .WireWeakOnewayBufferClientImpl.Self }};
{{- range .TwoWayMethods }}
{{- template "Method:ClientImplAsyncBuffer:WireMessagingHeader" . }}
{{- end }}
};
{{- if .Transport.HasSyncClient }}
template<>
class {{ .WireWeakSyncClientImpl }} final : public {{ .WireWeakOnewayClientImpl }} {
public:
using {{ .WireWeakOnewayClientImpl.Self }}::{{ .WireWeakOnewayClientImpl.Self }};
{{- range .TwoWayMethods }}
{{- template "Method:WireWeakSyncClientImpl:WireMessagingHeader" . }}
{{- end }}
};
{{- end }}
{{- EndifFuchsia -}}
{{- end }}
{{- define "Protocol:ClientImpl:WireMessagingSource" }}
{{ EnsureNamespace ""}}
{{- IfdefFuchsia -}}
{{- range .OneWayMethods }}
{{- template "Method:WireWeakOnewayClientImpl:WireMessagingSource" . }}
{{- end }}
{{- range .TwoWayMethods }}
{{- template "Method:WireWeakAsyncClientImpl:WireMessagingSource" . }}
{{- end }}
{{- range .OneWayMethods }}
{{- template "Method:ClientImplOnewayBuffer:WireMessagingSource" . }}
{{- end }}
{{- range .TwoWayMethods }}
{{- template "Method:ClientImplAsyncBuffer:WireMessagingSource" . }}
{{- end }}
{{- if .Transport.HasSyncClient }}
{{- range .TwoWayMethods }}
{{- template "Method:WireWeakSyncClientImpl:WireMessagingSource" . }}
{{- end }}
{{- end }}
{{- EndifFuchsia -}}
{{- end }}
{{- define "Protocol:Client:NaturalMessagingHeader" }}
{{- IfdefFuchsia -}}
{{- range .Events }}
{{- template "Method:Event:NaturalMessagingHeader" . }}
{{- end }}
{{- range .TwoWayMethods }}
{{- template "Method:Response:NaturalMessagingHeader" . }}
{{- EnsureNamespace "" }}
template <>
class {{ .NaturalResult }} final : public {{ .NaturalResultBase }} {
public:
using {{ .NaturalResultBase }}::result;
protected:
{{ .NaturalResult.Self }}() = default;
};
{{ end }}
{{- EnsureNamespace "" }}
template<>
class {{ .NaturalClientImpl }} final : public ::fidl::internal::NaturalClientBase {
public:
using NaturalClientBase::NaturalClientBase;
{{- range .TwoWayMethods }}
{{- .Docs }}
{{ .NaturalThenable }} {{ .Name }}({{ .NaturalRequestArg "request" }}) const;
{{ "" }}
{{- end }}
{{- range .OneWayMethods }}
{{- .Docs }}
::fitx::result<::fidl::Error> {{ .Name }}({{ .NaturalRequestArg "request" }}) const;
{{ "" }}
{{- end }}
};
{{- EndifFuchsia -}}
{{- end }}
{{- define "Protocol:Client:NaturalMessagingSource" }}
{{- IfdefFuchsia }}
{{- range .Events }}
{{- template "Method:Event:NaturalMessagingSource" . }}
{{- end }}
{{- range .TwoWayMethods }}
{{- template "Method:Response:NaturalMessagingSource" . }}
{{- EnsureNamespace "" }}
{{ .NaturalThenable }}
{{ $.NaturalClientImpl.NoLeading }}::{{ .Name }}({{ .NaturalRequestArg "request" }}) const {
::fidl::internal::NaturalMessageEncoder _encoder{
&::fidl::internal::ChannelTransport::VTable, {{ .OrdinalName }}, {{ .DynamicFlagsName }} };
{{- if .HasRequestPayload }}
_encoder.EncodeBody(
{{ .NaturalRequestConverter }}::IntoDomainObject(std::move(request)));
{{- end }}
return {{ .NaturalThenable }}(
&client_base(), {}, std::move(_encoder),
[] (
::fidl::internal::ThenableBase* base,
::fidl::internal::NaturalMessageEncoder& encoder,
::fidl::internal::ResponseContext* response_context
) {
::fidl::OutgoingMessage msg = encoder.GetMessage();
return base->SendTwoWay(msg, response_context);
});
}
{{ end }}
{{- range .OneWayMethods }}
{{- EnsureNamespace "" }}
::fitx::result<::fidl::Error>
{{ $.NaturalClientImpl.NoLeading }}::{{ .Name }}({{ .NaturalRequestArg "request" }}) const {
::fidl::internal::NaturalMessageEncoder _encoder{
&::fidl::internal::ChannelTransport::VTable, {{ .OrdinalName }}, {{ .DynamicFlagsName }} };
{{- if .HasRequestPayload }}
_encoder.EncodeBody(
{{ .NaturalRequestConverter }}::IntoDomainObject(std::move(request)));
{{ end }}
::fidl::OutgoingMessage _encoded_message = _encoder.GetMessage();
::fidl::Status status = client_base().SendOneWay(_encoded_message);
return ::fidl::internal::ToFitxResult(status);
}
{{ end }}
{{- EndifFuchsia }}
{{- end }}