blob: ca072f533d3731d9e969e9f08887c9f6bb9da8ae [file] [log] [blame]
{{/*
// Copyright 2023 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:EventSender:driver/WireMessagingHeader" }}
{{- EnsureNamespace "" }}
template<>
class {{ .WireWeakBufferEventSender }} : public ::fdf::internal::WeakBufferEventSenderBase {
public:
using WeakBufferEventSenderBase::WeakBufferEventSenderBase;
{{ "" }}
{{- range .Events }}
{{- .Docs }}
fidl::OneWayStatus {{ .Name }}({{ RenderParams .ResponseArgs }});
{{ "" }}
{{- end }}
};
template<>
class {{ .WireBufferEventSender }}
: public ::fdf::internal::SyncEndpointBufferVeneer<{{ .WireBufferEventSender }}> {
public:
using SyncEndpointBufferVeneer::SyncEndpointBufferVeneer;
{{ "" }}
{{- range .Events }}
{{- .Docs }}
fidl::OneWayStatus {{ .Name }}({{ RenderParams .ResponseArgs }});
{{ "" }}
{{- end }}
};
{{- end }}
{{- define "Protocol:EventSender:driver/WireMessagingSource" }}
{{ EnsureNamespace "" }}
{{- range .Events }}
{{- /* Weak, caller-allocated */}}
{{ "" }}
fidl::OneWayStatus {{ $.WireWeakBufferEventSender.NoLeading }}::{{ .Name }}(
{{- RenderParams .ResponseArgs }}) {
constexpr uint32_t _buffer_size = ::fidl::EventReplyBufferSizeInChannel<{{ .Marker }}>();
uint8_t* _buffer = static_cast<uint8_t*>(_arena().Allocate(_buffer_size));
{{ .WireTransactionalEvent }} _response{ {{- RenderForwardParams .ResponseArgs }} };
::fidl::internal::UnownedEncodedMessage<{{ .WireTransactionalEvent }}, {{ .Transport.Type }}> _response_message(
_buffer, _buffer_size, &_response);
::fidl::WriteOptions _options = {
.outgoing_transport_context =
::fidl::internal::OutgoingTransportContext::Create<::fidl::internal::DriverTransport>(_arena().get()),
};
return _inner().SendEvent(_response_message.GetOutgoingMessage(), std::move(_options));
}
{{ "" }}
{{- /* Caller-allocated */}}
{{ "" }}
fidl::OneWayStatus {{ $.WireBufferEventSender.NoLeading }}::{{ .Name }}(
{{- RenderParams .ResponseArgs }}) {
constexpr uint32_t _buffer_size = ::fidl::EventReplyBufferSizeInChannel<{{ .Marker }}>();
uint8_t* _buffer = static_cast<uint8_t*>(_arena().Allocate(_buffer_size));
{{ .WireTransactionalEvent }} _response{ {{- RenderForwardParams .ResponseArgs }} };
::fidl::internal::UnownedEncodedMessage<{{ .WireTransactionalEvent }}, {{ .Transport.Type }}> _response_message(
_buffer, _buffer_size, &_response);
auto& _message = _response_message.GetOutgoingMessage();
::fidl::WriteOptions _options = {
.outgoing_transport_context =
::fidl::internal::OutgoingTransportContext::Create<::fidl::internal::DriverTransport>(_arena().get()),
};
_message.Write(_transport(), std::move(_options));
return ::fidl::OneWayStatus{::fidl::Status{_message}};
}
{{ "" }}
{{- end }}
{{- end }}