blob: d5039e2d91ec8266674317c7381933ed6bb75de9 [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:Interface:WireMessagingHeader" }}
{{- range .TwoWayMethods }}
{{- if eq .Transport.Name "Driver" }}
{{- template "Method:CompleterBase:driver/WireMessagingHeader" . }}
{{- else }}
{{- template "Method:CompleterBase:WireMessagingHeader" . }}
{{- end }}
{{- end }}
// Pure-virtual interface to be implemented by a server.
// This interface uses typed channels (i.e. |{{ .ClientEnd }}|
// and |{{ .ServerEnd }}|).
template<>
class {{ .WireServer }} : public ::fidl::internal::IncomingMessageDispatcher
{{- if .HandlesOneWayUnknownInteractions -}}
, public {{ .UnknownMethodHandler }}
{{- end }} {
public:
{{ .WireServer.Self }}() = default;
virtual ~{{ .WireServer.Self }}() = default;
// The FIDL protocol type that is implemented by this server.
using _EnclosingProtocol = {{ . }};
using Handler = fidl::ProtocolHandler<{{ . }}>;
{{ "" }}
{{- range .Methods }}
{{- if .HasRequest }}
using {{ .WireCompleterAlias.Self }} = {{ .WireCompleter }};
{{- if .HasRequestPayload }}
using {{ .WireRequestViewAlias.Self }} = {{ .RequestPayload }}*;
{{- end }}
{{ .Docs }}
virtual void {{ .Name }}(
{{- if .HasRequestPayload }}
{{ .RequestPayload }}* request,
{{- end }}
{{- if eq .Transport.Name "Driver" }}
fdf::Arena& arena,
{{- end }}
{{ .WireCompleterArg }}& completer) = 0;
{{ "" }}
{{- end }}
{{- end }}
// |bind_handler| returns a handler that binds incoming connections to this
// server implementation.
//
// The returned handler borrows the server instance.
// The server must outlive the provided |dispatcher|. Only after
// the dispatcher is shutdown will it be safe to destroy the servers.
// The server should not be moved.
Handler bind_handler({{ .Dispatcher }}* dispatcher) {
return [impl=this, dispatcher=dispatcher]({{ .ServerEnd }} request) {
(void) {{ .BindServer }}(dispatcher, std::move(request), impl);
};
}
private:
{{- /* Note that this implementation is snake_case to avoid name conflicts. */}}
void dispatch_message(
::fidl::IncomingHeaderAndMessage&& msg, ::fidl::Transaction* txn,
::fidl::internal::MessageStorageViewBase* storage_view) final;
};
{{- end }}
{{- define "Protocol:Interface:NaturalMessagingHeader" }}
{{- range .ClientMethods }}
{{- template "Method:Request:NaturalMessagingHeader" . }}
{{- end }}
{{- range .TwoWayMethods }}
{{- if eq .Transport.Name "Driver" }}
{{- template "Method:CompleterBase:driver/NaturalMessagingHeader" . }}
{{- else }}
{{- template "Method:CompleterBase:NaturalMessagingHeader" . }}
{{- end }}
{{- end }}
template<>
class {{ .NaturalServer }} : public ::fidl::internal::IncomingMessageDispatcher
{{- if .HandlesOneWayUnknownInteractions -}}
, public {{ .UnknownMethodHandler }}
{{- end }} {
public:
{{ .NaturalServer.Self }}() = default;
virtual ~{{ .NaturalServer.Self }}() = default;
// The FIDL protocol type that is implemented by this server.
using _EnclosingProtocol = {{ .Wire }};
using Handler = fidl::ProtocolHandler<{{ .Wire }}>;
{{ "" }}
{{- range .ClientMethods }}
{{- if .HasRequestPayload }}
using {{ .NaturalRequestAlias.Self }} = {{ .NaturalRequest }};
{{- end }}
using {{ .NaturalCompleterAlias.Self }} = {{ .NaturalCompleter }};
{{ .Docs }}
virtual void {{ .Name }}(
{{- if .HasRequestPayload }}
{{- .NaturalRequestAlias.Self }}& request,
{{- end }}
{{ .NaturalCompleterArg }}& completer
) = 0;
{{ "" }}
{{- end }}
// |bind_handler| returns a handler that binds incoming connections to this
// server implementation.
//
// The returned handler borrows the server instance.
// The server must outlive the provided |dispatcher|. Only after
// the dispatcher is shutdown will it be safe to destroy the servers.
// The server should not be moved.
Handler bind_handler({{ .Dispatcher }}* dispatcher) {
return [impl=this, dispatcher=dispatcher]({{ .ServerEnd }} request) {
(void) {{ .BindServer }}(dispatcher, std::move(request), impl);
};
}
private:
{{- /* Note that this implementation is snake_case to avoid name conflicts. */}}
void dispatch_message(
::fidl::IncomingHeaderAndMessage&& msg, ::fidl::Transaction* txn,
::fidl::internal::MessageStorageViewBase* storage_view) final;
};
{{- end }}
{{- define "Protocol:Interface:NaturalMessagingSource" }}
{{- range .ClientMethods }}
{{- template "Method:Request:NaturalMessagingSource" . }}
{{- end }}
{{- range .TwoWayMethods }}
{{- if eq .Transport.Name "Driver" }}
{{- template "Method:CompleterBase:driver/NaturalMessagingSource" . }}
{{- else }}
{{- template "Method:CompleterBase:NaturalMessagingSource" . }}
{{- end }}
{{- end }}
{{- end }}