blob: 49d13a2d51dec5b9092b8214596426c582544410 [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:MessagingHeader" }}
{{- IfdefFuchsia -}}
{{- EnsureNamespace "" }}
template<>
class {{ .WireClientImpl }} final : public ::fidl::internal::ClientBase {
public:
{{- range .ClientMethods }}
{{- template "Method:ClientImpl:MessagingHeader" . }}
{{- end }}
{{ .WireClientImpl.Self }}() = default;
private:
std::optional<::fidl::UnbindInfo> DispatchEvent(
::fidl::IncomingMessage& msg,
::fidl::internal::AsyncEventHandler* maybe_event_handler,
const internal::IncomingTransportContext* transport_context) override;
};
{{- EndifFuchsia -}}
{{- end }}
{{- define "Protocol:ClientImpl:MessagingSource" }}
{{ EnsureNamespace ""}}
{{- IfdefFuchsia -}}
{{- range .ClientMethods }}
{{- template "Method:ClientImpl:MessagingSource" . }}
{{- end }}
std::optional<::fidl::UnbindInfo>
{{ .WireClientImpl.NoLeading }}::DispatchEvent(
fidl::IncomingMessage& msg,
::fidl::internal::AsyncEventHandler* maybe_event_handler,
const internal::IncomingTransportContext* transport_context) {
{{- if .Events }}
auto* event_handler = static_cast<{{ .WireAsyncEventHandler }}*>(maybe_event_handler);
fidl_message_header_t* hdr = msg.header();
switch (hdr->ordinal) {
{{- range .Events }}
case {{ .OrdinalName }}:
{
::fidl::DecodedMessage<{{ .WireResponse }}> decoded{std::move(msg)};
if (!decoded.ok()) {
return ::fidl::UnbindInfo{decoded};
}
if (event_handler) {
event_handler->{{ .Name }}(decoded.PrimaryObject());
}
return std::nullopt;
}
{{- end }}
default:
break;
}
{{- end }}
return ::fidl::UnbindInfo::UnknownOrdinal();
}
{{- EndifFuchsia -}}
{{- end }}